tooly

Генератор UUID

Создавайте универсальные уникальные идентификаторы: случайные UUID v4 или упорядоченные по времени UUID v7 (RFC 9562), которые сортируются по дате создания — идеально для ключей в БД. Генерация локальная, на криптографической случайности браузера.

Всё работает в браузере — данные никуда не отправляются

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

  1. 1

    Выберите v4 или v7 и количество.

  2. 2

    Нажмите «Сгенерировать» для новой партии.

  3. 3

    Скопируйте список.

Где используются UUID

UUID (universally unique identifier, в Windows его называют GUID) — это 128-битное значение, которое записывается как 32 шестнадцатеричные цифры в пяти группах: 8-4-4-4-12, например 3f1c2b7e-9a4d-4c1e-8b2f-6d0e5a7c9b13. Смысл в том, что любая система может создать его самостоятельно, не обращаясь к центральному счётчику, и при этом быть уверенной, что он никогда не совпадёт с идентификатором, созданным где-то ещё.

Это свойство полезно во многих местах:

  • Первичные ключи в базах данных, особенно когда записи создаются на нескольких серверах или офлайн на клиентских устройствах и синхронизируются позже.
  • Идентификаторы запросов и корреляции, которые сопровождают одну операцию через логи множества сервисов.
  • Имена загружаемых файлов, чтобы два пользователя, загружающие photo.jpg, никогда не перезаписали друг друга.
  • Ключи идемпотентности для API платежей и заказов.
  • Тестовые фикстуры и начальные данные, которым нужны реалистичные идентификаторы.

Версия 4 и версия 7

Инструмент предлагает две версии, которые важны для новых проектов сегодня. У обеих одинаковые формат и длина; разница — в том, что содержат биты.

UUID v4 (случайный)

Кроме 6 фиксированных бит, обозначающих версию и вариант, все 122 бита случайны. v4 можно узнать по 4 в начале третьей группы. Они берутся из браузерного crypto.randomUUID(), который опирается на криптографически стойкий источник случайности операционной системы.

Используйте v4, когда идентификатор не должен ничего выдавать: токены приглашений в URL, публичные идентификаторы ресурсов, всё, где знание одного ID не должно помогать угадать другой или узнать, когда он был создан.

UUID v7 (упорядочен по времени)

v7, стандартизированный в RFC 9562 в 2024 году, ставит в начало 48-битную метку Unix-времени в миллисекундах, а оставшиеся 74 бита заполняет случайными данными. Третья группа начинается с 7. Поскольку метка времени идёт первой, значения v7 сортируются в порядке создания как обычные строки или байты.

Для баз данных это важно. Индексы B-tree хранят ключи по порядку, а случайные ключи v4 попадают на случайные страницы, вызывая расщепление страниц и плохое использование кэша, когда таблицы дорастают до миллионов строк. Упорядоченные по времени ключи добавляются ближе к концу индекса — почти как автоинкрементное целое, — сохраняя при этом свойство «генерируй где угодно». Для новых таблиц в PostgreSQL, MySQL или SQL Server v7 обычно лучший первичный ключ.

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

Насколько маловероятен дубликат

Со 122 случайными битами существует около 5,3 × 10^36 возможных значений v4. По парадоксу дней рождения, чтобы шанс хотя бы одного совпадения достиг 50%, их нужно сгенерировать около 2,7 × 10^18. При миллиарде в секунду на это уйдёт больше 80 лет.

У v7 случайная часть — 74 бита, но уникальной она должна быть только среди идентификаторов, созданных в ту же миллисекунду. Даже при миллионе ID за миллисекунду шанс совпадения остаётся ничтожным.

На практике дубликаты возникают из-за ошибок, а не математики: пример ID, захардкоженный и скопированный в продакшен, генератор с фиксированным seed или некриптографический генератор, клонированная виртуальная машина, повторяющая состояние. Генерация в браузере на защищённой системной случайности исключает два последних варианта.

Детали формата и хранение

  • Регистр. RFC 9562 предписывает записывать UUID строчными буквами и сравнивать без учёта регистра. Опция Верхний регистр нужна для систем и документации, использующих стиль GUID из Windows.
  • Фигурные скобки и дефисы. Некоторые инструменты Microsoft показывают GUID в {фигурных скобках}. Убирайте их или дефисы, только если целевая система ожидает такую форму.
  • Хранение. Храните UUID в нативном типе (uuid в PostgreSQL, BINARY(16) в MySQL), а не в CHAR(36). Двоичная форма занимает 16 байт вместо 36 и сравнивается быстрее.
  • Размер пачки. До 500 штук за раз, по одному на строку, — готово для вставки в SQL-скрипт или таблицу. Кнопка Сгенерировать заменяет весь список.

UUID — это идентификаторы, а не секреты. v4 трудно угадать, но если он даёт доступ к чему-то, считайте это удобной ссылкой, а не аутентификацией. Для учётных данных используйте «Генератор паролей». Чтобы узнать время создания v7, возьмите первые 12 шестнадцатеричных цифр, переведите их в десятичное число и вставьте в «Конвертер Unix timestamp».

Вопросы и ответы

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

v4 полностью случайный. v7 начинается с миллисекундной метки времени, поэтому ID сортируются хронологически и лучше индексируются в базах данных.

Эти UUID действительно уникальны?

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

Они генерируются на сервере?

Нет. Источник — crypto.getRandomValues в браузере, ничего не передаётся.

Можно сгенерировать много сразу?

До 500 за клик.

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