Инструменты
Руководства

Генератор UUID

Разработка

Создаёт криптографически случайные UUID (RFC 4122 v4) с помощью crypto.randomUUID.

100 % на клиенте Без бэкенда
На этой странице

Что такое UUID?#

UUID (Universally Unique Identifier, универсальный уникальный идентификатор; в системах Microsoft называется также GUID) — это 128-битный идентификатор, представленный 32 hex-цифрами, сгруппированными по схеме 8-4-4-4-12, например c9bf1d4d-7d4f-4b3a-8b2c-1e5f6a7b8c9d. Идея проста, но мощна: генерировать идентификаторы по запросу, без центрального органа и без координации между машинами, и при этом вероятность совпадения двух из них фактически равна нулю. Именно это свойство делает UUID стратегией первичного ключа по умолчанию для распределённых баз, полем id почти у каждого ресурса JSON API, correlation ID, связывающими строки логов между микросервисами, и именами загруженных файлов-блобов.

Эта страница генерирует UUID версии 4 по RFC 4122 — вариант, построенный из случайных бит. Версия 4 — то, что нужно почти в каждом современном случае: она не несёт MAC-адрес машины (в отличие от v1), не встраивает иерархию пространств имён (в отличие от v3/v5) и полагается только на криптографическую случайность для уникальности. Можно сгенерировать один UUID или пакет до 10 000 сразу, в нижнем или верхнем регистре, целиком в вашем браузере.

Две из 32 hex-цифр на самом деле не случайны — они объявляют собственный тип UUID. Ниббл version в позиции 14 (первый символ третьей группы) всегда равен 4, а ниббл variant в позиции 19 (первый символ четвёртой группы) — всегда 8, 9, a или b. Поэтому каждое значение, которое вы видите на этой странице, читается как xxxxxxxx-xxxx-4xxx-[89ab]xxx-xxxxxxxxxxxx. Эти две фиксированные позиции попутно служат самоописывающимся отпечатком: любая строка, подходящая под этот шаблон, — UUID v4, и короткой регуляркой можно провалидировать миллионы таких строк.

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

  1. Установите числовое поле Количество вверху — сколько UUID вам нужно, от 1 до 10 000. Поле ограничено этим диапазоном.
  2. Отметьте Верхний регистр, если нужен вывод только заглавными буквами (некоторые устаревшие системы и соглашения Microsoft GUID предпочитают C9BF1D4D-…). Оставьте снятым для нижнего регистра, который используют большинство современных стеков.
  3. Нажмите Создать. Значения появятся в моноширинной области вывода, по одному на строку.
  4. Нажмите Копировать, чтобы скопировать весь пакет в буфер обмена — готово к вставке в SQL INSERT, CSV, тестовый фикстур или seed-скрипт.
  5. Нажимайте Создать снова в любое время, когда нужна свежая порция — каждое нажатие извлекает новые случайные биты и выдаёт значения, которых раньше не существовало.

Ключевые возможности#

  • Настоящая криптографическая случайность. В защищённом контексте используется crypto.randomUUID() браузера, а в качестве запасного варианта — crypto.getRandomValues с rejection sampling по битам version и variant; это не Math.random(), который непригоден для идентификаторов.
  • Пакетная генерация. До 10 000 UUID одним щелчком, по одному на строку, — можно засеять базу или файл-фикстур без собственного скрипта.
  • Нижний или верхний регистр. Один переключатель покрывает оба соглашения.
  • Соответствие RFC 4122 v4. Ниббл version всегда 4, а ниббл variant всегда 8/9/a/b, поэтому каждое значение проходит стандартную регулярку v4.
  • 100 % на стороне клиента. Без бэкенда, без телеметрии. Сгенерированные здесь UUID нигде не записываются — они ваши с момента появления.

Разбор примера#

Нажмите Создать, оставив Количество по умолчанию 5, а Верхний регистр снятым — и получите пять строк наподобие (ваши значения будут другими — они случайные):

7f3a9c2e-1b4d-4e8f-a6c3-9d2b8e1f0a47
2c8d4f1a-9e3b-47a2-8c6d-1f5e9a0b3c28
a1b2c3d4-e5f6-4789-abcd-ef0123456789
9e8d7c6b-5a4f-3210-ba98-76543210fedc
4f3e2d1c-0b9a-8765-4321-fedcba987654

Присмотритесь к третьей группе в любой строке: она всегда начинается с 4. Посмотрите на четвёртую группу: она всегда начинается с 8, 9, a или b. Эти два символа не случайны — это маркеры version и variant, и именно благодаря им однострочный валидатор может подтвердить, что строка — настоящий UUID v4.

Если отметить Верхний регистр и сгенерировать снова, выйдет та же форма, но заглавными буквами, например 7F3A9C2E-1B4D-4E8F-A6C3-9D2B8E1F0A47 — те же биты, просто записанные для систем, ожидающих GUID в верхнем регистре.

FAQ#

Насколько уникален UUID v4 на самом деле? Возможны ли дубликаты?#

Числа быстро становятся абсурдными. Один UUID v4 несёт 122 бита настоящей случайности (128 минус 4 бита version и 2 бита variant). Чтобы получить хотя бы 50 % шанс одного совпадения, нужно сгенерировать около 2,71 × 10^36 UUID — это миллиард миллиардов миллиардов в секунду дольше возраста Вселенной. Для любой реалистичной базы или системы совпадения можно считать невозможными и не проверять их.

Безопасно ли использовать эти UUID как первичные ключи БД?#

Да — версия 4 самый частый выбор именно потому, что не требует координации. Единственное предупреждение — фрагментация индекса: чисто случайные ключи разбрасываются по B-дереву, поэтому для таблицы PostgreSQL или MySQL с очень интенсивной записью может подойти вариант UUIDv7 (сортировка по времени). Для идентификаторов ресурсов на уровне приложения, correlation ID и большинства таблиц обычного v4 достаточно.

Почему бы просто не собрать UUID из Math.random()?#

Потому что Math.random() криптографически нестойок — его выход может быть достаточно предсказуемым, чтобы злоумышленник, наблюдая несколько ID, мог угадать остальные. Этот инструмент намеренно использует crypto.randomUUID() (и запасной вариант crypto.getRandomValues с корректной обработкой version/variant), черпающий случайность из CSPRNG операционной системы. Для всего, что идентифицирует пользователя, сессию или ресурс, это различие существенно.

Можно ли здесь сгенерировать UUID версии 1, 5 или по имени?#

Нет — эта страница намеренно только для v4, поскольку v4 покрывает подавляющее большинство реальных случаев и не требует ничего, кроме источника случайности. Если вам нужен UUID v5 по имени (детерминированный из имени и пространства имён) — это другая задача, и ей место в коде вашего приложения или в специализированном инструменте.