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.

Версии

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

Стандарты

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 версии 1 с нечетными девятыми октетами и шестым октетом, не равным 4 или 5. Это связано с тем, что регулярное выражение проверяет, является ли девятый октет одним из 89AB, а в данном UUID девятый октет равен 2.

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

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

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

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

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