Генератор UUID

Криптографически стойкие UUID версии 4 — от одного до пятидесяти штук за раз.

UUID версии 4 — клик по строке копирует её

    Как работает генератор UUID v4

    Нажмите кнопку — и получите порцию случайных идентификаторов стандарта RFC 4122. Каждый UUID v4 — это 128 бит, из которых 122 бита случайны, а 6 заняты служебными метками версии и варианта. Случайность даёт crypto.getRandomValues — криптографический генератор браузера. Всё происходит локально: идентификаторы не покидают ваш компьютер.

    Привычная запись 8-4-4-4-12 — это 32 шестнадцатеричные цифры, разбитые дефисами на пять групп:

    xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx

    Цифра 4 в начале третьей группы — метка версии. Первый символ четвёртой группы (y) принимает значения 8, 9, a или b — это метка варианта. Всё остальное — чистая случайность, Math.random здесь не используется вовсе.

    О вероятности коллизий судит парадокс дней рождения: совпадения возможны задолго до перебора всех вариантов. Но пространство в 2¹²² настолько велико, что для шанса коллизии в 50% потребуется сгенерировать около 2,7 квинтиллиона UUID. При миллиарде идентификаторов в секунду на это ушло бы около 85 лет. Практическим риском пренебрегают. Для пачки в тысячу идентификаторов вероятность совпадения хотя бы одной пары — порядка одной квинтиллионной.

    Пример: вы создаёте заказ в базе на одном сервере, а коллега — на другом. С автоинкрементом ключи столкнулись бы при слиянии. С UUID v4 каждый получает свой идентификатор вида 3f6b2a41-9c5e-4d1f-8a2b-7e0c4f6d8a91 — и никакой координации между серверами не нужно. Так же работают офлайн-приложения: запись, созданная без интернета, получает свой UUID и при синхронизации не конфликтует с чужими.

    Где применяют UUID

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

    Почему здесь только версия 4

    У стандарта семь версий. V1 и v6 строятся от MAC-адреса и времени, v7 — от метки времени: они сортируются и дружелюбны к индексам, но раскрывают, когда и где созданы. V4 — чистая случайность: ничего не раскрывает и не требует исходных данных. Для большинства задач, от ключей в базе до имён файлов, это самый простой выбор.

    Есть и обратная сторона: случайные UUID плохо сортируются, и вставка их в индекс базы данных идёт медленнее, чем у последовательных ключей. Если таблица огромная и запись в неё непрерывная, посмотрите в сторону UUID v7. Для обычных проектов разница незаметна.

    Отдельно стоят версии v3, v5 и v8: они не случайны, а строятся хешированием имени внутри пространства имён — одинаковый вход всегда даёт одинаковый UUID. Это удобно, когда идентификатор нужно воспроизводить по исходным данным. Для свежих уникальных ключей, которые никому не должны быть предсказуемы, берут v4 или v7.

    Как пользоваться генератором

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

    • Укажите количество — от одного идентификатора до целой пачки.
    • Кнопка «Ещё» заменяет текущую порцию новой, «Скопировать все» отправляет список в буфер обмена.
    • Сохраняйте нужные UUID сразу: генератор не хранит историю, после обновления страницы они исчезнут.

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

    Чем UUID v4 отличается от v7?

    V4 — чистая случайность. V7 кодирует в начало метку времени, поэтому идентификаторы сортируются по времени создания и дружелюбнее к индексам баз данных. Здесь генерируется только v4.

    Насколько надёжна генерация?

    Используется crypto.getRandomValues — тот же генератор, что браузер применяет для ключей шифрования. Math.random не используется вовсе.

    Могут ли два сгенерированных UUID совпасть?

    Теоретически да, практически — нет: при миллиарде UUID в секунду столетие генерации даст шанс одной коллизии порядка 50%. Для любых прикладных задач риском пренебрегают.

    Что делает кнопка «Ещё»?

    Генерирует новую порцию идентификаторов взамен текущей — в том же количестве, что указано в поле.

    Что означает запись 8-4-4-4-12?

    Это 32 шестнадцатеричные цифры, разбитые дефисами на группы из 8, 4, 4, 4 и 12 символов. Цифра 4 в начале третьей группы — метка версии, первый символ четвёртой группы — метка варианта.

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

    У UUID v4 — 122 бита энтропии, что достаточно для многих задач. Но для токенов доступа и ссылок сброса пароля лучше брать специально сгенерированные секреты: стандарт не считает UUID секретом.