UUID — всемирно уникальный идентификатор

Оглавление

UUID — всемирно уникальный идентификатор

Что такое UUID?

UUID (universally unique identifier, всемирно уникальный идентификатор) — это стандарт идентификации, используемый в разработке программного обеспечения для создания уникальных и неизменяемых значений. Он был разработан Open Software Foundation (OSF) как часть среды распределенных вычислений DCE.

Основная цель UUID — предоставить распределенным системам возможность уникальной идентификации информации без необходимости в централизованном органе управления. Это означает, что любой может создать UUID и использовать его для идентификации чего-либо с высокой степенью уверенности в том, что этот идентификатор не будет случайно использован для чего-то еще.

Наиболее распространенным использованием стандарта UUID является Globally Unique Identifier (GUID), используемый компанией Microsoft. Другими крупными пользователями являются Linux (файловая система ext2/ext3, зашифрованные разделы LUKS, рабочие среды GNOME и KDE) и Mac OS X. Все они используют реализацию, полученную из библиотеки uuid из пакета e2fsprogs.

Формат

UUID состоит из 32 шестнадцатеричных символов, разделенных дефисами на пять групп в формате 8-4-4-4-12. Такое представление занимает 36 символов: UUID — всемирно уникальный идентификатор

4 бита M обозначают версию («version») UUID, а 1-3 старших бита N обозначают вариант («variant») UUID.

Такое разделение на группы основано на структуре UUID: UUID — всемирно уникальный идентификатор

Варианты генерации

Существует два варианта генерации UUID:

  • Вариант 1: Генерируется случайным образом и использует версию 4.
  • Вариант 2: Использует временную метку и MAC-адрес узла (версии 1 и 2) либо хэширование пространства имен и имени (версии 3 и 5).

Версии

  • Версия 1: Генерируется на основе времени и MAC-адреса узла.
  • Версия 2: Генерируется на основе времени, MAC-адреса узла и домена (DCE, идентификаторы пользователя или группы).
  • Версия 3: Генерируется путем хэширования пространства имен и имени (MD5).
  • Версия 4: Генерируется случайным образом.
  • Версия 5: Генерируется путем хэширования пространства имен и имени (SHA-1).

Стандарты

RFC 4122 — это стандарт, который определяет формат и использование UUID. Он описывает структуру, синтаксис и семантику UUID. RFC 4122 также определяет различные версии и варианты UUID.

UUID — всемирно уникальный идентификатор

Валидация

Регулярные выражения не являются надежным методом проверки UUID, потому что они могут пропустить недействительные UUID и принять действительные UUID за недействительные. Например, следующее регулярное выражение проверяет только формат UUID, но не проверяет версию или вариант:

^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$

Это регулярное выражение примет недействительный UUID, такой как 12345678-90ab-cdef-1234-56789abc, который имеет правильный формат, но неправильную версию и вариант.

/\A\h{8}-\h{4}-\h{4}-[89AB]\h{3}-\h{12}\z/i  

Это регулярное выражение проверяет вариант UUID (первый символ четвертой группы должен быть 8, 9, A или B), но не проверяет версию: третья группа может содержать что угодно.

Если вам нужно проверить UUID на соответствие любой версии, можно использовать следующее более общее регулярное выражение:

/\A\h{8}-\h{4}-\h{4}-\h{4}-\h{12}\z/i

Рекомендуется использовать библиотеки или инструменты, специально разработанные для работы с UUID, а не полагаться исключительно на регулярные выражения.

Интересные факты

  1. UUID имеет вероятность коллизии 1 из 2^122 (приблизительно 5,3 × 10^36);
  2. UUID можно использовать для отслеживания изменений данных и обеспечения целостности;
  3. GUID является синонимом UUID;
  4. Использование MAC-адреса означает, что всегда можно отследить компьютер, который создал UUID. Иногда возможно найти компьютер, на котором был создан или отредактирован какой-либо документ, если используемый текстовый процессор встроил UUID в файл. Эта дыра в конфиденциальности использовалась для поиска автора вируса Melissa .
Обсудить статью, задать вопрос или предложить тему — напишите мне в Telegram