Все статьи
Криптография и безопасность

UUID — что это такое: версии, GUID и чем они отличаются

UUID — что это такое простыми словами: устройство идентификатора, версии v4 и v7, чем GUID отличается от UUID и где идентификаторы используются.

18 марта 2026
7 мин чтения
ConvertHub
Обновлено 07.09.2026
#uuid#guid#идентификаторы

Посчитайте прямо здесь: UUID → Validation Result

Открыть инструмент целиком →

Введение

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

Что такое UUID

UUID (Universally Unique Identifier) — это 128-битное число, используемое для однозначной идентификации объектов в распределённых системах. Стандарт RFC 4122 описывает каноническое представление UUID в виде пяти групп шестнадцатеричных символов, разделённых дефисами:

550e8400-e29b-41d4-a716-446655440000
└──┬──┘ └─┬─┘ └┬┘ └─┬─┘ └────┬────┘
   8     4    3    4      12     символов

Общее количество возможных UUID — 2¹²⁸, то есть примерно3,4 × 10³⁸. Если бы всё человечество генерировало по миллиарду UUID в секунду на протяжении века, вероятность коллизии всё равно осталась бы пренебрежимо малой.

Из чего состоит UUID: разбор по частям

Разберём тот же 550e8400-e29b-41d4-a716-446655440000 по частям. Внутри — 32 шестнадцатеричные цифры, то есть 128 бит (одна hex-цифра кодирует ровно 4 бита), разбитые дефисами на пять групп 8-4-4-4-12. Почти всё это пространство занимает полезная нагрузка версии, но два места зарезервированы всегда:

550e8400-e29b-41d4-a716-446655440000
              │    └─ вариант: первый символ четвёртой группы
              └────── версия: первый символ третьей группы

Первая цифра третьей группы — номер версии. В примере стоит 4: перед вами случайный v4. Единица означала бы v1 (время плюс MAC-адрес), семёрка — v7 (время плюс случайные биты). Первая цифра четвёртой группы — вариант, он описывает семейство стандартов: символы 8, 9, a и b означают вариант RFC 4122. Если там стоит что-то другое, строка форматом на UUID не тянет — валидатор её отвергнет.

Короткая шпаргалка по всем версиям v1–v7 — чем генерируется каждая и когда её брать:

ВерсияЧем генерируетсяКогда применять
v160-битный таймстамп + MAC-адресТолько в унаследованных системах: раскрывает MAC
v2Таймстамп + номер пользователя (DCE Security)Почти нигде, встречается в legacy-системах DCE
v3MD5-хеш имени и пространства имёнНужен воспроизводимый ID, а v5 недоступен
v4122 случайных бита из криптогенератораВыбор по умолчанию: API, сессии, ключи БД
v5SHA-1-хеш имени и пространства имёнВоспроизводимый ID из имени: DNS, URL, объекты
v6Таймстамп v1, переставленный для сортировкиМиграция с v1, когда нужна сортировка по времени
v7Миллисекундный таймстамп + 74 случайных битаНагруженные БД и логи: индекс не фрагментируется

Стандарты UUID

Формат закреплён в стандартах: RFC 4122 (2005) — классические версии v1–v5, RFC 9562 (май 2024) — добавил сортируемые v6, v7 и v8, а также ISO/IEC 9834-8 и ITU-T X.667 дублируют спецификацию на уровне ISO и МСЭ.

UUID vs GUID

GUID (Globally Unique Identifier) — термин, используемый в экосистеме Microsoft. Технически это тот же UUID, но с акцентом на использование в COM-компонентах, реестре Windows и .NET. В большинстве контекстов UUID и GUID взаимозаменяемы, но есть нюанс в порядке байтов при сериализации смешанных версий. На практике для веб-разработки разницы нет.

Версии UUID

Стандарт описывает несколько версий, каждая со своим способом генерации.

UUID v1 — на основе времени и MAC-адреса

v1 использует текущее время (60-битный таймстамп в наносекундах с 15 октября 1582 года) и MAC-адрес сетевой карты. Преимущество — сортируемость по времени создания. Недостаток — раскрывает MAC-адрес устройства, что в некоторых случаях считается нарушением приватности.

UUID v2 — DCE Security

Редко используется. Добавляет поле идентификатора локального пользователя (POSIX UID). На практике почти не встречается.

UUID v3 — на основе MD5

v3 генерируется из MD5-хеша пространства имён и имени. Детерминированный: одинаковые входы дают одинаковый UUID. Используется, когда нужно гарантированно воспроизвести идентификатор.

UUID v4 — случайный

Самая популярная версия. 122 бита заполняются случайными числами, остальные 6 фиксированы и указывают версию. v4 обеспечивает максимальную энтропию и не требует координации между узлами. Именно v4 вы получаете в большинстве онлайн-генераторов.

UUID v5 — на основе SHA-1

Аналог v3, но использует SHA-1 вместо MD5. Рекомендуется как замена v3 в новых проектах, поскольку SHA-1 считается более стойким (хотя для детерминированного идентификатора это не критично).

UUID v6 и v7 (новые)

RFC 9562, опубликованный в 2024 году, добавил v6, v7 и v8. UUID v7 — самый перспективный: он хранит таймстамп в старших битах (как ULID), что делает идентификаторы sortable в индексе БД, и при этом сохраняет случайность в младших битах.

ВерсияОсноваСортируемыйТипичное применение
v1Время + MACДаLegacy-системы
v3MD5(name)НетДетерминированный ID
v4СлучайныйНетВеб-приложения, БД
v5SHA-1(name)НетДетерминированный ID
v7Время + случайныйДаСовременные БД, события

Генерация UUID в разных языках

JavaScript / TypeScript

// Современный Node.js (19.0+)
import { randomUUID } from 'node:crypto';
const uuid = randomUUID();
// => "1b9e6ba9-9f3e-4d2a-b8c1-7e5f3a4d2c10"

// В браузере
const uuid = crypto.randomUUID();

// Библиотека uuid
import { v4, v5, v1 } from 'uuid';
console.log(v4());
console.log(v5('hello', v5.DNS));

Python

import uuid

# v4 — случайный
u = uuid.uuid4()
print(u)  # 1b9e6ba9-9f3e-4d2a-b8c1-7e5f3a4d2c10

# v1 — на основе времени и MAC
print(uuid.uuid1())

# v5 — на основе SHA-1
NAMESPACE = uuid.NAMESPACE_DNS
print(uuid.uuid5(NAMESPACE, 'example.com'))

Go

package main

import (
  "fmt"
  "github.com/google/uuid"
)

func main() {
  u := uuid.New()       // v4
  fmt.Println(u)

  u5 := uuid.NewSHA1(uuid.NameSpaceDNS, []byte("example.com"))
  fmt.Println(u5)
}

Применение UUID

  • Первичные ключи в БД. UUID можно генерировать на клиенте, до отправки на сервер.
  • Идентификаторы сессий. Случайный 128-битный токен невозможно угадать.
  • Распределённые системы. Микросервисы создают UUID независимо без центра.
  • Файловые хранилища. UUID как имя файла исключает коллизии.
  • Идентификация событий. Логи и трейсы удобно связывать через UUID.
  • API-токены и webhook-идентификаторы. Отслеживание запросов между системами.

Где ты уже встречал UUID

UUID давно вышел за пределы серверного кода — строки с дефисами окружают любого пользователя Windows и браузера:

  • Windows. Идентификатор устройства в разделе «О системе», ветки CLSID в реестре, зарегистрированные COM-компоненты — везде GUID. Microsoft генерирует их при установке почти каждой программы.
  • Ссылки на документы. Адрес Google Docs содержит длинный непредсказуемый набор символов после /d/. Технически это не UUID, но принцип тот же: перебирать такие ссылки бессмысленно.
  • Заказы и платежи. Номер заказа в письме магазина или ссылка на оплату — часто UUID вместо порядкового номера, чтобы чужие заказы нельзя было угадать.
  • Идентификаторы телефона. Рекламный идентификатор Android (Google Advertising ID) и IDFA на iOS оформлены как UUID: приложения видят их, пользователь может сбросить в настройках.

Отдельный случай — базы данных. Автоинкрементный ключ в URL раскрывает масштаб: по адресу /orders/1487 видно, что заказов меньше полутора тысяч, а соседние номера существуют. UUID непредсказуем — не выдаёт количество записей и не даёт перебирать чужие объекты. Поэтому публичные ссылки строят на нём, а автоинкремент оставляют внутренним ключом.

Nil и Max UUID

Два служебных значения: Nil UUID — все нули (00000000-0000-0000-0000-000000000000) — маркер «идентификатора нет»; Max UUID — все единицы (ffffffff-ffff-ffff-ffff-ffffffffffff). Оба закреплены в RFC 9562 и не должны получаться при генерации.

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

Пространство v4 — 2^122 вариантов. При генерации миллиарда UUID в секунду первое столкновение произойдёт в среднем через 100 лет, а чтобы получить хотя бы один шанс из миллиарда на дубликат, нужно нагенерировать около 2,6 квинтиллиона значений. На практике это значит: проверять сгенерированные UUID на уникальность не нужно — нужно проверять, что генератор использует криптостойкий источник случайности.

UUID в базах данных

Хранить UUID в БД можно тремя способами:

  1. VARCHAR(36) — человекочитаемо, но занимает 36 байт.
  2. CHAR(36) — то же, с фиксированной длиной.
  3. BINARY(16) — компактно, 16 байт. Рекомендуется для PostgreSQL и MySQL.

PostgreSQL имеет встроенный тип UUID. MySQL/MariaDB с версии 8.0 тоже поддерживают его. Для индексов важно помнить: v4 UUID полностью случаен, поэтому B-tree-индексы фрагментируются. Если вставка идёт интенсивно, рассмотрите v7 — он сортируемый и сохраняет компактность индекса.

-- PostgreSQL: хранимая функция для генерации
CREATE TABLE users (
  id    UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  email TEXT UNIQUE NOT NULL
);

-- Вставка без явного ID
INSERT INTO users (email) VALUES ('user@example.com');

Валидация UUID

Перед использованием UUID из внешних источников его стоит валидировать. Регулярное выражение ниже проверяет формат любой версии:

const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;

function isValidUUID(s) {
  return UUID_RE.test(s);
}

isValidUUID('550e8400-e29b-41d4-a716-446655440000'); // true
isValidUUID('not-a-uuid');                            // false

Для проверки готового идентификатора воспользуйтесь нашимUUID-валидатором.

Коллизии: мифы и реальность

Вероятность коллизии двух v4 UUID оценивается в 2⁻¹²². Согласно парадоксу дней рождений, чтобы с вероятностью 50% получить коллизию, нужно сгенерировать 2⁶¹ (около 2,3 × 10¹⁸) идентификаторов. При темпе генерации 1 миллиард UUID в секунду это заняло бы 73 года. На практике можно считать v4 UUID-коллизии невозможными.

Однако слабые генераторы случайных чисел могут нарушить это свойство. Известны случаи, когда из-за бага в Math.random() или одинакового seed разные узлы выдавали совпадающие UUID. Поэтому всегда используйте криптографически стойкий источник случайности.

Альтернативы UUID

  • ULID — 128 бит, сортируемый по времени, base32-представление.
  • ObjectId (MongoDB) — 96 бит, содержит таймстамп и идентификатор машины.
  • Snowflake (Twitter) — 64 бита, требует координации worker-id.
  • nanoid — короткая строка с настраиваемым алфавитом.
  • KSUID — 160 бит, сортируемый, от Segment.

Эти форматы удобнее, когда важна компактность или сортируемость. Но UUID остаётся стандартом «по умолчанию» благодаря универсальной поддержке и достаточной длине для большинства задач.

UUID vs GUID vs ULID

GUID — не отдельный формат, а то же самое в терминологии Microsoft: те же 128 бит, те же версии, те же дефисы. Часто GUID оборачивают в фигурные скобки — так его показывает реестр Windows и Visual Studio. Настоящая альтернатива другая — ULID: тоже 128 бит, но 48 из них занимает таймстамп в старших разрядах, поэтому идентификаторы сортируются по времени создания, а записываются 26 символами base32 без дефисов.

ФорматРазмерСортируемостьЗаписьГде встречается
UUID v4128 битНет36 символов, hex с дефисамиВеб, API, БД
GUID128 бит (тот же UUID)Зависит от версии36 символов, часто в скобкахWindows, COM, .NET
ULID128 битДа, по времени26 символов base32Очереди, логи, БД с интенсивной записью

На практике выбор простой: GUID достаётся «в нагрузку» от Windows-стека, ULID — осознанное решение под высокие нагрузки, в остальных случаях хватает UUID.

Заключение

UUID — простой и надёжный способ присвоить объекту уникальный идентификатор без центрального координатора. Для большинства веб-приложений оптимальна версия v4: она не зависит от времени и MAC-адреса, легко генерируется на любой стороне. Для новых проектов с интенсивной записью в БД стоит рассмотреть v7 — он сортируемый и дружелюбен к индексам. Сгенерировать UUID онлайн можно в нашемUUID-генераторе, а проверить корректность готовой строки — в UUID-валидаторе.

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

Чем UUID отличается от GUID?

Практически ничем: GUID — название того же 128-битного идентификатора в экосистеме Microsoft (COM, SQL Server, .NET). Различия технические: GUID в Windows исторически хранится в mixed-endian, а термин UUID — нейтральный стандартный. В разговоре разработчиков это синонимы.

Могут ли сгенерированные UUID совпасть?

Теоретически да, практически — вероятность ничтожна: пространство 2^122 вариантов. При генерации миллиарда UUID в секунду столкновение в среднем случится через ~100 лет. Для v4 совпадение возможно только из-за неисправного генератора случайных чисел; v1 зависит от MAC-адреса и времени.

Как проверить UUID в JavaScript?

Регулярным выражением: /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i. Оно проверяет формат, но не версию. Для валидации версии сверяйте первый символ третьего блока с ожидаемой (например, «4» для v4) — или воспользуйтесь нашим валидатором UUID.

Почему UUID лучше автоинкремента для публичных идентификаторов?

Последовательный ID раскрывает объём данных: по адресу /orders/1487 понятно, что заказов меньше полутора тысяч, и их можно перебирать. UUID непредсказуем, поэтому безопасен в URL, ссылках из писем и публичных API. Внутри базы автоинкремент при этом можно сохранить как суррогатный ключ.

Что такое Nil UUID?

Это особый идентификатор из одних нулей: 00000000-0000-0000-0000-000000000000. Он не генерируется случайно, а используется как «пустое значение» — маркер отсутствия идентификатора в системах, где null неудобен. Стандарт RFC 9562 закрепляет также Max UUID из всех единиц (0xFFFFFFFF-...).

Что такое UUID простыми словами?

Это случайный номер из 32 шестнадцатеричных цифр (0–9, a–f), разбитый дефисами на пять групп: 550e8400-e29b-41d4-a716-446655440000. Похож на серийный номер, только гарантия уникальности глобальная: сколько бы устройств ни генерировали номера одновременно, совпадение практически исключено. Поэтому UUID присваивают заказам, файлам и записям без центрального учёта.

Попробуйте эти инструменты

Похожие статьи