UUID (Universally Unique Identifier) — это стандартизированный 128-битный идентификатор, который с ничтожной вероятностью совпадёт с другим, сгенерированным в любой точке мира в любое время. Если вам нужно прямо сейчас создать такой идентификатор, воспользуйтесь инструментом uuid generator — он работает прямо в браузере без регистрации и установки.

Как выглядит UUID и из чего состоит
Стандартный UUID записывается в виде 32 шестнадцатеричных символов, разбитых дефисами на пять групп: 550e8400-e29b-41d4-a716-446655440000. Длина каждой группы фиксирована: 8-4-4-4-12 символов. Формат закреплён в стандарте RFC 4122.
Внутри этой строки закодированы данные, структура которых зависит от версии идентификатора. Два бита отведены под вариант (variant), четыре — под версию (version). Остальные биты несут полезную нагрузку: временную метку, случайные числа или хеш имени.

Версии UUID и когда какую выбрать
Стандарт описывает пять версий. Каждая решает свою задачу:
- UUID v1 — строится на основе MAC-адреса устройства и временной метки. Гарантирует уникальность, но раскрывает информацию об оборудовании. Подходит для систем, где важна хронологическая сортировка.
- UUID v3 — хеш MD5 от пространства имён и строки. Детерминированный: одни и те же входные данные дадут один и тот же UUID. Используется, когда нужна воспроизводимость.
- UUID v4 — полностью случайный, за исключением нескольких служебных битов. Самая распространённая версия в современной разработке: не раскрывает данные об устройстве, крайне мала вероятность коллизии.
- UUID v5 — аналог v3, но на SHA-1. Более безопасен криптографически, хотя и v3, и v5 не предназначены для криптографических целей напрямую.
- UUID v7 — новая версия из черновика RFC: монотонно возрастающий идентификатор на основе миллисекундной временной метки Unix. Удобен для индексов в базах данных, потому что вставки идут в порядке возрастания и не фрагментируют B-tree-индекс.

Где UUID применяется на практике
Первичные ключи в реляционных базах данных — самое очевидное применение. Автоинкрементный integer требует центрального генератора; UUID можно создать на клиенте, не обращаясь к серверу. Это упрощает горизонтальное масштабирование и слияние данных из разных источников.
В распределённых системах UUID используют как идентификаторы событий, сессий, транзакций и запросов. Когда несколько сервисов пишут в общий лог, каждое событие получает UUID — это позволяет трассировать запрос от входной точки до конечного обработчика без риска совпадения идентификаторов.
В объектном хранилище имена файлов часто строятся на UUID, чтобы исключить конфликты при параллельной загрузке. Особенно это актуально, когда пользователи загружают файлы с одинаковыми именами.

Вероятность коллизии: насколько UUID уникален
Для UUID v4 вероятность совпадения двух идентификаторов становится значимой только при генерации около 2,71 квинтиллиона значений. Чтобы вероятность хотя бы одной коллизии достигла 50%, нужно сгенерировать примерно 2,3 × 1018 UUID. На практике это недостижимо для подавляющего большинства систем.
Тем не менее полагаться на это вслепую не стоит: если генератор использует слабый источник случайности (например, стандартный rand() в некоторых окружениях), реальная энтропия окажется ниже теоретической. Всегда проверяйте, что библиотека использует криптографически стойкий генератор случайных чисел.
Как сгенерировать UUID без лишних инструментов
Есть несколько способов получить UUID прямо сейчас:
- Онлайн-инструмент — быстрее всего. Никакой установки не нужно.
- Командная строка Linux/macOS:
uuidgenилиcat /proc/sys/kernel/random/uuid. - Python:
import uuid; print(uuid.uuid4()). - JavaScript (Node.js):
crypto.randomUUID()— встроено начиная с Node.js 14.17. - PostgreSQL:
SELECT gen_random_uuid();— доступно без расширений с версии 13.
Онлайн-генератор удобен, когда нужно быстро получить один или несколько идентификаторов для тестирования, заполнения базы или настройки конфигурации. Для production-кода лучше использовать библиотечную функцию на стороне приложения, чтобы генерация происходила без сетевых зависимостей.
UUID v7 постепенно вытесняет v4 в новых проектах именно из-за удобства работы с индексами. Если вы проектируете схему базы данных с нуля и планируете использовать UUID как первичный ключ, присмотритесь к v7: вы получите глобальную уникальность и при этом сохраните производительность вставок, сопоставимую с автоинкрементом.
