Генератор UUID (v4 случайный, v7 упорядоченный по времени)
Нажмите для генерации одного или нескольких UUID. v4 — полностью случайные идентификаторы, v7 — сортируемые по времени создания, удобные для первичных ключей в базах данных.
Как это работает
Когда использовать v4, а когда v7
UUID v4 — полностью случайный: 122 случайных бита плюс биты версии/варианта, что даёт около 5,3 × 10³⁶ возможных значений. Коллизия двух UUID v4 практически невозможна. Используйте v4 везде, где не нужна сортировка: идентификаторы API-запросов, анонимные идентификаторы пользователей.
UUID v7 (RFC 9562, опубликован в 2024 году) начинается с 48-битной метки Unix-времени в миллисекундах, за которой следуют 74 случайных бита. Они лексикографически сортируются в порядке создания, что критически важно для производительности БД — первичные ключи, упорядоченные по времени, всегда вставляются в конец B-дерева без случайного разбиения страниц. Используйте v7 для первичных ключей в новых таблицах.
Как работает этот генератор
Оба варианта — v4 и v7 — используют crypto.getRandomValues, безопасный источник случайности браузера, тот же примитив, что используют HTTPS и менеджеры паролей. v4 заполняет 122 бита случайными значениями. v7 делит 48 бит метки времени + 74 случайных бита плюс маркеры версии/варианта согласно RFC.
Генерация происходит в браузере. UUID не сохраняются и не передаются. При генерации 100 UUID v4 вероятность коллизии между ними ничтожно мала — значительно ниже вероятности того, что космические лучи изменят бит в вашем процессоре.
Типичные проблемы с UUID
UUID v4 в качестве первичных ключей снижают производительность по сравнению с автоинкрементными числами, потому что случайные значения вызывают разбиение страниц B-дерева при вставке. UUID v7 решает эту проблему — используйте v7, если хотите преимущества UUID без потерь производительности индекса.
Не раскрывайте UUID пользователям там, где угадываемость важна. UUID v4 имеют 122 бита энтропии и непредсказуемы. UUID v7 раскрывают время создания, что нормально для большинства задач, но плохо, если время создания является конфиденциальным.
UUID состоят из 36 символов с дефисами (32 шестнадцатеричных + 4 дефиса). Занимают 16 байт в бинарном виде или 36 байт в текстовом. Для столбцов с высокой кардинальностью рассмотрите хранение в виде бинарного BLOB / нативного типа UUID вместо VARCHAR(36).
Частые вопросы
›Криптографически ли надёжны эти UUID?
Да. Оба — v4 и v7 — используют crypto.getRandomValues, безопасный API случайных чисел. v4 имеет 122 бита энтропии, v7 — 74.
›Почему v7 лучше для ключей базы данных?
Потому что UUID v7 сортируются по времени создания, поэтому вставки всегда попадают в конец индекса B-дерева, а не в случайные позиции. Это исключает разбиение страниц и значительно улучшает производительность записи.
›Могут ли два UUID совпасть?
Теоретически да. Для v4 потребовалось бы сгенерировать ~10¹⁸ UUID прежде, чем 50% вероятность коллизии. У v7 временной компонент снижает это до ~2⁷⁴ в пределах одной миллисекунды — всё равно практически невозможно.
›UUID и GUID — это одно и то же?
Да. GUID — название Microsoft для UUID. Тот же формат, те же гарантии уникальности.
›Какой формат у UUID?
8-4-4-4-12 шестнадцатеричных цифр с дефисами. Всего 32 hex-символа + 4 дефиса = 36 символов. Нижний регистр по соглашению RFC.
›Стоит ли использовать v1 вместо v7?
v1 включает MAC-адрес устройства, что является утечкой приватности. v7 пришёл на смену v1 для упорядоченных по времени ID без раскрытия аппаратных идентификаторов.
›Можно ли сгенерировать v4 в URL-safe Base64?
Не напрямую здесь. Закодируйте 16 байт UUID как URL-safe Base64 для получения 22-символьного идентификатора. Полезно для создания коротких URL.
›Данные покидают браузер?
Нет. Генерация происходит полностью в вашем браузере.
Похожие инструменты
Обновлено: