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
| Версия | Как генерируется | Когда применять |
|---|---|---|
| v1 | timestamp + MAC-адрес | старый; можно отследить устройство |
| v3 | MD5 от имени | детерминированный, одинаковое имя → одинаковый UUID |
| v4 | 122 случайных бита | самый частый, универсальный |
| v5 | SHA-1 от имени | как v3, но новее и безопаснее |
| v7 | timestamp в 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().