Генератор UUID

Создаёт идентификаторы двух версий. Четвёртая — привычная случайная, 122 бита случайности; такой идентификатор ни на что не намекает и ни с чем не связан.

До тысячи за раз.
Дефисы, скобки, приставка urn:uuid: и регистр значения не имеют.

Четвёртая версия и седьмая

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

Четвёртая версия строится на случайных числах: 122 бита из 128 берутся случайно, остальные шесть отведены под номер версии и служебные метки. Вероятность совпадения двух таких идентификаторов пренебрежимо мала.

Седьмая версия начинается с метки времени в миллисекундах, а остаток заполняется случайно. Благодаря этому идентификаторы упорядочены по времени создания, что заметно ускоряет работу баз данных при вставке.

Разница практическая: случайные идентификаторы вставляются в индекс базы в произвольные места и вызывают перестроение страниц, а упорядоченные ложатся подряд в конец. На больших таблицах это разница в разы по скорости записи.

Двоичные числа
В четвёртой версии 122 бита из 128 берутся случайно. Фото: Bärbel Miemietz, CC BY-SA 4.0.
ВерсияОсноваПорядок
1Время и MAC-адресПо времени
4Случайные числаПроизвольный
7Время и случайностьПо времени

От MAC-адреса до упорядоченных идентификаторов

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

Первая версия включала MAC-адрес сетевой карты и время создания. Это исключало совпадения, но раскрывало, на какой машине и когда идентификатор создан, — по такому следу однажды нашли автора вредоносной программы.

Четвёртая версия отказалась от привязки к устройству и стала стандартом по умолчанию. Пространство в 122 бита настолько велико, что для вероятности совпадения в одну миллиардную нужно сгенерировать порядка ста триллионов значений.

Седьмая версия описана в обновлённой спецификации 2024 года и вобрала опыт нескольких неформальных решений, придуманных в разных компаниях для той же задачи упорядоченности.

База данных
Упорядоченные по времени идентификаторы ложатся в индекс подряд. Фото: BernardoSulzbach, CC BY-SA 4.0.
Сетевая карта
Первая версия включала MAC-адрес и раскрывала машину-создателя. Фото: Jana.Wiki, CC BY-SA 3.0.

Что выбрать и как хранить

Для новых систем берите седьмую версию. Она исключает совпадения и заодно даёт порядок, а издержки при вставке в базу заметно ниже, чем у четвёртой.

Храните идентификатор в базе двоичным полем из 16 байт вместо строки из 36 символов. Экономия места больше чем вдвое, а сравнение работает быстрее.

Генерируйте идентификатор на стороне, которая создаёт запись. Это позволяет собрать связанные объекты до записи в базу и отправить их одной операцией.

Проверяйте версию при разборе чужих идентификаторов. Номер версии закодирован в самой строке, и по нему сразу видно, чего ожидать от порядка и от содержимого.

Не применяйте идентификаторы там, где хватит обычного счётчика. Для внутренних таблиц с одной точкой записи автоинкремент проще, короче и быстрее.

Помните, что идентификатор не секрет. Он уникален, но предсказуемость седьмой версии по времени позволяет угадать соседние значения — для токенов доступа нужны другие механизмы.

Не собирайте идентификатор из предсказуемых частей вручную. Самодельные схемы на времени и счётчике совпадают при одновременной записи с двух серверов.

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

Не выводите идентификаторы в адресную строку без нужды. Даже не будучи секретом, они попадают в журналы и в историю браузера вместе со ссылкой.

Проверьте, поддерживает ли ваша база отдельный тип для таких идентификаторов. Специальный тип экономит место и ускоряет сравнение по сравнению с текстовым полем.

Посчитать хеш строки поможет генератор хешей, а сгенерировать пароль — генератор паролей.

Длина128 бит
Запись36 символов с дефисами
Версия 4случайная
Случайных бит122
Версия 7время плюс случайность
Спецификация версии 72024
В базе хранитькак 16 байт
Секретом не являетсяда

Седьмая устроена иначе: первые 48 битов — это отметка времени в миллисекундах, поэтому идентификаторы сортируются по порядку создания.

Как пользоваться

Для первичного ключа в базе это принципиально: случайные v4 ложатся в индекс вразнобой и заставляют его постоянно перестраиваться, а упорядоченные v7 дописываются в конец. Случайность берётся у криптографического модуля браузера, тем же способом, что и для ключей шифрования. Вторая вкладка разбирает готовый идентификатор: показывает версию, вариант и, если это v7, восстанавливает дату создания.

  1. Четвёртая для общего случая, седьмая для ключей в базе.
  2. От одного до тысячи за раз.
  3. С дефисами, без них, в верхнем регистре, в скобках или как URN.
  4. Вторая вкладка показывает версию и дату создания для v7.

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

Идут ли идентификаторы v7 строго по возрастанию

В этом инструменте да. Одной отметки времени для этого мало: пачка из полусотни создаётся внутри одной миллисекунды, метка у всех совпадает, а остальные биты случайны — и порядок внутри миллисекунды получается произвольным. Стандарт RFC 9562 разрешает занять под счётчик двенадцать битов сразу за меткой времени, что здесь и сделано. Поэтому пачка любого размера идёт строго по возрастанию, и в индексе базы она ляжет подряд.

Чем UUID версии 7 лучше версии 4 для базы данных

Порядком. В v7 первые 48 битов — это время создания в миллисекундах, поэтому новые идентификаторы всегда больше старых. Когда такой ключ становится первичным, записи ложатся в конец индекса подряд. У случайного v4 каждая новая запись попадает в произвольное место дерева, страницы индекса дробятся, кэш перестаёт работать, и на больших таблицах вставка заметно замедляется. При этом v7 остаётся полноценным UUID и годится везде, где принимается обычный.

Раскрывает ли UUID v7 что-нибудь лишнее

Да, время создания: из идентификатора восстанавливается момент с точностью до миллисекунды. Если по идентификатору в адресе строки не должно быть понятно, когда объект создан, берите v4. Порядковость v7 работает в обе стороны: она полезна базе и она же выдаёт хронологию наружу.

Какова вероятность совпадения двух UUID

Пренебрежимо мала. В v4 случайных битов 122, то есть возможных значений порядка пяти на десять в тридцать шестой степени. Чтобы вероятность хотя бы одного совпадения дошла до одного процента, нужно сгенерировать около трёх на десять в семнадцатой степени идентификаторов. На практике совпадения случаются по другой причине — из-за плохого источника случайности, поэтому здесь используется криптографический модуль браузера.

Что означают версия и вариант

Версия — способ построения: 1 по времени и MAC-адресу, 4 случайный, 5 по хешу имени, 7 по времени и случайности. Она записана в первом знаке третьей группы. Вариант отвечает за раскладку битов и почти всегда равен единице по RFC 4122; он записан в первом знаке четвёртой группы, и у корректных идентификаторов там стоит 8, 9, a или b. Инструмент показывает оба поля при разборе.

Чем отличаются форматы записи

Только оформлением, значение одно и то же. Канонический вид — 36 знаков с дефисами. Без дефисов получается 32 знака, так UUID хранят в полях фиксированной длины. Фигурные скобки достались от систем Microsoft. Запись с приставкой urn:uuid: используется там, где нужен полноценный идентификатор ресурса. Регистр значения не имеет, но RFC 4122 предписывает выводить в нижнем.

Можно ли использовать UUID в адресе страницы

Можно, и это обычная практика для внутренних разделов: идентификатор не выдаёт ни порядковый номер записи, ни их общее количество, в отличие от числового id. Для публичных страниц, которые должны индексироваться, лучше человекочитаемый адрес: UUID в ссылке никому ни о чём не говорит и не помогает ни человеку, ни поиску.

Насколько это случайно

Случайность даёт crypto.getRandomValues — тот же источник, что применяется для криптографических ключей. Если его в браузере нет, генерация останавливается с сообщением: подставлять вместо него Math.random было бы опасно, потому что его последовательность предсказуема.

Расчёт идёт в браузере или на сервере?

Нет, всё создаётся в браузере.

Спросите нейросети об инструменте

Отвечает DeepSeek по данным этой страницы и тому, что у вас сейчас на экране: что делает, как устроен, ограничения

Похожие инструменты

Генератор хешей и контрольных сумм

MD5, SHA-1, SHA-256, SHA-384, SHA-512 и CRC32 от текста или файла сразу. Есть HMAC с ключом, вывод в Base64 и сверка с эталоном, которая сама узнаёт алгоритм.

Открыть
Генератор паролей

Пароль длиной до 64 символов с выбором наборов и отсевом похожих знаков. Показывает стойкость в битах и время перебора, делает до 50 паролей пачкой.

Открыть
JWT-декодер

Разбор токена JWT: заголовок, полезная нагрузка с расшифровкой стандартных полей, сроки выдачи и истечения в датах, проверка структуры. Без отправки на сервер.

Открыть
Сканер QR-кода

Считывает QR-код и штрихкод камерой или с картинки прямо в браузере: ссылка, Wi-Fi, визитка, телефон и номер товара разбираются по полям.

Открыть
Тестер регулярных выражений

Подсветка совпадений и групп, режим замены и разбор самого шаблона по-русски: что делает каждый кусок и почему выражение не сработало.

Открыть
Сравнить два JSON

Показывает, чем отличаются два ответа API: какие поля появились, пропали и изменились, с путём вида data.items[0].price. Служебные поля можно исключить.

Открыть

Ещё инструменты для кода и данных

Base64 и URL, форматтер и сравнение JSON, хеши, регулярные выражения, cron, подсети, UUID, QR-код и Unix-время — в разделе 42 инструмента.