Генератор 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.