Перейти к основному содержимому

Создание детерминированных UUID v5

UUID версии 5 вычисляется из UUID пространства имён и имени с помощью SHA-1. Любой, кто хеширует то же пространство имён и то же имя, получит точно такой же UUID, поэтому идентификаторы можно пересчитывать, а не хранить.

Разобранный пример

Пространство имен (UUID)
DNS (6ba7b810-9dad-11d1-80b4-00c04fd430c8)
Имя
example.com
Результат
cfbff0d1-9375-5685-968c-48ce8b15ae17
Пространство имен (UUID)
DNS (6ba7b810-9dad-11d1-80b4-00c04fd430c8)
Имя
Example.com
Результат
a1feb884-07f5-5a14-8edb-cb659a7fbadc

Как это работает

  • 16 байтов пространства имён объединяются с байтами имени в UTF-8 и хешируются SHA-1. Первые 16 байтов хеша становятся UUID после установки битов версии (5) и варианта.
  • RFC 9562 заранее определяет пространства имён для имён DNS, URL, ISO OID и отличительных имён X.500. Любой собственный UUID тоже может служить частным пространством имён.
  • Имена сравниваются побайтно: регистр букв, пробелы и завершающие косые черты меняют результат, поэтому сначала нормализуйте имена. Результат предсказуем, поэтому никогда не используйте UUID v5 как секрет.
Версия UUID

Генерируйте от 1 до 100 UUID одновременно

Пространство имен DNS: 6ba7b810-9dad-11d1-80b4-00c04fd430c8 (по умолчанию)

Имя для хеширования (например, доменное имя, электронная почта и т.д.)

О UUID

UUID v1: UUID на основе времени, которые включают временную метку и MAC-адрес компьютера, генерирующего UUID. Полезно, когда вам нужно знать, когда был создан UUID.

UUID v4: Случайно сгенерированные UUID. Это наиболее часто используемая версия, которая обеспечивает хорошую уникальность при минимальной утечке информации.

UUID v5: UUID на основе имени с использованием хеширования SHA-1. При одинаковом пространстве имен и имени вы всегда получите один и тот же UUID. Полезно для детерминированной генерации UUID.

Другие руководства по UUID