Бесплатный генератор ULID — создание и декодирование
Генерируйте, декодируйте и конвертируйте ULID онлайн — бесплатно и 100% в браузере. Извлекайте timestamp из любого ULID, конвертируйте ULID в UUID и обратно, генерируйте пакетами, монотонный режим. Ничего не уходит на сервер.
Каждый ULID использует свежую 80-битную случайность.
ULID и UUID оба по 128 бит, поэтому конвертация без потерь и обратима. Нужны классические UUID? Попробуйте генератор UUID.
Что такое ULID?
ULID — Universally Unique Lexicographically Sortable Identifier — это 128-битный идентификатор, созданный, чтобы исправить практическую слабость случайного UUIDv4, сохранив его лучшее свойство: вы можете сгенерировать его где угодно, без центрального координатора, и быть уверены в его уникальности. Разница в том, что ULID сортируется по времени. Он представлен как 26 символов Crockford Base32, разделённых на две части: первые 10 символов — это 48-битный timestamp, отсчитывающий миллисекунды с начала эпохи Unix, а последние 16 символов — это 80 бит криптографически стойкой случайности. Поставьте время первым, закодируйте его в алфавите, сохраняющем порядок, — и идентификатор сортируется хронологически как обычная строка.
Этот единственный выбор в дизайне имеет огромные последствия для баз данных. Случайный первичный ключ UUIDv4 при каждой вставке попадает в непредсказуемое место B-tree индекса, что фрагментирует индекс, перегружает кеш и постепенно снижает производительность записи по мере роста таблицы. ULID же, поскольку у него префикс времени, каждый раз попадает в конец индекса или рядом — вставки остаются последовательными, индекс остаётся компактным, а диапазонные сканы по временному окну становятся дешёвыми. Вы получаете генерацию без координации, как у UUID, и локальность вставок, как у автоинкрементного целого, не раскрывая угадываемый последовательный счётчик.
Детали кодировки продуманы. Crockford Base32 исключает буквы I, L, O и U — и чтобы избежать визуальной путаницы с цифрами 1 и 0, и чтобы сделать строку нечувствительной к регистру при вводе. В результате получается 26 символов без дефисов, которые безопасно вставлять в URL, имя файла или заголовок запроса без экранирования — заметно короче, чем 36-символьная форма UUID с дефисами. 48-битный timestamp не исчерпается ещё очень долго: он может представлять даты вплоть до 10889 года, прежде чем счётчик миллисекунд переполнится.
ULID — не лучший инструмент для всего. Встроенный timestamp раскрывает, когда была создана запись, что является преимуществом для отладки и упорядочивания, но небольшой утечкой информации, если вы предпочли бы это не раскрывать. И если ваш стек привязан к типу UUID, вы можете предпочесть UUIDv7, который применяет ту же идею с префиксом времени внутри стандартного формата UUID. Но когда вам нужны короткие, URL-безопасные, сортируемые идентификаторы, которые можно создать на любом узле и прочитать из них timestamp, ULID — отличный выбор по умолчанию — а поскольку это всего лишь 128 бит, вы всегда можете конвертировать его в UUID и обратно на вкладке «Конвертировать» этого инструмента.
// Browser / Node with the `ulid` package
import { ulid, decodeTime } from 'ulid';
const id = ulid(); // e.g. 01KVT0F720ZK9N4T2QX7VR8WMC
const ts = decodeTime(id); // 1782210600000 -> 2026-06-23T10:30:00.000Z
// Monotonic factory: strictly increasing within the same millisecond
import { monotonicFactory } from 'ulid';
const next = monotonicFactory();
next(1782210600000); // 01KVT0F720ZK9N4T2QX7VR8WMC
next(1782210600000); // 01KVT0F720ZK9N4T2QX7VR8WMD
next(1782210600000); // 01KVT0F720ZK9N4T2QX7VR8WME Ключевые возможности
Генерация, декодирование и конвертация на одной странице
Три вкладки покрывают весь рабочий процесс с ULID: создавайте новые ULID, декодируйте существующий, чтобы прочитать его timestamp, и конвертируйте без потерь между ULID и UUID. Большинство конкурирующих инструментов делают только первое; здесь полный цикл живёт на одной странице.
Декодер timestamp
Вставьте любой ULID и прочитайте точную миллисекунду его создания — показанную в UTC, в вашем локальном времени и как сырые Unix-миллисекунды — плюс сегмент 80-битной случайности. Проверяйте, когда был создан идентификатор, без обращения к базе данных.
Конвертация ULID ↔ UUID без потерь
ULID и UUID оба по 128 бит, поэтому конвертация точна и обратима. Вкладка «Конвертировать» автоматически определяет, какой формат вы вставили, и выдаёт другой, позволяя соединить сортируемый ULID с колонкой или API типа UUID, не теряя ни единого бита.
Монотонный режим
Нужен строгий порядок даже для ID, созданных в одну миллисекунду? Монотонный режим увеличивает случайность, гарантируя, что каждый ULID больше предыдущего, и держит плотный цикл вставок идеально отсортированным.
Пакетная генерация
Создавайте до 50 ULID за раз и копируйте весь набор кнопкой «Скопировать всё». Идеально для подготовки тестовых фикстур, массовых вставок или заполнения справочной таблицы без пятидесяти кликов.
Произвольный timestamp
Встройте конкретный момент вместо текущего — полезно для детерминированных тестовых данных или для записей задним числом во время миграции с сохранением свойства сортируемости.
Криптографически стойкая случайность
80 случайных бит берутся из crypto.getRandomValues — CSPRNG браузера, никогда из Math.random — поэтому каждый ULID непредсказуем, а коллизии в одну миллисекунду исчезающе маловероятны.
100% приватно, только в браузере
Каждый ULID генерируется, декодируется и конвертируется целиком на вашем устройстве. Нет сетевых запросов, логирования и хранения — убедитесь сами в «Инструментах разработчика» → Network. Идентификаторы никогда не достигают третьей стороны.
Примеры ULID
Сгенерировать один ULID
Режим: стандартный · Количество: 1
01KVT0F720ZK9N4T2QX7VR8WMC
ULID — это 26 символов Crockford Base32. Первые 10 символов кодируют 48-битный timestamp в миллисекундах, а последние 16 — 80 бит криптографически стойкой случайности из crypto.getRandomValues. Поскольку timestamp идёт первым, а Base32 сохраняет порядок байтов, ULID, сгенерированные позже, всегда сортируются после более ранних как обычные строки — отдельный индекс не нужен. Нажмите «Скопировать», чтобы взять значение; нажмите «Сгенерировать» ещё раз для нового.
Декодировать ULID, чтобы прочитать его timestamp
01ARYZ6S41TSV4RRFFQ69G5FAV
Timestamp (UTC): 2016-07-30T22:36:16.385Z · Случайность: TSV4RRFFQ69G5FAV
Декодирование разворачивает первые 10 символов обратно в 48-битное значение миллисекунд, встроенное в момент создания — здесь 1469918176385 мс, то есть 2016-07-30T22:36:16.385Z. Это канонический пример из спецификации ULID. Вкладка «Декодировать» показывает timestamp в UTC и в вашем локальном времени, сырые Unix-миллисекунды и сегмент 80-битной случайности, так что вы можете точно проверить, когда был создан идентификатор, без обращения к базе данных.
Конвертировать ULID в UUID
01KVT0F720ZK9N4T2QX7VR8WMC
019ef407-9c40-fcd3-5268-57e9f784728c
ULID и UUID оба ровно по 128 бит, поэтому конвертация без потерь и полностью обратима — те же биты просто перекодируются из Crockford Base32 в шестнадцатеричную запись с дефисами. Вкладка «Конвертировать» автоматически определяет, что вы вставили — ULID или UUID — и преобразует в другую форму. Это позволяет хранить ULID в колонке типа UUID или передать ULID системе, которая понимает только UUID, а затем конвертировать обратно, когда снова понадобится сортируемая строка.
Пакетная генерация монотонных ULID
Режим: монотонный · Количество: 3 (одна миллисекунда)
01KVT0F720ZK9N4T2QX7VR8WMC 01KVT0F720ZK9N4T2QX7VR8WMD 01KVT0F720ZK9N4T2QX7VR8WME
Когда много ID создаётся внутри одной миллисекунды, обычные ULID разделяют 10-символьный префикс времени, но их случайные хвосты не упорядочены. Монотонный режим решает это: внутри одной миллисекунды он увеличивает предыдущую случайность на единицу, поэтому каждый ULID строго больше предыдущего, а пакет остаётся идеально отсортированным. Обратите внимание, что три значения различаются только последним символом (C, D, E) — идеально для высоконагруженных вставок, где порядок должен сохраняться даже на субмиллисекундных темпах.
Сгенерировать ULID для конкретной даты
Произвольное время: 2026-06-23 10:30:00 UTC
01KVT0F720… (компонент времени 01KVT0F720)
Задайте произвольный timestamp, и генератор встроит именно этот момент вместо текущего, по-прежнему заполняя случайность из стойкого ГСЧ. 10-символьный компонент времени для 2026-06-23T10:30:00.000Z — это 01KVT0F720. Это полезно для подготовки тестовых фикстур с детерминированными, упорядоченными по времени идентификаторами или для задним числом проставленных записей в миграции с сохранением свойства сортируемости.
Как пользоваться генератором ULID
- 1
Выберите режим генерации
Стандартный режим даёт каждому ULID свежую 80-битную случайность. Монотонный режим гарантирует, что ULID, созданные внутри одной миллисекунды, строго возрастают — выбирайте его для высоконагруженных вставок, где порядок должен сохраняться даже на субмиллисекундных темпах.
- 2
Задайте количество, регистр и (по желанию) произвольное время
Генерируйте от 1 до 50 ULID за раз. По умолчанию вывод ПРОПИСНОЙ — каноническая форма ULID — или переключитесь на строчный. Оставьте время пустым, чтобы проставить текущее, или задайте произвольный timestamp, чтобы встроить конкретный момент для фикстур или записей задним числом.
- 3
Сгенерируйте и скопируйте
Нажмите «Сгенерировать ULID». Используйте «Скопировать» для любого отдельного значения или «Скопировать всё», чтобы взять весь пакет как текст с разделением по строкам, готовый для вставки в код, seed-файл или таблицу.
- 4
Декодируйте ULID, чтобы прочитать его timestamp
На вкладке «Декодировать» вставьте любой ULID, чтобы извлечь 48-битный timestamp создания в UTC и локальном времени, сырые Unix-миллисекунды и 80-битную случайность — целиком в вашем браузере, без обращений к базе.
- 5
Конвертируйте между ULID и UUID
На вкладке «ULID ↔ UUID» вставьте ULID или UUID; инструмент автоматически определит ввод и без потерь конвертирует в другой формат. Храните ULID в колонках UUID или передавайте ULID системе, понимающей только UUID, и конвертируйте обратно, когда нужна сортируемая строка.
Common Errors
Считать ULID одной миллисекунды упорядоченными
Обычные ULID, созданные внутри одной миллисекунды, разделяют префикс времени, но имеют неупорядоченные случайные хвосты, поэтому их взаимный порядок не определён. Если вы зависите от строгого порядка на таком темпе, используйте вместо этого монотонный режим.
Стандартный режим, 3 ID в одну мс → порядок внутри мс случаен
Монотонный режим, 3 ID в одну мс → …WMC < …WMD < …WME
Ожидать, что конвертированный ULID будет валидным UUIDv4
Конвертация ULID в форму UUID перекодирует те же 128 бит; она не задаёт поля версии и варианта UUID. Результат — валидная 128-битная строка UUID, но она не будет распознана как версия 4 или 7, если библиотека проверит эти биты.
uuid.version(ulidToUuid(id)) → не 4 (биты принадлежат ULID)
Считайте его непрозрачным 128-битным значением или сгенерируйте настоящий UUIDv7
Ввод строчных i, l, o в ULID вручную
Crockford Base32 исключает I, L, O и U. Декодеры отображают I и L в 1, а O в 0, но ввод этих букв в ULID вручную чреват ошибками. Копируйте ULID, а не перепечатывайте их.
01ARYZ6S41TSV4RRFFQ69G5FAO → неоднозначная O
01ARYZ6S41TSV4RRFFQ69G5FAV → только канонические символы
Для чего используют ULID
- Первичные ключи БД, которые остаются отсортированными
- Используйте ULID как первичные ключи, чтобы получить генерацию без координации, как у UUID, и локальность вставок, как у автоинкрементного целого. Поскольку у них префикс времени, новые строки добавляются ближе к концу B-tree индекса, а не разбрасываются, как UUIDv4, что держит вставки быстрыми, а индекс компактным по мере роста таблицы.
- Распределённые системы без центральной последовательности
- Генерируйте идентификаторы на любом узле — сервисе, edge-воркере или клиенте — без общего счётчика и координации коллизий, и всё равно сортируйте всё по времени создания постфактум. ULID дают микросервисам уникальный, упорядоченный ключ без обращения к базе данных за его выделением.
- Журналы событий и ID сообщений
- Помечайте события, строки логов или сообщения очереди монотонными ULID, чтобы они оставались в строгом хронологическом порядке, даже когда многие из них создаются внутри одной миллисекунды. Диапазонное сканирование временного окна становится простым сравнением строк.
- URL-безопасные публичные идентификаторы
- ULID — это 26 символов без дефисов и с URL-безопасным алфавитом, поэтому он вставляется в путь, имя файла или заголовок без экранирования и короче 36-символьного UUID. Позже декодируйте встроенный timestamp, чтобы узнать, когда был создан ресурс.
- Мост к системе, работающей только с UUID
- Работаете с колонкой БД или API, принимающим только UUID? Генерируйте сортируемые ULID, конвертируйте их в форму UUID для хранения или передачи и конвертируйте обратно, когда нужна компактная сортируемая строка — 128-битное значение сохраняется в точности в обоих направлениях.
- Детерминированные тестовые фикстуры
- Заполняйте тесты ULID с заданными timestamp с помощью опции произвольного времени, чтобы фикстуры были воспроизводимыми и уже упорядоченными по времени. Декодируйте их в проверках, чтобы подтвердить время создания, записанное вашим кодом.
Как работают ULID
- 128-битная раскладка: 48 бит времени + 80 бит случайности
- ULID — это ровно 128 бит. Старшие 48 бит — это Unix timestamp в миллисекундах; младшие 80 бит — случайные. При кодировании в Crockford Base32 по 5 бит на символ это 10 символов для времени и 16 для случайности — всего 26 символов. Ведущий символ всегда 7 или меньше, потому что 48 бит не заполняют верхнюю 5-битную группу.
- Кодировка Crockford Base32
- ULID используют алфавит Crockford Base32 (0–9 и A–Z без I, L, O и U). Отбрасывание этих четырёх букв избегает путаницы с цифрами 1 и 0 и позволяет декодерам обрабатывать строку без учёта регистра, отображая при вводе I и L в 1, а O в 0. Алфавит упорядочен, и именно это заставляет закодированную строку сортироваться так же, как лежащие в основе биты.
- Лексикографическая сортируемость
- Поскольку timestamp — самый значимый компонент, а алфавит Base32 сохраняет порядок, сравнение двух ULID как строк даёт тот же результат, что и сравнение их 128-битных значений, что даёт тот же результат, что и сравнение их времён создания. Именно это позволяет обычному ORDER BY или сортировке массива выдавать хронологический порядок без дополнительного индекса.
- Монотонность внутри миллисекунды
- Монотонная опция спецификации ULID держит порядок стабильным для ID, созданных в одну миллисекунду: случайность первого ID в миллисекунде генерируется обычным образом, а каждый последующий ID в этой миллисекунде — это предыдущее случайное значение плюс единица. Этот инструмент реализует это, увеличивая 80-битную случайность как целое число с порядком байтов от старшего к младшему.
- Стойкая случайность через crypto.getRandomValues
- 80 случайных бит заполняются из crypto.getRandomValues — CSPRNG Web Crypto, а не Math.random. При 80 битах энтропии генерация даже миллионов ULID в одну миллисекунду держит вероятность коллизии пренебрежимо малой.
- ULID ↔ UUID — это чистая перекодировка
- Конвертация между ULID и UUID не меняет ни одного бита — она перекодирует те же 128 бит из Crockford Base32 в шестнадцатеричную запись с дефисами или обратно. В результате цикл точен: ULID, конвертированный в UUID и обратно, побайтово идентичен исходному. Учтите, что байты ULID не задают поля версии и варианта UUID, поэтому получившийся UUID — валидное 128-битное значение, но не UUIDv4 или v7 с меткой версии.
Лучшие практики ULID
- Используйте монотонный режим для высоконагруженных вставок
- Если ваша система может создавать более одного идентификатора в миллисекунду и вы полагаетесь на порядок, генерируйте монотонные ULID. Обычные ULID не упорядочены внутри миллисекунды; монотонные строго возрастают, поэтому пакет остаётся отсортированным, как бы быстро вы их ни создавали.
- Храните ULID компактно
- ULID — это 128 бит — храните его как 16 двоичных байтов или колонку типа UUID, а не как 26-символьное текстовое поле, когда важны место и размер индекса. Преобразуйте в строку Base32 только на границах, где его видят люди или URL. Вкладка «Конвертировать» этого инструмента даёт вам форму UUID для хранения.
- Помните, что timestamp виден
- ULID раскрывает время своего создания каждому, кто может его прочитать. Это отлично для отладки и упорядочивания, но если раскрытие времени создания вызывает беспокойство — скажем, в публичном идентификаторе — взвесьте эту утечку или используйте полностью случайный UUIDv4 там, где порядок не важен.
- Всегда генерируйте через CSPRNG
- Гарантия уникальности зависит от непредсказуемости 80 случайных бит. Используйте криптографически стойкий источник вроде crypto.getRandomValues, как делает этот инструмент — никогда Math.random, чья предсказуемость могла бы привести к коллизии или угадыванию идентификаторов.
- Выбирайте ULID или UUIDv7 осознанно
- Оба дают упорядоченные по времени 128-битные ID. Выбирайте ULID ради самой короткой URL-безопасной строки; выбирайте UUIDv7, когда нужно оставаться в стандартном формате UUID с битами версии и варианта. Стандартизируйтесь на одном в рамках системы и используйте вкладку «Конвертировать», когда нужно пересечь границу.
ULID — часто задаваемые вопросы
Что такое ULID?
ULID или UUID — что выбрать?
Сортируются ли ULID?
Как декодировать timestamp из ULID?
Что такое монотонный ULID?
Безопасен ли и приватен ли этот генератор ULID?
В чём разница между ULID и UUIDv7?
Похожие инструменты
Все инструменты →Генератор и проверка bcrypt-хешей
Безопасность
Создавайте и проверяйте bcrypt-хеши паролей онлайн — настраиваемый фактор стоимости, префиксы $2b$/$2a$/$2y$. 100% в браузере; пароль никуда не отправляется.
Декодер JWT
Безопасность
Декодируйте JWT-токены онлайн бесплатно. Просмотр header, payload, signature, срока действия, алгоритма и claims. 100% в браузере — токен не покидает устройство. Без регистрации.
JWT-энкодер и генератор
Безопасность
Бесплатный онлайн-генератор и энкодер JWT. Соберите header и payload, подпишите с HS256, RS256 или ES256 мгновенно. 100% в браузере — ваш секрет и ключ не покидают устройство.
Бесплатный генератор JWT-секрета — HS256/384/512
Безопасность
Создайте надёжный JWT-секрет по RFC для HS256/384/512 — 100% в браузере, ничего не уходит на сервер. base64url, base64 или hex; копия для .env.
Генератор MD5-хешей и контрольных сумм файлов
Безопасность
Создавайте MD5, SHA-256, SHA-1 и SHA-512 хеши онлайн бесплатно. Хеширование текста или файлов в браузере, проверка контрольных сумм и копирование результатов. Без регистрации.
Генератор случайных паролей — настраиваемый и безопасный
Безопасность
Генерируйте сильные случайные пароли мгновенно — бесплатно, 100% в браузере. Настройка длины и символов, batch до 50 с анализом энтропии.