Что такое UUID? Полное объяснение универсально уникальных идентификаторов
Быстрый ответ
UUID — 128-bit идентификатор, представленный как 36 символов (32 hex-цифры плюс 4 дефиса). UUID практически уникальны без координации —вероятность коллизии незначительна. UUID v4 (random) — наиболее распространённая версия. Используйте наш бесплатный UUID Generator.
Введение
UUID (Universally Unique Identifier), также GUID (Globally Unique Identifier) в терминологии Microsoft, — 128-bit идентификатор, практически гарантированно уникальный без центральной координации. UUID определены RFC 4122 и широко используются как primary key баз данных, request ID, session token и идентификаторы распределённых систем. Наиболее распространённая версия — UUID v4 со случайными битами.
Шаг за шагом
-
Понять структуру UUID
UUID — это 128 бит, отображаемых в виде 32 шестнадцатеричных цифр в 5 группах: 8-4-4-4-12, разделенных дефисами (например, 550e8400-e29b-41d4-a716-446655440000). 13-я цифра указывает версию (4 для v4), а 17-я цифра указывает вариант.
-
Изучите версии UUID
v1: на основе времени (метка времени + MAC-адрес) — упорядочено по времени, но теряет идентичность. v3: на основе имени с хешированием MD5. v4: случайный — наиболее распространенный, без проблем с конфиденциальностью. v5: на основе имени с хешированием SHA-1. v6 и v7: упорядочены по времени с улучшенной конфиденциальностью по сравнению с v1.
-
Понять вероятность столкновения
UUID v4 имеет 2^122 возможных значения. Вероятность коллизии среди 103 триллионов UUID составляет 50%. Для практического использования (миллионы идентификаторов) вероятность коллизии фактически равна нулю — вы можете генерировать UUID самостоятельно, без координации.
-
Используйте UUID правильно
Используйте версию 4 практически для всех случаев использования (идентификаторы баз данных, идентификаторы запросов, токены сеансов). Используйте версию 7, если вам нужны упорядоченные по времени идентификаторы для локальности базы данных. Избегайте v1 в контекстах, чувствительных к безопасности — он включает метку времени и MAC-адрес.
Примеры
UUID v4 (случайно)
Вход: Создано с помощью crypto.getRandomValues
Выход: 550e8400-e29b-41d4-a716-446655440000
UUID v1 (по времени)
Вход: Временная метка + MAC-адрес
Выход: a3bbf0ee-d6e4-11ed-a5b3-3c9703e8b4a1
Ноль UUID
Вход: All zeros
Выход: 00000000-0000-0000-0000-000000000000
Распространенные проблемы
- Использование Math.random() для UUID — это не криптографически безопасно. Используйте crypto.getRandomValues() или crypto.randomUUID() в браузерах.
- Хранение UUID в виде строк: длина строки UUID составляет 36 байт; храниться как тип UUID (16 байт), это более эффективно. Используйте собственный тип UUID в базах данных, если он доступен.
- Использование версии 1 в контекстах, чувствительных к безопасности: версия 1 включает метку времени и MAC-адрес, из-за чего может произойти утечка информации о том, когда и где она была создана. Используйте v4 для анонимности.
- Предполагая, что UUID действительно уникальны — они практически уникальны (вероятность столкновения незначительна), но их уникальность не гарантируется математически.
Советы
- Используйте UUID v4 почти для всех случаев использования — он случайный, не имеет проблем с конфиденциальностью и поддерживается всеми современными базами данных.
- Используйте crypto.randomUUID() в современных браузерах для встроенного генератора v4 без библиотеки.
- Храните UUID как тип UUID/GUID в базах данных (16 байт) вместо строк (36 байт) для повышения производительности хранения и индексирования.
- Используйте наш генератор UUID для мгновенного создания UUID в вашем браузере — без регистрации, полностью конфиденциально.