Что такое UUID?
UUID (универсально-уникальный идентификатор) — это 128-битное значение, представленное в виде 36-символьной строки, например 550e8400-e29b-41d4-a716-446655440000. Формат и семантика версий определены RFC 4122 для v1 — v5 и RFC 9562 для более новых v6, v7 и v8. Этот инструмент генерирует v4 (полностью случайный), v1 (временная метка плюс случайный node ID) и v7 (префикс из Unix-миллисекундной метки плюс случайный суффикс, сортируемый по времени генерации) — всё в вашем браузере, через Web Crypto API платформы. Никакие данные не отправляются на сервер.
Как работает генерация UUID?
Каждая версия по-разному балансирует детерминизм, сортируемость и энтропию. Инструмент выбирает нужный алгоритм по вашему выбору:
- v4 (случайный) вызывает браузерный
crypto.randomUUID(), который возвращает 122 бита криптографической случайности, при этом 6 фиксированных битов (версия0100и вариант10) размещены в нужных позициях. Коллизии астрономически маловероятны — чтобы с вероятностью 50 % получить один дубликат, нужно сгенерировать примерно 2,71 квинтиллиона v4 UUID. - v1 (метка времени + узел) упаковывает 60-битную григорианскую метку времени (100-наносекундные тики с 15.10.1582) в
time_low/time_mid/time_hi_and_version, задаёт ниббл версии0001, выбирает 14-битную последовательность часов с установленными битами варианта и использует случайный 48-битный node ID с принудительно установленным multicast-битом (RFC 4122 §4.5 явно разрешает случайный node ID при отсутствии аппаратного MAC — multicast-бит помечает его как не-MAC). - v7 (сортируемая метка времени), согласно RFC 9562 §5.7, размещает 48-битную big-endian Unix-миллисекундную метку, затем 4-битную версию
0111, затем 12 случайных битов, затем 2-битный вариант10и ещё 62 случайных бита. Поскольку метка времени находится в старших битах, UUID v7 сортируются лексикографически в порядке генерации — свойство, которого ни одна другая версия UUID не даёт без дополнительной кодировки. - Вся случайность поступает из
crypto.getRandomValues()— криптографически стойкого RNG браузера. И v1, и v7 включают защиту монотонности внутри одного тика, чтобы два последовательных вызова в пределах одного тика часов всё равно сортировали второй выше первого — критично для пакетных генераций, обгоняющих миллисекундные часы. - Конвейер форматирования срабатывает после генерации. Можно убрать дефисы, перейти в верхний регистр, обернуть значение в фигурные скобки (
{…}— соглашение GUID Microsoft) или вывести сырые 16 байт в base64 (22 символа, без padding). Режим base64 переопределяет остальные опции, поскольку base64 — самостоятельное представление.
Зачем использовать этот UUID-генератор?
- Ничего не покидает ваш браузер. Web Crypto API работает локально; страница не делает ни одного сетевого запроса после первоначальной загрузки документа. Откройте DevTools, нажмите «Сгенерировать», и панель Network останется пустой.
- Вывод, соответствующий RFC. v4 следует RFC 4122 §4.4, v1 — §4.2 и §4.5, v7 — RFC 9562 §5.7. Ниббл версии и биты варианта расположены так, как требует стандарт — каждый UUID проходит каноническое регулярное выражение своей версии.
- Сортируемый v7 для ключей БД. UUID v7, используемый как кластерный первичный ключ в Postgres, MySQL или SQL Server, оставляет вставки append-only по индексу — без расщеплений страниц, без случайного I/O — и при этом остаётся глобально уникальным. v4 так не умеет, потому что его биты случайны.
- Пакетная генерация без ограничений скорости. Генерируйте 1, 10, 100 или 1 000 UUID за раз. Нет квот и регистрации — инструмент работает в вашей вкладке, поэтому потолок — ваш CPU, а не API-тариф вендора.
Каковы распространённые применения UUID?
UUID появляются там, где системе нужен глобально уникальный идентификатор без координации с центральным сервисом:
- Первичные ключи БД. Автоинкрементные целые числа утечкой выдают количество строк и ломают шардирование. UUID стабильны между шардами, безопасны для слияния между регионами и (в случае v7) держат вставки в B-tree в горячей зоне без расщеплений страниц. Типичное приложение генерирует UUID на клиенте, передаёт его в INSERT и никогда не делает round-trip на сервер ради ключа.
- ID корреляции запросов. HTTP-middleware прикрепляет к каждому входящему запросу v4 UUID, логирует его в каждом span и пробрасывает дальше (часто как заголовок
X-Request-Id). Когда клиент сообщает о баге, инженер поддержки вставляет ID — и весь трейс запроса всплывает целиком, по сервисам и часовым поясам, без двусмысленностей. - Ключи идемпотентности. Платёжные API (Stripe, Adyen, Square) принимают заголовок
Idempotency-Key, чтобы повторённый запрос никогда не списал с клиента дважды. UUID, сгенерированный на клиенте, гарантирует уникальность ключа для каждой логической операции — именно этого требует контракт этих API.
Как выглядит пример UUID?
В Node.js или современном браузере однострочник crypto.randomUUID() возвращает свежий v4 UUID — например, 3f50b5a8-2c54-4b9c-9c1f-3e5c7e2b8d12. Используйте его как идентификатор запроса или ключ идемпотентности. Когда UUID идёт в колонку БД, которая будет кластерным первичным ключом, генерируйте v7: два значения v7, созданные с разницей в одну миллисекунду, например 0190a3b0-7d4f-7c9e-8b21-a4d6f0bd9c11 и 0190a3b0-7d50-7f15-9c4e-72b3e0c1d8a4, сортируются лексикографически в порядке генерации. Тип uuid в Postgres хранит обе версии одинаково — разница проявляется при записи индекса: v7 дописывается в правый край B-tree, а v4 разбрасывает вставки и вынуждает случайное I/O.
Этот генератор UUID делает одну вещь: превращает клик в один или много RFC-совместимых идентификаторов, отформатированных так, как вам нужно, не отправляя ваш запрос на сервер. Выберите версию, выберите количество, выберите формат — сгенерируйте, скопируйте, идите дальше.