Что такое 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 символов:
4 бита M обозначают версию («version») UUID, а 1-3 старших бита N обозначают вариант («variant») 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, но не проверяет версию или вариант:
^[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, а не полагаться исключительно на регулярные выражения.
Интересные факты
- UUID имеет вероятность коллизии 1 из 2^122 (приблизительно 5,3 x 10^36);
- UUID можно использовать для отслеживания изменений данных и обеспечения целостности;
- GUID является синонимом UUID;
- Использование MAC-адреса означает, что всегда можно отследить компьютер, который создал UUID. Иногда возможно найти компьютер, на котором был создан или отредактирован какой-либо документ, если используемый текстовый процессор встроил UUID в файл. Эта дыра в конфиденциальности использовалась для поиска автора вируса Melissa.