跳转到内容
此页面尚未翻译 — 显示的是俄语原文。译文将很快提供。
实用工具

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

作者编辑团队 9-07-2026, 00:09 242
Что такое 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: модуль uuid — uuid.uuid4(), uuid.uuid1(), uuid.uuid5(ns, name). PHP: 图书馆 ramsey/uuid — Uuid::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.

材料有多有用?评估帮助我们选择主题
00 评分
分析

故事统计

242观看次数
0评论
6分钟阅读
2 / 20在章节故事中的排名

在本节中阅读量排名前10%的故事。

讨论

目前还没有人发表意见——您可以是第一个。

评论由参与者撰写 注册网站 — 免费且只需一分钟。评论经过审核。
登录
广告

本页回答哪些搜索