bitlvl
RU

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

Генерируйте идентификаторы с помощью криптографического источника случайности браузера или вставьте один, чтобы узнать его тип и время создания.

Тип
Формат
 

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

Результаты и сообщения этого инструмента выводятся на английском языке.

Какой тип выбрать?

UUID v4UUID v7ULID
Содержимое122 случайных бита48-битная метка времени в мс + 74 случайных бита48-битная метка времени в мс + 80 случайных бит
Сортируется по времениНетДаДа
Текстовая формаhex 8-4-4-4-12hex 8-4-4-4-1226 символов Crockford Base32
СтандартRFC 4122 / 9562RFC 9562 (2024)Спецификация сообщества
Удобство для БДПлох как первичный ключ: случайные вставки фрагментируют B-tree индексыХорош: новые строки попадают в конец индексаХорош, но требует 128-битный столбец или строку из 26 символов

Для новой системы разумный выбор по умолчанию — UUID v7: это стандартный UUID, его принимает любая база данных и язык, и он сохраняет индексы компактными. Используйте v4, когда ID не должен раскрывать время создания. ULID — хороший выбор там, где важна его более короткая, удобная для URL текстовая форма и экосистема уже его использует.

Чтение битов

В xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx цифра M — версия (4 или 7), а первые биты N — вариант (8, 9, a или b для стандартных UUID). В v7 первые 12 hex-цифр — Unix-время в миллисекундах; в v1 время разбросано по трём полям, а последние 12 цифр — обычно MAC-адрес машины, которая его создала. Инспектор декодирует всё это.

Коллизии

У UUID v4 2¹²² возможных значений. Чтобы достичь 50% вероятности хотя бы одной коллизии, нужно сгенерировать около 2,7 × 10¹⁸ штук — примерно миллиард в секунду на протяжении 85 лет. На практике риск — плохой источник случайности, а не математика, поэтому эта страница использует crypto.getRandomValues, а не Math.random.

Вопросы

В чём разница между UUID и GUID?

На практике никакой. GUID — название Microsoft для того же 128-битного идентификатора. Инструменты Windows часто записывают их прописными буквами в фигурных скобках, что воспроизводит опция формата здесь.

Эти UUID действительно случайны?

Случайные биты берутся из криптографически стойкого генератора браузера (WebCrypto) — того же источника, что используется для ключей. Они не выводятся из ваших часов или чего-либо предсказуемого, за исключением того, что v7 и ULID намеренно включают текущее время.

Можно ли отследить UUID до меня?

v4 — нет. v7 или ULID раскрывают время создания. v1 может содержать MAC-адрес машины-генератора, поэтому v1 и вышел из употребления.

Стоит ли использовать UUID как первичный ключ в базе данных?

Да, если нужны ID, генерируемые клиентами или между сервисами, но предпочитайте v7, чтобы вставки были последовательными. Храните его в нативном 16-байтном столбце UUID (PostgreSQL uuid, MySQL BINARY(16)), а не в строке из 36 символов.

Что такое nil UUID?

00000000-0000-0000-0000-000000000000, определён как заполнитель, означающий «нет значения». RFC 9562 также определяет max UUID из одних единиц.