Генератор UUID · форматUUID v4 — генератор и как он устроен

Четвёртая версия — 122 случайных бита и шесть служебных. Её выдают по умолчанию почти все библиотеки и базы данных: она ничего не раскрывает о том, где и когда создана, и не требует никакой координации между машинами.

01Генератор02Устройство03Сравнение04Вопросы05Похожие
01

Генератор UUID v4

формат выбран — все настройки и проверка в полном генераторе
Количество
Регистр
Нажмите «Сгенерировать» — здесь появятся идентификаторы.
Все форматы, проверка и разбор UUID — в полном генераторе →
02

Как устроен: UUID v4

Образец550e8400-e29b-41d4-a716-446655440000
550e8400-e29b
случайные биты, первые 48
4
версия: всегда 4
1d4
ещё 12 случайных бит
a
вариант RFC (8, 9, a или b) и 2 случайных бита
716-446655440000
ещё 60 случайных бит — всего 122

Когда применять

  • Идентификатор, который не должен ничего выдавать: токены, ключи запросов, имена загруженных файлов.
  • Первичный ключ небольшой таблицы или распределённой системы, где порядок вставки не важен.
  • Любое место, где нужен «просто уникальный ID», — это значение по умолчанию.

Чем отличается от соседей

Главный сосед — v7. У v4 нет порядка: новые значения разбросаны по всему диапазону, и в большой таблице с индексом по ключу каждая вставка попадает в случайное место индекса. v7 начинается с времени и вставляется в конец. Если таблица растёт на миллионы строк — берите v7, иначе разница незаметна.

03

Сравнение форматов

ФорматДлинаСлучайностьВремя внутриСортируетсяСтандарт
UUID v436122 битанетнетRFC 9562
UUID v73674 битамс, 48 битдаRFC 9562
UUID v136узел и счётчик100 нс, 60 битнетRFC 9562, устаревший
Nil UUID36нетнет—RFC 9562
NanoID21126 битнетнетбиблиотека, не RFC
ULID2680 битмс, 48 битдаспецификация ULID, не RFC
04

Частые вопросы

Почти везде это одна встроенная функция: в браузере и Node.js — crypto.randomUUID(), в Python — uuid.uuid4(), в Java — UUID.randomUUID(), в C# — Guid.NewGuid(), в PostgreSQL начиная с 13-й версии — gen_random_uuid(). Все они выдают четвёртую версию из криптографического генератора. Сторонняя библиотека нужна разве что для старых окружений, где этих функций ещё нет.

Обновлено

«» добавлен в избранное