Генератор UUID

Генерируйте UUID в браузере: случайные v4, упорядоченные v7 для ключей баз данных или детерминированные v5 на основе пространства имён и имени. До 1000 за раз без отправки на сервер.

Нажмите «Сгенерировать», чтобы получить результат
Версия
Расширенные настройки

Нужен идентификатор, который не совпадёт с тем, что создал кто-то другой на компьютере, о котором вы никогда не слышали, и без необходимости спрашивать чьего-либо разрешения? Именно эту задачу решает UUID. Это 128-битное число, записываемое как 36 символов в знакомом формате 8-4-4-4-12, и весь его дизайн заключается в том, что два таких числа не будут одинаковыми, даже если никто не координирует, кому какое достанется. Этот бесплатный генератор создаёт их в вашем браузере: выберите версию в поле Версия, укажите нужное количество в поле Количество и нажмите Сгенерировать. Страница открывается с одним идентификатором v4 — версией, которая нужна большинству проектов, поэтому первый UUID находится на расстоянии одного клика.

Каждый идентификатор создаётся вашим браузером через Web Crypto API. Версия 4 использует crypto.randomUUID(), если браузер это поддерживает, и crypto.getRandomValues() в противном случае — это криптографически надёжный источник случайности, а не псевдослучайная функция JavaScript вроде Math.random(). Версия 7 помещает 48-битную метку времени в миллисекундах в начало, затем 12-битный счётчик, который увеличивается в пределах одной миллисекунды, и 62 случайных бита — это метод упорядочения, описанный в RFC 9562; именно благодаря этому счётчику партия из тысячи генерируется по порядку, а не вперемешку. Версия 1 объединяет метку времени со случайным идентификатором узла, в котором установлен бит многоадресной рассылки, поэтому она никогда не содержит адрес вашей сетевой карты, как это делали оригинальные реализации 1990-х годов. Версии 3 и 5 вовсе не случайны: они хешируют пространство имён вместе с именем, используя MD5 и SHA-1 соответственно, и это хеширование также происходит на вашем устройстве. Ничто не отправляется на сервер, ничего не логируется, и после загрузки страницы инструмент продолжает работать даже с отключённым интернетом.

Версия — это поле, которое решает всё остальное. Версия 4 — это 122 случайных бита и никакой структуры: это вариант по умолчанию и правильный выбор, когда идентификатор должен быть только уникальным. Версия 7 сохраняет 62 случайных бита, но начинается со времени создания, поэтому набор таких идентификаторов сортируется в порядке их генерации; именно это делает её лучшим выбором, когда идентификатор станет ключом базы данных. Версия 1 — это оригинальная схема на основе времени, сохранённая здесь для систем, которые всё ещё её требуют. Версии 3 и 5 — необычная пара: они детерминированы, то есть одни и те же входные данные всегда производят один и тот же идентификатор, и они используют два дополнительных поля — Пространство имён, которое является одним из стандартных пространств DNS, URL, OID и X.500 или вашим собственным (Своё пространство имён (UUID)), и Имя, то есть идентифицируемую строку. Передайте v5 пространство имён URL и https://example.com/a, и вы получите тот же самый UUID сегодня, завтра и на чужом компьютере. Из-за этого поле Количество исчезает, когда выбрана v3 или v5: тысяча копий одного детерминированного значения была бы просто тысячей копий одного детерминированного значения. Для любой другой версии Количество позволяет указать от 1 до 1000.

Четыре переключателя меняют форму вывода, не меняя 128 бит под ней. Заглавные буквы выводит шестнадцатеричные цифры в верхнем регистре, Без дефисов даёт компактную форму из 32 символов, которую предпочитают некоторые столбцы и имена файлов, а Фигурные скобки оборачивает значение в { } — форму, которую Windows и мир .NET называют GUID. В разделе Расширенные настройки, urn:uuid: добавляет префикс, превращающий его в формальный URN; он отключает Фигурные скобки и Без дефисов, пока включён, поскольку стандарт допускает ровно одну форму URN, и это каноническая форма с дефисами. Формат копирования решает, как объединяется партия при копировании: по одному на строку, через запятую или каждое значение в кавычках с запятой в конце, что можно вставить прямо в массив в коде. Под результатом находится строка, которая сообщает о случайности в битах — 122 для v4, 62 для v7 — и, для v7, метку времени, закодированную в первом идентификаторе партии, поэтому время внутри значения является видимым, а не подразумеваемым. Скопировать всё и Сохранить в файл подчиняются опции Формат копирования. История хранит ваши последние 10 партий прямо в браузере: нажмите на одну, чтобы вернуть её, скопируйте или удалите отдельную запись, или очистите всё. Очистить убирает результат, оставляя ваши настройки нетронутыми, а после 50 идентификаторов список становится единым прокручиваемым блоком вместо пятидесяти строк.

Самая значимая вещь на этой странице — это разница между v4 и v7 в качестве первичного ключа, и это не дело вкуса. Индексы баз данных представляют собой деревья B-tree, хранящиеся в отсортированном порядке, и то, куда попадёт новый ключ в этом порядке, определяет, сколько усилий потребует вставка. Ключ v4 случаен, поэтому последовательные вставки попадают в несвязанные углы индекса: страницы, которые были заполнены, расщепляются (page split), части дерева, которые база данных хранит в памяти, редко оказываются теми частями, которые понадобятся для следующей вставки, и индекс становится больше и фрагментированнее, чем того заслуживают данные, на которые он указывает. Ключ v7 начинается с текущей миллисекунды, поэтому последовательные вставки попадают рядом друг с другом на правый край дерева, что соответствует паттерну, который создаёт автоинкрементное целое число, и паттерну, под который создавались структуры индексов. В этом и заключается весь компромисс: v7 даёт вам поведение вставки последовательного ключа, сохраняя при этом то свойство, ради которого вы вообще выбрали UUID, а именно то, что любой может создать его, не обращаясь к серверу. Расплатой является то, что время создания теперь можно прочитать внутри идентификатора, и имеет ли это значение — это вопрос о ваших данных, а не о формате.

Ничто и никогда не проверяет UUID на уникальность; его размер и есть гарантия. Нет никакого реестра, никакого обращения к серверу, никакого поиска — генератор просто создаёт число и отдаёт его, а причина, по которой два из них не сталкиваются, заключается просто в том, что существует 2^122 возможных значений v4, то есть около 5,3 ундециллионов. Парадокс дней рождения (birthday problem) — это честный способ оценить это: вам понадобилось бы примерно 2,7 квинтиллиона идентификаторов, прежде чем появился бы шанс пятьдесят на пятьдесят, что любые два из них совпадут, а это миллиард новых UUID каждую секунду в течение 86 лет. Стоит быть точным в том, что это обещает и чего не обещает. Это статистическая гарантия, а не арифметическая, и она действует только до тех пор, пока случайность под ней настоящая — плохо инициализированный генератор или виртуальная машина, клонированная вместе с её пулом энтропии, ломает её так, что формат не может этого обнаружить. Версия 7 ещё больше сужает этот вопрос: в пределах одной миллисекунды один генератор вообще не может повториться, потому что счётчик увеличивается, а не бросает кубики, и между независимыми генераторами всю работу выполняют 62 случайных бита.

UUID — это идентификатор, а не пароль. Версия 4 непредсказуема, и это побуждает людей относиться к ней как к секрету — ссылка для сброса пароля, не поддающийся угадыванию URL, токен сессии, ключ API. Непредсказуемость реальна, но секретность — это свойство того, как с объектом обращаются, а с идентификаторами по определению обращаются небрежно: они находятся в URL-адресах, которые попадают в историю браузера, логи серверов, заголовки referer и аналитику, и их вставляют в сообщения чатов. Другие версии — ещё худшие кандидаты. Версия 1 и версия 7 обе кодируют момент создания, поэтому любой, у кого они есть, примерно знает, когда они были созданы, и может сузить круг всего, что было создано вместе с ними. Версии 3 и 5 детерминированы специально: v5 UUID адреса электронной почты — это не захешированный секрет, это значение, которое любой человек с тем же адресом может вычислить за секунду. Используйте UUID, чтобы дать чему-то имя. Используйте генератор паролей или токен из библиотеки, созданной для секретов, когда значение должно оставаться неизвестным.

Почему стоит выбрать этот генератор UUID?

UUID появляются везде, где чему-то нужно дать имя до того, как что-либо сможет подтвердить, что это имя свободно. Код приложения генерирует их для строк, которые он собирается вставить, чтобы у объекта была идентичность ещё до того, как он попадёт в базу данных, и клиент мог ссылаться на него, пока запись ещё выполняется. Распределённые системы полагаются на них ещё больше: несколько сервисов, пишущих в одну таблицу, офлайн-клиент на мобильном устройстве, создающий записи в самолёте, очередь, которая должна распознать уже обработанное сообщение — ни одна из этих систем не может ждать своей очереди за общим счётчиком. Версия 5 покрывает другую потребность, а именно стабильный идентификатор, полученный из того, что у вас уже есть: тот же самый документ, тот же самый URL или тот же самый аккаунт всегда преобразуется в тот же самый UUID, поэтому импорт может выполняться дважды без дублирования. В других местах они являются просто форматом, который требует система — идентификатор корреляции, проходящий через логи и трассировки, имя файла, которое не вызовет коллизии, когда загрузки от тысячи пользователей попадут в один бакет, ключ реестра Windows, тестовая фикстура, которая должна выглядеть как настоящие данные.

Стоит знать несколько честных ограничений. Одна партия — это одна версия: значение в поле Версия относится ко всему, что в ней находится, поэтому генерация v4 и генерация v7 — это две разные партии. Это генератор, а не инспектор — вставка UUID для того, чтобы прочитать его версию или метку времени, не является тем, что делает эта страница. Сохранить в файл записывает обычный текстовый файл, а не CSV или JSON. Версия 7 открыто раскрывает время своего создания с точностью до миллисекунды, что является реальным компромиссом, а не недостатком, и версия 1 раскрывает время точно так же; если для ваших данных это проблема, то v4 — это та версия, которая никому ничего не рассказывает. Два специальных значения из стандарта не являются версиями и поэтому отсутствуют в качестве опций в поле Версия, но вы можете скопировать их отсюда: nil UUID, 00000000-0000-0000-0000-000000000000, и max UUID, ffffffff-ffff-ffff-ffff-ffffffffffff. Всё на этой странице следует RFC 9562, спецификации, которая заменила RFC 4122 в 2024 году, поэтому вывод принимается любой библиотекой, базой данных или API, которые вообще работают с UUID. В рамках этих ограничений гарантия является строгой: каждый идентификатор создаётся по стандарту, из криптографически надёжной случайности, на вашем собственном компьютере, и никто другой его никогда не видит.

FAQ

Как сгенерировать UUID?

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

В чём разница между UUID v4 и v7?

Версия 4 — это 122 случайных бита без какой-либо структуры вообще, поэтому два таких идентификатора не имеют никакого отношения друг к другу. Версия 7 тратит первые 48 бит на миллисекунду создания, добавляет счётчик и 62 случайных бита, и поэтому её можно сортировать: партия выходит в том порядке, в котором она была создана. Используйте v4, когда идентификатор должен быть только уникальным, и v7, когда он также будет ключом базы данных.

Какую версию UUID мне следует использовать?

Версию 4, если у вас нет причин выбрать другую. Выбирайте версию 7, если идентификатор становится первичным ключом и производительность вставки имеет значение, версию 5, если вам нужно, чтобы одни и те же входные данные всегда давали один и тот же идентификатор, и версию 1 только в том случае, если система, с которой вам нужно взаимодействовать, специально этого требует. Версия 3 — это версия 5 с MD5 вместо SHA-1, и она существует для совместимости.

Действительно ли сгенерированные UUID случайны и безопасны?

Случайность является криптографически надёжной: она исходит от Web Crypto API вашего браузера через crypto.randomUUID() или crypto.getRandomValues(), а не от Math.random(). Безопасный в смысле "невозможно угадать" — это другой вопрос по сравнению с безопасным в смысле "секретный": UUID — это идентификатор, и его не следует использовать в качестве пароля, токена сессии или ключа API.

Могу ли я сгенерировать много UUID одновременно?

Да, до 1000 за один раз. Установите Количество и нажмите Сгенерировать; после пятидесяти значений результат становится единым прокручиваемым блоком, а не длинным списком строк. Скопировать всё и Сохранить в файл забирают всю партию, объединённую так, как указано в опции Формат копирования — по одному на строку, через запятую или в кавычках для вставки в массив.

Почему v3 и v5 каждый раз дают мне один и тот же UUID?

Потому что именно для этого они и предназначены. Версии 3 и 5 детерминированы: они хешируют пространство имён и имя, которые вы им даёте, поэтому одинаковые входные данные всегда производят идентичный идентификатор на любом компьютере и на любом языке. Это делает их полезными для получения стабильного идентификатора из того, что у вас уже есть, и именно поэтому поле Количество скрывается, когда вы их выбираете.

Что такое пространство имён и имя, и какое пространство имён выбрать?

Это два входных параметра, из которых вычисляется UUID версии 3 или 5. Пространство имён указывает, чем является имя — DNS для имён хостов, URL для адресов, OID и X.500 для соответствующих схем каталогов, или Своё пространство имён (UUID), если вы хотите предоставить собственный UUID пространства имён, что является обычным выбором внутри приложения. Имя — это сама строка. Разные пространства имён дают совершенно разные результаты для одного и того же имени, в чём и заключается смысл их наличия.

Почему UUID v7 лучше, чем v4, для первичного ключа базы данных?

Из-за того, куда попадают значения в индексе. Индекс хранится в отсортированном порядке, и случайный ключ v4 попадает в него куда угодно, поэтому вставки расщепляют страницы (page split) по всему дереву, а те части, которые хранятся в памяти, редко оказываются теми, которые понадобятся следующими. Ключ v7 начинается с текущей миллисекунды, поэтому последовательные вставки попадают вместе в конец индекса, именно так ведёт себя последовательный целочисленный ключ — при этом позволяя любому сервису создавать идентификатор, не обращаясь к центральному счётчику.

Могут ли два UUID когда-либо оказаться одинаковыми?

В принципе да, на практике нет, и стоит знать, почему именно. Ничто не проверяет уникальность: существует просто 2^122 возможных значений версии 4, что составляет около 5,3 ундециллионов, и вам понадобилось бы примерно 2,7 квинтиллиона таких идентификаторов — миллиард каждую секунду в течение 86 лет — прежде чем появился бы шанс пятьдесят на пятьдесят для единственной коллизии. Гарантия является статистической, а не абсолютной, и она зависит от того, является ли случайность настоящей, что и служит причиной того, почему этот генератор использует Web Crypto API, а не обычную псевдослучайную функцию.

Могу ли я использовать UUID как пароль, ключ API или токен сессии?

Нет, и это ошибка, которая обходится дороже всего. UUID версии 4 непредсказуем, но с идентификаторами обращаются так, как если бы они были публичными: они попадают в URL-адреса, историю браузера, логи серверов, заголовки referer и аналитику. Версии 1 и 7 дополнительно раскрывают время своего создания, а версии 3 и 5 может заново вычислить любой, кто знает входные данные. Для всего, что должно оставаться в секрете, используйте генератор паролей или токен из библиотеки, предназначенной для секретов.

Раскрывает ли UUID v7 время своего создания?

Да, с точностью до миллисекунды, и это сделано специально, а не по недосмотру — именно метка времени делает v7 пригодным для сортировки. Строка под результатом показывает вам время, закодированное в первом значении партии, чтобы вы могли точно видеть, что именно раскрывается. Версия 1 также содержит метку времени. Если время создания — это то, что вы предпочли бы не публиковать, версия 4 вообще не содержит никакого времени.

Раскрывает ли UUID v1 мой MAC-адрес?

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

Что меняют Заглавные буквы, Без дефисов, Фигурные скобки и urn:uuid:?

Только внешний вид — 128 бит под ними идентичны в любой форме. Заглавные буквы выводит шестнадцатеричные цифры в верхнем регистре, Без дефисов даёт компактную версию из 32 символов, Фигурные скобки оборачивает значение в { } так, как Windows и .NET записывают GUID, а urn:uuid: добавляет префикс, который превращает его в формальный URN. urn:uuid: отключает две другие опции, пока он включён, поскольку стандарт определяет ровно одну форму URN, и это каноническая форма с дефисами.