Генератор UUID, ULID и nanoid

Инструмент создаёт уникальные идентификаторы для записей в базе данных, ключей, имён файлов и тестовых данных: UUID версий 4 и 7, ULID и короткие nanoid. Готовый идентификатор можно разобрать — узнать версию UUID и, если она хранит время, когда он был создан.

Как пользоваться

Выберите формат и количество — список обновится сразу; кнопка «Сгенерировать заново» создаёт новый набор с теми же настройками. Регистр и дефисы меняют только запись готовых UUID, сохраняя сами значения. Подсветка выделяет время, версию и цифру с битами варианта. Результат можно скопировать целиком или скачать текстовым файлом, по одному идентификатору в строке.

Чтобы разобрать идентификатор, вставьте его в поле «Разбор UUID и ULID»: подходят запись с дефисами и без них, в фигурных скобках и с префиксом urn:uuid:. Значения создаются в браузере через crypto.getRandomValues и не отправляются на сервер.

Формат

Генерируем…

Идентификаторы

Подсветка: время, версия и цифра с битами варианта. У UUID v4 времени нет; у nanoid нет выделенных полей.

Разбор UUID и ULID

UUID любой версии (с дефисами, без них, в фигурных скобках или с urn:uuid:) или ULID.

Вставьте идентификатор — разбор появится сразу.

Разбор идентификатора

Для генерации включите JavaScript. Пример UUID v4: 3b241101-e2bb-4255-8caf-4136c566a962 — цифра после второго дефиса показывает версию.

Какой формат выбрать

  • UUID v4 — 122 случайных бита. Самый распространённый формат, его понимают все базы данных и библиотеки. В браузере и Node.js создаётся встроенным crypto.randomUUID().
  • UUID v7 — первые 48 бит хранят время в миллисекундах, остальное случайно. Новые значения больше старых, поэтому индекс базы данных растёт по порядку, а не вставляет записи в случайные места. Хороший выбор для первичного ключа.
  • ULID — те же 48 бит времени и 80 случайных, но записанные 26 символами Base32 Крокфорда: короче UUID, без дефисов и без похожих символов I, L, O и U. Сортируется как строка.
  • nanoid — короткая случайная строка: по умолчанию 21 символ из букв, цифр, _ и -, около 126 случайных бит. Подходит для адресов и коротких ссылок. Длину и алфавит можно изменить, но с меньшей длиной растёт риск совпадения.

В v7 и ULID несколько значений, созданных в одну миллисекунду, тоже идут по возрастанию: генератор увеличивает счётчик внутри миллисекунды, как описано в RFC 9562 и спецификации ULID.

Из чего состоит UUID

UUID — 128 бит, записанные 32 шестнадцатеричными цифрами в группах 8-4-4-4-12. Первая цифра третьей группы — версия, первая цифра четвёртой группы задаёт вариант: для стандартных UUID это 8, 9, a или b.

UUID
01937d5e-8a2c-7b41-9f3e-5c1d2a4b6e80
              ↑    ↑
         версия 7  вариант RFC 9562

Время создания можно прочитать из версий 1, 6 и 7 и из ULID. В v4 время не записано, а в v3 и v5 хранится хэш имени, по которому исходные данные не восстановить.

Вопросы и ответы

Могут ли два UUID v4 совпасть?

Теоретически да, практически нет: чтобы вероятность совпадения дошла до одной миллиардной, нужно около 1014 идентификаторов. Для UUID v4 и nanoid инструмент показывает оценку вероятности совпадения. В одном наборе UUID v7 и ULID повторы исключает монотонный генератор; между отдельными наборами совпадения возможны.

Можно ли сгенерировать UUID через Math.random()?

Не стоит: Math.random() не предназначен для непредсказуемых значений, и в некоторых средах его последовательность можно восстановить. Используйте crypto.randomUUID() или crypto.getRandomValues().

Не раскрывает ли UUID v7 время создания?

Раскрывает с точностью до миллисекунды — это видно в разборе выше. Если по идентификатору в адресе нельзя узнавать, когда создана запись, используйте v4 или nanoid.

Прописные или строчные буквы?

RFC 9562 рекомендует выводить UUID строчными буквами, но при чтении принимать оба варианта. Прописные встречаются в среде Microsoft, например в GUID.

Связанные инструменты

Хэши MD5 и SHA для сверки данных вычисляет инструмент «Хэши MD5 и SHA», а время в токенах авторизации показывает «Декодер JWT».