+13°, Киев
www.MegaInet.art » Полезные инструменты » Что такое UUID (GUID): версии, генерация и коллизии
Полезные инструменты

Что такое UUID (GUID): версии, генерация и коллизии

Что такое UUID (GUID): версии, генерация и коллизии
Коротко
  • UUID (он же GUID) — это 128-битный идентификатор из 32 шестнадцатеричных символов, записываемый как 8-4-4-4-12, например 550e8400-e29b-41d4-a716-446655440000.
  • Главный смысл — генерировать уникальные ключи локально, без обращения к серверу или общему счётчику, что удобно для распределённых систем, API и офлайн-клиентов.
  • Самые ходовые версии: v4 (случайная), v1 (по времени и MAC), v5 (по имени и хешу SHA-1), а также новые v7 (сортируемая по времени) и ULID-подобные варианты.
  • Вероятность коллизии у v4 астрономически мала: чтобы получить один шанс на совпадение, нужно сгенерировать миллиарды идентификаторов ежесекундно десятилетиями.

Когда в приложении появляется несколько серверов, мобильные клиенты работают офлайн, а данные сливаются из разных источников, обычный автоинкрементный id в базе быстро превращается в узкое место: два узла легко присвоят одно и то же число двум разным записям. UUID решает эту проблему радикально — он позволяет любому участнику системы создать гарантированно уникальный идентификатор прямо у себя, не спрашивая разрешения у центральной базы. В этой статье разберём, что такое UUID и GUID, чем отличаются версии, где их применять, как сгенерировать нужный вариант и почему коллизий можно практически не бояться.

Генератор UUID
Сгенерируйте UUID/GUID онлайн — бесплатно
Открыть генератор →

Что такое UUID и GUID

UUID (Universally Unique Identifier — универсальный уникальный идентификатор) — это 128-битное значение, описанное в стандарте RFC 4122 и обновлённом RFC 9562. GUID (Globally Unique Identifier) — то же самое, просто исторически так его называет Microsoft в экосистеме Windows и .NET. Разницы в формате нет: оба состоят из 128 бит и обычно записываются в виде 36 символов — 32 шестнадцатеричные цифры, разбитые дефисами на группы 8-4-4-4-12.

Пример: 3f2504e0-4f89-41d3-9a0c-0305e82c3301. Внутри строки закодированы служебные поля — номер версии (по нему видно, как идентификатор был получен) и вариант (как трактовать биты). Всего пространство UUID содержит 2 в степени 128 значений — это порядка 3,4 × 10 в 38 степени комбинаций, число, которое сложно даже вообразить.

Зачем нужен UUID: базы данных и API

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

В распределённых базах данных и шардированных таблицах не нужен единый счётчик — каждый узел выдаёт ключи сам. В REST и GraphQL API клиент может сформировать id новой сущности заранее и отправить его вместе с запросом на создание, что упрощает идемпотентность и повторные попытки. При слиянии данных из разных систем (миграции, синхронизация, импорт) записи не конфликтуют по ключу. UUID также не раскрывает порядок и количество записей: по нему нельзя угадать, что до вас в базе было ровно 42 заказа, — в отличие от последовательного числового id.

Версии UUID и чем они отличаются

Стандарт описывает несколько версий, и выбор влияет на производительность и предсказуемость:

Версия 4 (случайная) — самая популярная. 122 бита берутся из криптографически стойкого генератора случайных чисел. Проста, не зависит от окружения, не раскрывает время создания. Минус — значения разбросаны хаотично, что мешает индексам в некоторых СУБД.

Версия 1 (по времени) — строится из текущего времени и MAC-адреса сетевой карты. Практически уникальна и содержит метку времени, но может выдать сведения об устройстве и моменте генерации.

Версии 3 и 5 (по имени) — детерминированные: из одного и того же входного имени и пространства имён всегда получается один и тот же UUID (v3 через MD5, v5 через SHA-1). Удобны, когда нужен стабильный идентификатор для известной строки, например для URL.

Версия 7 (сортируемая по времени) — новинка из RFC 9562. В старших битах лежит Unix-время в миллисекундах, дальше — случайность. Такой UUID возрастает во времени, поэтому отлично ложится в B-tree индексы и заменяет самописные схемы вроде ULID. Для новых проектов с UUID как первичным ключом v7 сегодня часто лучший выбор.

Как сгенерировать UUID

Готовые функции есть почти везде, изобретать своё не нужно:

JavaScript (браузер и Node): crypto.randomUUID() — вернёт строку v4. Python: модуль uuiduuid.uuid4(), uuid.uuid1(), uuid.uuid5(ns, name). PHP: библиотека ramsey/uuidUuid::uuid4(). Java: UUID.randomUUID(). PostgreSQL: тип uuid и функция gen_random_uuid(). Командная строка Linux: утилита uuidgen. Windows PowerShell: [guid]::NewGuid().

Если UUID нужен разово — для теста, конфигурации, ключа записи или сидирования базы, — быстрее всего взять готовое значение в онлайн-генераторе и скопировать его. Важное правило: для случайных версий всегда используйте криптографически стойкий источник (именно поэтому crypto.randomUUID предпочтительнее Math.random).

Вероятность коллизий: стоит ли бояться

Коллизия — это когда два независимо сгенерированных UUID случайно совпали. Для версии 4 доступно 2 в степени 122 значений, и вероятность оценивается через парадокс дней рождения. Чтобы вероятность хотя бы одного совпадения достигла 50%, нужно сгенерировать около 2,7 × 10 в 18 степени идентификаторов. На практике это означает: даже если создавать миллиард UUID в секунду, накопить такое количество получится лишь за десятки лет непрерывной работы. Для подавляющего большинства систем риск коллизии пренебрежимо мал и им можно смело пренебречь.

Реальные проблемы обычно не в математике, а в реализации: слабый генератор случайных чисел (не криптографический), повторно использованное зерно, копирование одного и того же UUID из-за ошибки в коде. Если источник случайности качественный, дублей в естественных условиях вы не увидите.

Частые вопросы

UUID и GUID — это одно и то же?
Да, по сути это синонимы. GUID — название, принятое в мире Microsoft и .NET, а UUID — термин из стандартов RFC. Формат и длина (128 бит, запись 8-4-4-4-12) у них идентичны, различий в структуре нет.

Какую версию UUID выбрать для первичного ключа в базе?
Для новых проектов удобна версия 7: она сортируется по времени и дружелюбна к индексам. Если такой поддержки нет, берут версию 4 за простоту и отсутствие утечки метаданных. Версии 1, 3 и 5 применяют под конкретные задачи.

Могут ли два UUID совпасть?
Теоретически да, практически — почти никогда. При корректном криптографическом генераторе вероятность коллизии для v4 настолько мала, что для реальных объёмов данных ею пренебрегают. Проблемы возникают лишь при слабом источнике случайности.

Можно ли сгенерировать UUID вручную или онлайн?
Да. В любом языке есть встроенная функция (crypto.randomUUID(), uuid4(), gen_random_uuid()), а для разовой задачи проще воспользоваться онлайн-генератором и скопировать готовое значение. Главное — не придумывать биты руками, чтобы сохранить уникальность.

Генератор UUID
Сгенерируйте UUID/GUID онлайн — бесплатно
Открыть генератор →

Обновлено: 9 июля 2026 г. Редакция MegaInet.art.

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.
Разделы
Сервисы