Обновлено:
Генератор UUID онлайн
Зачем нужен UUID и где он применяется
UUID (Universally Unique Identifier) – стандарт идентификации, разработанный в RFC 4122. UUID представляет собой 128-битное значение, записываемое в виде 36 символов: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Каждый UUID гарантирует уникальность без координации между системами.
UUID используют в задачах, где нельзя полагаться на автоинкремент базы данных:
- Первичные ключи в распределённых системах – несколько сервисов генерируют ID независимо, без конфликтов
- Идентификация сообщений в очередях – Kafka, RabbitMQ, NATS требуют уникальный ID для каждого события
- Логирование и трассировка – correlation ID связывает записи из разных сервисов
- API и веб-разработка – токены сессий, URL-параметры, идентификаторы сущностей
- Хранение файлов и объектов – имена файлов в S3, идентификаторы в объектных хранилищах
Вместо UUID иногда применяют суррогатные ключи на базе автоинкремента или хэши. Однако автоинкремент не работает в распределённых системах, а хэши требуют вычислений и не гарантируют уникальность без коллизий.
Как работает генератор UUID онлайн
Генератор UUID работает прямо в браузере – без отправки данных на сервер. Клиентская генерация исключает сетевые задержки: UUID формируется за микросекунды. Для генерации используется crypto.getRandomValues() – криптографически стойкий генератор случайных чисел, доступный во всех современных браузерах.
Каждый клик по кнопке создаёт новый UUID с гарантированной уникальностью. Можно сгенерировать сразу список идентификаторов для пакетной вставки в базу данных или тестирования API.
Типы UUID: v4 и v7
Существует несколько версий UUID. Для большинства задач подходят v4 и v7.
UUID v4 – случайный идентификатор
UUID v4 генерирует 122 случайных бита из 128. Шесть бит зарезервированы под версию (0100) и вариант (10xx). Структура:
| 32 бита | 16 бит | 4 бита | 12 бит | 48 бит |
| случайные | случайные | 0100 (v4) | случайные | случайные |
Преимущества:
- Простая генерация
- Высокая энтропия – практически невозможны коллизии
- Нет зависимости от системных часов
Недостатки:
- Не сортируется по времени создания
- Случайные значения в индексе БД вызывают фрагментацию страниц (write amplification)
UUID v7 – время-ориентированный идентификатор
UUID v7, стандартизированный в RFC draft в 2018 году и финализированный в 2024 году, помещает Unix-timestamp с точностью до миллисекунды в старшие 48 бит. Структура:
| 48 бит (timestamp) | 4 бита (v7) | 12 бит (rand a) | 2 бита (var) | 62 бита (rand b) |
Преимущества:
- Сортируется по времени создания – подходит для кластерных индексов
- Не требует центрального координатора для генерации
- Время создания идентификатора читается напрямую из значения
Недостатки:
- Менее случайный, чем v4 – теоретически выше вероятность угадать следующий ID
- Не подходит для криптографических целей
Какой UUID выбрать для базы данных
Выбор между v4 и v7 зависит от сценария.
| Критерий | UUID v4 | UUID v7 |
|---|---|---|
| Скорость вставки в B-tree индекс | Низкая (фрагментация) | Высокая (локальная запись) |
| Сортировка по времени | Нет | Да |
| Читаемость времени создания | Нет | Да |
| Устойчивость к угадыванию ID | Ниже | Выше |
Для баз данных PostgreSQL, MySQL, MongoDB рекомендуется UUID v7. Записи вставляются в конец индекса, а не распределяются случайно по страницам. Это снижает нагрузку на хранилище в 2–10 раз для высоконагруженных систем.
Для сессионных токенов, CSRF-токенов и любых задач безопасности используйте UUID v4 только если генератор применяет криптографически стойкий RNG.
Практические примеры генерации UUID
JavaScript (браузер)
// UUID v4
const uuidV4 = crypto.randomUUID();
// Ручная реализация v4
function uuidV4Manual() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
const r = (Math.random() * 16) | 0;
return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);
});
}
Python
import uuid
id_v4 = uuid.uuid4()
id_v7 = uuid.uuid7()
Rust
use uuid::Uuid;
let id = Uuid::new_v4();
let id_v7 = Uuid::now_v7();
Go
import "github.com/google/uuid"
id := uuid.New()
Генерация UUID в высоконагруженных системах
При генерации более 400 000 идентификаторов в секунду стандартные библиотеки упираются в производительность. Исследование на Apple M1 показало, что стандартный uuid::Uuid::now_v7() на базе OsRng требует ~1400 наносекунд на вызов – около 1,4 микросекунды.
Оптимизированные решения, такие как fast-uuid-v7, достигают 8–50 наносекунд на генерацию – в 165 раз быстрее. Экономия достигается за счёт:
- Потоково-локального состояния (thread-local RNG) вместо синхронных вызовов ОС
- Кэширования метки времени между вызовами
- Не-криптографического PRNG для random-компонента
Для большинства проектов стандартные библиотеки достаточно быстры. Оптимизация нужна только при генерации более 100 000 UUID в секунду.
Проверка валидности UUID
UUID считается валидным, если соответствует формату RFC 4122:
- 36 символов (32 шестнадцатеричных + 4 дефиса)
- Девятый символ – всегда
4(версия v4) - Тринадцатый символ – одна из цифр
8,9,a,b(вариант)
Регулярное выражение для проверки:
^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
При валидации UUID v7 дополнительно проверяйте, чтоtimestamp в старших 48 битах не превышает текущее время.
Данные о производительности актуальны на 2026 год. Технические характеристики UUID v7 соответствуют RFC draft-ietf-uuidrev-rfc4122bis.
Часто задаваемые вопросы
Чем UUID v4 отличается от v7?
UUID v4 – полностью случайный идентификатор из 122 случайных бит. UUID v7 содержит метку времени в первых 48 битах, что делает его сортируемым по времени создания без дополнительного индекса.
Можно ли использовать UUID как первичный ключ в базе данных?
Да, UUID подходит для первичных ключей, но чистый v4 ухудшает производительность индексов из-за случайности. Для БД лучше использовать UUID v7 – он сохраняет уникальность и упорядочен по времени.
Безопасны ли сгенерированные UUID?
UUID v4 криптографически безопасен только если использует крипографически стойкий генератор случайных чисел (CSPRNG). Для чувствительных данных лучше применять специализированные решения вместо UUID.
Сколько UUID можно сгенерировать без коллизии?
Вероятность коллизии UUID v4 ничтожна: при 2,7 квадриллиона UUID вероятность совпадения составляет около 0,00000006%. Для любых практических задач коллизии невозможны.
Как выглядит формат UUID?
UUID записывается в формате 8-4-4-4-12 шестнадцатеричных символов: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Пример: 550e8400-e29b-41d4-a716-446655440000.