dojiksi
🆔

UUID генератор

Уникальные идентификаторы версий v4 (случайный) и v7 (с timestamp) для программирования, баз данных, API.

Что такое UUID

UUID (Universally Unique Identifier) — 128-битный идентификатор, представленный как 32 шестнадцатеричных символа в формате 8-4-4-4-12 (например: 550e8400-e29b-41d4-a716-446655440000).

Главная фишка: вероятность столкновения исчезающе мала. Можно генерировать UUID на миллионах устройств одновременно — они не повторятся.

Где используется

  • Первичные ключи в БД — вместо автоинкремента int
  • Идентификаторы сессий и токенов в веб-приложениях
  • Имена временных файлов, чтобы не конфликтовали
  • Корреляция запросов в распределённых системах (request-id, trace-id)
  • Идентификаторы устройств (DeviceId, AdvertisingId)
  • Сертификаты, лицензии, инвойсы

Версии UUID

ВерсияКак генерируетсяКогда применять
v1timestamp + MAC-адресстарый; можно отследить устройство
v3MD5 от именидетерминированный, одинаковое имя → одинаковый UUID
v4122 случайных битасамый частый, универсальный
v5SHA-1 от именикак v3, но новее и безопаснее
v7timestamp в Unix ms + случайные битысортируется по времени, идеален для БД

v4 vs v7 — какой выбрать

  • v4 (random) — простой, нет привязки к времени, нельзя отсортировать.
  • v7 (timestamp) — содержит время создания, сортируется по нему. Лучше для primary key в PostgreSQL/MySQL — индексы работают быстрее.
  • Совет: если у тебя новый проект — выбирай v7.

Вероятность столкновения

UUID v4 имеет 122 случайных бита (2 бита и 4 бита фиксированы). Это 2¹²² ≈ 5,3 × 10³⁶ возможных значений.

Чтобы получить 50% шанс столкновения (по «парадоксу дней рождения») нужно сгенерировать ~2,71 × 10¹⁸ UUID — это столько, что если генерировать миллиард UUID в секунду, понадобится 85 лет.

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

Можно ли использовать UUID как ID товара или пользователя?

Да, в БД это нормально. Но для URL и человеческого использования UUID длинный и нечитаемый — используй nanoid или короткие хэши (Hashids).

UUID v4 — действительно уникальный?

Практически да. Шанс столкновения исчезающе мал. Используй встроенный crypto.randomUUID() или нативные библиотеки — там качественный random.

UUID или autoincrement INT?

UUID: + независимость от БД, + можно генерировать на клиенте, − длиннее, − медленнее индексы. INT: + быстро, + компактно, − можно догадаться о соседних записях.

Как сгенерировать UUID в коде?

JavaScript: crypto.randomUUID(). Python: uuid.uuid4(). PostgreSQL: gen_random_uuid(). Go: uuid.New(). C#: Guid.NewGuid().