ESC
Developer

Что такое UUID? Руководство разработчика по уникальным идентификаторам

Узнайте, что такое UUID, как работают разные версии, когда их использовать и как генерировать в JavaScript, Python, PHP и SQL.

2026-06-25 8 min read Developer
UUID Guide: A Developer's Guide to Unique Identifiers

Что такое UUID?

UUID (Universally Unique Identifier, универсальный уникальный идентификатор) — 128-битный идентификатор, разработанный для уникальности в пространстве и времени без централизованной координации. Результат — строка из 36 символов в формате:

550e8400-e29b-41d4-a716-446655440000

Кодирует 32 шестнадцатеричные цифры в пяти группах, разделённых дефисами: 8-4-4-4-12.

Вероятность коллизии: Для UUID v4 вероятность генерации двух одинаковых ID — около 1 на 5,3×1036. На практике вы никогда не столкнётесь с коллизией в продакшене.

Версии UUID

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

Комбинирует текущую метку времени с MAC-адресом сетевого интерфейса. Хронологически упорядочен, но раскрывает MAC-адрес хоста и точное время создания — проблема конфиденциальности.

UUID v4 — Случайный (самый распространённый)

Заполняет 122 бита криптографически безопасными случайными данными. Не требует состояния, сети или координации. Выбор по умолчанию для большинства случаев.

UUID v5 — Namespace + SHA-1

Детерминированный: тот же namespace + имя = тот же UUID каждый раз. Предпочтите v5 вместо v3 (MD5 устарел).

UUID v7 — Упорядоченный по времени (новый стандарт)

Использует Unix-метку времени в миллисекундах в старших битах. UUID естественно сортируются и значительно улучшают производительность B-дерева в базах данных.

Для первичных ключей БД: Предпочтите UUID v7. Временной порядок предотвращает фрагментацию индексов.

Зачем использовать UUID?

  • Нет централизованной координации: Любой клиент или микросервис может независимо генерировать UUID.
  • Безопасность через непрозрачность: Последовательные целочисленные ID раскрывают объём данных. UUID ничего не раскрывают.
  • Слияние баз данных: Таблицы с UUID-ключами объединяются без конфликтов.
  • Генерация оффлайн: Мобильные приложения могут создавать записи оффлайн и синхронизироваться позже.
  • Промышленный стандарт: Встроенная поддержка во всех крупных базах данных и фреймворках.

Когда НЕ использовать UUID?

  • Накладные расходы хранилища: Используйте BINARY(16) в MySQL или нативный тип uuid в PostgreSQL вместо VARCHAR(36).
  • Слаги URL: Слишком длинные и незапоминающиеся. Для пользовательских URL используйте читаемые слаги.
  • Фрагментация индексов с v4: Для таблиц с высокой записью используйте UUID v7 или ULID.
Совет для MySQL: Никогда не храните UUID как VARCHAR(36) в высоконагруженных таблицах. Используйте BINARY(16) с UUID_TO_BIN(uuid, 1).

Генерация UUID в коде

JavaScript

const id = crypto.randomUUID(); // v4

Python

import uuid; id = str(uuid.uuid4())

PHP

use Ramsey\Uuid\Uuid;
$v4 = Uuid::uuid4()->toString();
$v7 = Uuid::uuid7()->toString();

SQL

-- MySQL: SELECT UUID();
-- PostgreSQL: SELECT gen_random_uuid();

Лучшие практики

  • Хранить как binary: BINARY(16) или нативный тип uuid PostgreSQL.
  • Использовать v4 в большинстве случаев.
  • Использовать v7 для первичных ключей баз данных.
  • Избегать v1 в контекстах, чувствительных к конфиденциальности.
  • Валидировать формат UUID на входе.
  • Всегда использовать нижний регистр.
Нужно сгенерировать UUID прямо сейчас? Наш генератор UUID создаёт UUID v4 и v7 партиями — мгновенное копирование в буфер.

Часто задаваемые вопросы

Могут ли два UUID быть одинаковыми?

Теоретически да. Вероятность коллизии v4 — около 1 на 5,3×1036. На практике вы никогда не встретите коллизию ни в одной реальной системе.

v4 или v7 для первичных ключей?

v7 для первичных ключей баз данных. v4 вставляет в случайные позиции B-дерева индекса, деградируя производительность. Временной префикс v7 гарантирует вставки в конец индекса.

UUID чувствительны к регистру?

Нет. Спецификация не чувствительна к регистру. По соглашению всегда используйте нижний регистр.

Мгновенная генерация UUID

Генерируйте UUID v4 или v7 партиями, копируйте в буфер обмена и используйте в проектах — без сервера, без отслеживания, 100% на стороне клиента.

Открыть генератор UUID