Генератор UUID
Генерируйте UUID — случайные v4 или упорядоченные по времени v7 — по одному или пачкой, в нужном формате, и вставляйте любой UUID обратно, чтобы узнать его версию и время создания.
Устройство UUID версии 4
Возьмём f47ac10b-58cc-4372-a567-0e02b2c3d479. Цифра
4, открывающая третью группу, — маркер версии, а
a в начале четвёртой группы кодирует вариант: её старшие
биты всегда 10, поэтому этот символ бывает только 8, 9, a
или b. Все остальные шестнадцатеричные цифры случайны.
Так из 128 бит случайными остаются 122. Дефисы не несут информации — они нужны только для читаемости, поэтому формат без дефисов столь же корректен, а в базе значение всё равно занимает 16 байт.
Насколько на самом деле маловероятно совпадение
122 случайных бита дают 5,3 × 10³⁶ возможных значений. Парадокс дней рождения говорит, что число, при котором совпадение становится вероятным, — примерно квадратный корень из этого, а не само число:
| Сгенерировано UUID | Шанс одного совпадения | При миллиарде в секунду |
|---|---|---|
| 103 триллиона | 1 на миллиард | 29 часов |
| 103 квадриллиона | 1 на тысячу | 3,3 года |
| 2,7 квинтиллиона | Равные шансы | 86 лет |
Поэтому дубликат в продакшене — это баг-репорт об источнике случайности, а не статистическая диковинка.
Какую версию выбрать
| Версия | На чём основана | Когда применять |
|---|---|---|
| v1 | Метка времени + MAC-адрес | Устаревшая — раскрывает оборудование |
| v4 | Случайность | По умолчанию для публичных идентификаторов |
| v5 | Пространство имён + имя (SHA-1) | Одинаковый вход должен давать тот же ID |
| v7 | Метка времени + случайность | Ключи базы, где важна сортируемая вставка |
Частые вопросы
Когда выбирать версию 7 вместо версии 4?
Когда идентификатор становится ключом в базе. v4 — это шестнадцать случайных байт, поэтому подряд идущие вставки разлетаются по B-дереву и каждая пачкает свою страницу; v7 несёт метку времени в старших битах, так что созданные по порядку идентификаторы по порядку и сортируются, а вставки остаются в конце индекса. Берите v4, когда идентификатор публичный и не должен ничего сообщать: v7 выдаёт любому, кто его видит, примерное время создания записи.
Действительно ли сортируются UUID v7, созданные одной пачкой?
Да. Вся пачка попадает в одну миллисекунду, поэтому одна метка времени их не упорядочит — остальные биты были бы случайными, и набор выглядел бы сортируемым, не будучи им. Этот генератор держит счётчик в тех двенадцати битах, которые RFC 9562 для этого и отводит, и переходит в следующую миллисекунду, когда счётчик заполняется. Тысяча значений выходит ровно в том порядке, в каком создана.
Что такое UUID версии 4?
128-битный идентификатор, в котором 122 бита случайны, а 6 — фиксированные маркеры версии и варианта. В нём нет ни метки времени, ни MAC-адреса, ни счётчика, поэтому он ничего не сообщает о том, когда и где был создан. Именно поэтому он — выбор по умолчанию для публичных идентификаторов.
Могут ли два UUID совпасть?
Теоретически да, практически нет. 122 случайных бита дают 5,3 × 10³⁶ возможных значений, и чтобы дойти до равных шансов на одно совпадение, нужно сгенерировать около 2,7 квинтиллиона. При миллиарде в секунду это 86 лет непрерывной работы. Любое совпадение в реальной системе объясняется сломанным источником случайности, а не невезением.
Можно ли использовать UUID как первичный ключ в базе?
Зависит от индекса. Случайные UUID разбрасывают записи по B-дереву, фрагментируя индекс и снижая скорость вставки на больших объёмах — это реальная плата в MySQL и SQL Server с кластерными индексами. UUIDv7, который помещает метку времени в старшие биты, сохраняет вставки последовательными и лучше подходит для новых схем, которым нужны оба свойства.
Насколько безопасно они генерируются?
Полностью. Используется crypto.randomUUID(), а где его нет — crypto.getRandomValues() с правильно выставленными битами версии и варианта. Оба питаются от криптографического пула энтропии операционной системы, поэтому результат годится для идентификаторов, которые нельзя угадать, например для токенов приглашения.
Похожие инструменты
- Конструктор схем и блок-схемРисуйте блок-схемы и диаграммы, соединяйте блоки стрелками, которые прокладывают себя сами, и раскладывайте всё автоматически. Экспорт в SVG.
- Генератор паролейСоздавайте надёжные пароли криптографическим генератором браузера с оценкой стойкости.
- HTML-сущностиКодируйте текст для HTML или декодируйте сущности обратно — ломающие разметку знаки, именованные наборы, числовые ссылки до эмодзи. Ровно один проход.