
Что такое 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 и 5).
Версии
- Версия 1: Генерируется на основе времени и MAC-адреса узла.
- Версия 2: Генерируется на основе времени, MAC-адреса узла и домена (DCE, идентификаторы пользователя или группы).
- Версия 3: Генерируется путем хэширования пространства имен и имени (MD5).
- Версия 4: Генерируется случайным образом.
- Версия 5: Генерируется путем хэширования пространства имен и имени (SHA-1).
Стандарты
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 (первый символ четвертой группы должен быть 8, 9, A или B), но не проверяет версию: третья группа может содержать что угодно.
Если вам нужно проверить UUID на соответствие любой версии, можно использовать следующее более общее регулярное выражение:
/\A\h{8}-\h{4}-\h{4}-\h{4}-\h{12}\z/i
Рекомендуется использовать библиотеки или инструменты, специально разработанные для работы с UUID, а не полагаться исключительно на регулярные выражения.
Интересные факты
- UUID имеет вероятность коллизии 1 из 2^122 (приблизительно 5,3 × 10^36);
- UUID можно использовать для отслеживания изменений данных и обеспечения целостности;
- GUID является синонимом UUID;
- Использование MAC-адреса означает, что всегда можно отследить компьютер, который создал UUID. Иногда возможно найти компьютер, на котором был создан или отредактирован какой-либо документ, если используемый текстовый процессор встроил UUID в файл. Эта дыра в конфиденциальности использовалась для поиска автора вируса Melissa .