Что такое UUID на самом деле
UUID (Universally Unique Identifier — универсальный уникальный идентификатор) — это 128-битное значение для маркировки чего-либо без необходимости запрашивать разрешение у кого-либо. Его также называют GUID (Globally Unique Identifier — глобальный уникальный идентификатор) — так Microsoft назвала ту же концепцию внутри Windows и мира .NET. В подавляющем большинстве случаев оба термина описывают одно и то же 128-битное число, поэтому когда коллега говорит GUID, а вы — UUID, речь идёт об одном и том же.
Эти 128 бит обычно записываются как 32 шестнадцатеричных знака, разбитых на пять групп дефисами по схеме 8-4-4-4-12. Типичное значение выглядит как 123e4567-e89b-12d3-a456-426614174000. Дефисы сами по себе не несут смысловой нагрузки — они нужны лишь для того, чтобы человеку было удобнее читать значение, не теряя место. Каждый символ — шестнадцатеричная цифра от 0 до f, именно поэтому UUID кажется плотнее обычного числа, хотя по сути является одним очень большим целым.

Версии UUID и почему побеждает v4
Стандарт определяет несколько версий, различающихся способом заполнения битов. Версия 1 основана на времени: она объединяет текущую временную метку и MAC-адрес сетевой карты машины. Это делает значения v1 сортируемыми по времени создания, но также раскрывает информацию о том, где и примерно когда они были созданы, — что не всегда желательно. Версии 3 и 5 основаны на именах: они хешируют пространство имён плюс имя, чтобы одни и те же входные данные всегда давали один и тот же идентификатор.
Версия 4 идёт совершенно другим путём. Это почти чистая случайность. Из 128 бит шесть зарезервированы для маркировки версии и варианта, а оставшиеся 122 бита заполняются случайными данными. Никаких временных меток, MAC-адресов или пространств имён — только шум. Именно поэтому большинство генераторов, включая этот, по умолчанию создают v4. Он ничего не раскрывает об устройстве или моменте создания и не требует координации между сторонами, которые его генерируют. Инструмент на этой странице работает полностью в браузере, поэтому случайные значения никогда не покидают ваш компьютер.
Насколько маловероятно совпадение
Разумное опасение — что два случайных UUID могут когда-нибудь совпасть. При 122 случайных битах пространство возможных значений v4 равно 2 в степени 122, то есть примерно 5,3 с 36 нулями после. Говоря понятным языком: нужно генерировать миллиарды UUID каждую секунду на протяжении многих десятилетий, прежде чем вероятность хотя бы одного дубликата станет измеримой. Сам стандарт описывает вероятность коллизии как достаточно близкую к нулю, чтобы ею пренебречь. На практике команды считают v4 уникальным и работают дальше — и совершенно правильно делают.

Где разработчики их применяют
Поскольку уникальность не требует центрального органа управления, UUID хорошо подходят там, где координация дорогостояща или невозможна. Они идеально используются в качестве первичных ключей базы данных — особенно когда несколько сервисов одновременно вставляют строки и нельзя приостановиться, чтобы запросить у общего счётчика следующий номер. В распределённых системах два узла на разных концах планеты могут генерировать идентификаторы в один момент, никогда не столкнувшись. UUID также используются как ключи идемпотентности в API: клиент прикрепляет UUID к запросу, чтобы сервер мог безопасно проигнорировать дубликат при повторной отправке по сети. Токены сессий, имена файлов, идентификаторы событий и ключи сообщений — всё это опирается на то же свойство.
UUID против автоинкремента
Классическая альтернатива — автоинкрементный целочисленный ID: 1, 2, 3 и так далее. Последовательные ID компактны, естественно сортируются и легко читаются, но имеют реальные недостатки. Они раскрывают количество записей и позволяют посторонним угадывать соседние значения, а также вынуждают каждую вставку проходить через единственный счётчик, который становится узким местом при шардировании базы данных или объединении данных из многих источников. UUID решают эти проблемы, позволяя любой стороне независимо генерировать ключ и не раскрывая ничего об объёме или порядке записей. Плата за это — больший размер и чуть меньшая локальность в индексах. Для систем, которые масштабируются горизонтально или должны скрывать свою структуру, этот компромисс обычно оправдан. Изучить этот и похожие инструменты можно в нашей коллекции всех генераторов или в более широком наборе инструментов для разработчиков.
Часто задаваемые вопросы
GUID и UUID — это одно и то же?
Для повседневных целей — да. GUID — это название Microsoft для того же 128-битного идентификатора. Единственное реальное различие — порядок байтов в бинарном виде в некоторых системах Windows; в строковом виде они идентичны и взаимозаменяемы.
Какую версию UUID генерирует этот инструмент?
Версию 4 — случайный вариант. Из 128 бит 122 заполняются случайными данными, что делает каждое значение крайне маловероятным к повторению и означает, что оно не несёт информации о временной метке или устройстве.
Могут ли два UUID совпасть?
Теоретически вероятность не равна ровно нулю, но при примерно 5,3 × 10 в степени 36 возможных значений v4 она настолько мала, что ею пренебрегают. Чтобы коллизия стала вероятной, нужно сгенерировать астрономическое количество идентификаторов.
Зачем использовать UUID вместо автоинкрементного числа?
UUID могут создаваться независимо любым сервисом без общего счётчика, не раскрывают количество записей или их порядок и упрощают объединение данных из множества источников. Автоинкрементные ID меньше по размеру, но становятся узким местом и раскрывают информацию при масштабировании.
UUID генерируются на сервере?
Нет. Этот инструмент работает полностью в браузере, поэтому случайные значения создаются локально и никуда не отправляются. Это делает его безопасным для ключей и токенов, которые вы хотите сохранить в тайне.
Что означает схема дефисов?
Группировка 8-4-4-4-12 — это просто соглашение для удобства чтения. Дефисы не несут данных; они разбивают 32 шестнадцатеричных знака на блоки, чтобы людям было удобнее просматривать и сравнивать значения.
