fixmint
RU

UUID v4 или v7: какой выбрать и почему это важно

Автор: · · обновлено 8 ноября 2026 г. · Чтение: 5 мин

Используйте UUID v4, когда нужен случайный идентификатор и ничего больше. Используйте UUID v7, когда идентификатор будет ключом в базе данных или когда нужно, чтобы ID сортировались по времени создания. Оба варианта состоят из 128 бит и записываются одинаковой 36-символьной строкой, так что разница в том, как расположены эти биты. Генератор UUID ниже создаёт любую из версий, от одного до 500 значений за раз, прямо в браузере.

Генератор UUIDНужны уникальные ID для кодаСделать бесплатно

Как выглядит UUID

UUID, или универсальный уникальный идентификатор, — это 128-битное число, записанное 32 шестнадцатеричными цифрами в пяти группах: 8, 4, 4, 4 и 12 цифр, разделённых дефисами. Пример: 3f2b8c1e-6d4a-4f7b-9c2e-8a1d5e0b7f63.

Две части числа фиксированы. Четыре бита отвечают за версию, поэтому третья группа начинается с 4 для v4 или с 7 для v7. Два бита задают вариант, поэтому четвёртая группа начинается с 8, 9, a или b. Остальное — собственно идентификатор. Именно из-за битов версии и варианта в UUID v4 122 случайных бита, а не 128.

UUID v4: случайный

UUID v4 случаен, если не считать эти фиксированные биты. Его 122 случайных бита делают повтор крайне маловероятным. Допустим, вы создали миллиард UUID v4. Вероятность того, что какие-то два совпадут, примерно равна n в квадрате, делённому на удвоенное число возможных значений, и составляет около 10 в степени минус 19. Иначе говоря, коллизии не нужно закладывать в архитектуру.

Эта оценка верна, если генератор берёт биты из криптографически стойкого источника случайности. Предсказуемый генератор её бы обесценил. Этот инструмент использует криптографически стойкий источник случайных чисел браузера, через crypto.randomUUID или crypto.getRandomValues.

UUID v7: сначала время

Версию v7 описывает RFC 9562. Её первые 48 бит хранят время Unix в миллисекундах, поэтому идентификатор, созданный позже, имеет большую первую часть, чем созданный раньше. Затем идут биты версии, случайные биты, биты варианта и ещё случайные биты. Часть случайного пространства может содержать счётчик, который сохраняет порядок, если за одну миллисекунду создано несколько идентификаторов.

Поскольку время стоит в начале, сортировка ID v7 как текста в одном и том же регистре даёт порядок по времени создания с точностью до миллисекунды. Это работает, потому что шестнадцатеричные цифры имеют фиксированную ширину, а время записано в первых символах.

Время при этом видно. Тот, кто читает UUID v7, может примерно узнать, когда он был создан. Проверить это можно самостоятельно в поле «Проверка» в генераторе UUID: оно переводит первые 48 бит обратно в дату и время.

Почему v7 подходит для индексов базы данных

Индекс в базе данных обычно устроен как B-дерево, структура, которая хранит ключи в отсортированном виде. Когда ключ случайный, как у v4, каждая новая строка попадает в случайное место индекса. База вынуждена писать в разные участки индекса, что вызывает больше разбиений страниц и промахов кэша. На больших таблицах эта работа накапливается.

Ключ v7 больше почти всех ключей, уже находящихся в индексе, потому что его временная часть растёт. Новые строки добавляются ближе к концу индекса, примерно так же, как при автоинкрементном числе. Последние страницы индекса остаются в памяти, а запись выполняется аккуратнее. Разница заметнее всего в больших таблицах, которые постоянно растут, и почти незаметна в маленькой.

Что выбрать: v4 или v7

  • Первичные ключи в базе данных или любая таблица, которая растёт со временем: v7. Индекс остаётся упорядоченным.
  • Логи, события или сообщения, которые вы часто сортируете по времени: v7, потому что порядок заложен в самом ID.
  • Публичные ID, где время создания должно оставаться скрытым: v4. По ID v7 видно, когда он был создан.
  • Много устройств с ненадёжными часами: и v4, и v7 остаются уникальными, потому что уникальность обеспечивают случайные биты. Только порядок сортировки v7 зависит от точности часов.

Обе версии стандартны, но старые библиотеки могут знать только v4. Стандарт RFC 4122 много лет описывал версии с 1 по 5. RFC 9562 опубликован в мае 2024 года, заменяет RFC 4122 и описывает версии 6, 7 и 8. Перед тем как полагаться на библиотеку, проверьте, поддерживает ли она v7.

Хранение UUID

UUID в виде текста занимает 36 символов. Его 16 байт можно хранить в двоичном виде, а это гораздо компактнее. Во многих базах данных для этого есть встроенный тип UUID или двоичный столбец из 16 байт, и сравниваются такие значения быстрее, чем текст.

Выберите один формат и придерживайтесь его. Заглавные и строчные буквы, дефисы и фигурные скобки для человека означают один и тот же UUID, но база данных или строковое сравнение может счесть их разными значениями. Опции генератора «заглавные», «без дефисов» и «фигурные скобки» нужны для систем, которым требуются именно такие формы.

Никогда не используйте UUID как секрет

UUID — это идентификатор, а не пароль, не токен сессии и не ключ доступа. Его задача — быть уникальным, а не непредсказуемым. Кроме того, UUID v7 содержит время создания. А идентификаторы постоянно вставляют в ссылки, логи, письма и скриншоты, где любой, кто их увидит, может их повторно использовать.

Контроль доступа должен быть на сервере. Тот, кто знает ID, не должен автоматически получать право читать или менять запись, которую этот ID называет. Для паролей, парольных фраз и токенов используйте генератор, созданный для секретов. Генератор паролей создаёт случайные пароли и парольные фразы из слов прямо на вашем устройстве, используя криптографически стойкую случайность, и оценивает их надёжность. Чтобы разобраться, почему важны длина и случайность, прочитайте про надёжные пароли и энтропию.

Как пользоваться инструментом

  1. Выберите версию 4 для случайных ID или версию 7 для ID, которые сортируются по времени.
  2. Укажите количество: от 1 до 500 за раз.
  3. Отметьте «заглавные» или «без дефисов и скобок», если вашему коду нужен определённый формат.
  4. Скопируйте все значения или скачайте список как файл .txt.
  5. Вставьте любой UUID в поле «Проверка», чтобы увидеть его версию, вариант и, для v7, встроенное время.

Быстрые ответы

Уникален ли UUID v4? На практике да. Его 122 случайных бита делают повтор настолько маловероятным, что проверять его не нужно.

Стоит ли использовать v7 везде? Не всегда. Берите v7 для ключей в базе данных и всего, что сортируется по времени. Берите v4, когда время создания должно оставаться скрытым.

Можно ли использовать UUID как пароль? Нет. Это идентификатор. Для всего, что должно оставаться в секрете, используйте генератор паролей.

Отправляет ли инструмент ID куда-нибудь? Нет. ID создаются и показываются в вашем браузере и на сервер не отправляются.

Переведено с помощью ИИ с Английский оригинал.

Комментарии

    Комментариев пока нет. Будьте первым.

    Ваша оценка (необязательно)

    Ваша почта никогда не показывается и не сохраняется.

    Обложка книги «Open Data for AGI - Why Public, Free, and Open Datasets Matter»Open Data for AGI - Why Public, Free, and Open Datasets Matter

    Почему публичные, бесплатные и открытые наборы данных будут определять путь к общему искусственному интеллекту так же сильно, как алгоритмы и вычислительные мощности.

    $4.99Купить на GumroadНа английском