Каждая версия UUID — от v1 до v8 — с диаграммами структуры, случаями использования, риском коллизии и примерами кода JavaScript.
Структура
timestamp (60-bit) + clock seq (14-bit) + MAC (48-bit)
Риск коллизии
Very low
Преимущества
Недостатки
Лучше всего подходит для
Legacy systems. Avoid in new projects due to MAC address exposure.
Структура
MD5(namespace UUID + name) → UUID
Риск коллизии
MD5 collision risk (low for UUIDs)
Преимущества
Недостатки
Лучше всего подходит для
Generating UUIDs from URLs, email addresses, or other stable identifiers. Use v5 instead.
Структура
122 random bits + 4-bit version + 2-bit variant
Риск коллизии
Negligible (2^122 possibilities)
Преимущества
Недостатки
Лучше всего подходит для
Default choice for most applications. IDs for records, sessions, tokens.
Структура
SHA-1(namespace UUID + name) → UUID (top 128 bits)
Риск коллизии
SHA-1 — extremely low for UUID purposes
Преимущества
Недостатки
Лучше всего подходит для
Deterministic IDs from a namespace + name. Example: UUID for 'https://example.com' is always the same.
Структура
Unix ms timestamp (48-bit) + version (4-bit) + random (74-bit)
Риск коллизии
Very low (74 random bits)
Преимущества
Недостатки
Лучше всего подходит для
Database primary keys where sort order matters. Replaces v1 for time-ordered UUIDs.
Структура
128 bits, content defined by the implementation
Риск коллизии
Depends on implementation
Преимущества
Недостатки
Лучше всего подходит для
Experimental or vendor-specific use cases where v1–v7 don't fit.
| Version | Method | Sortable | Privacy-safe | Deterministic |
|---|---|---|---|---|
| v1 | Time + MAC | ✅ | ❌ (MAC leak) | ❌ |
| v3 | MD5 hash | ❌ | ✅ | ✅ |
| v4 | Random | ❌ | ✅ | ❌ |
| v5 | SHA-1 hash | ❌ | ✅ | ✅ |
| v7 | Time + Random | ✅ | ✅ | ❌ |
| v8 | Custom | — | — | — |
// JavaScript / Node.js (built-in, Node 15+)
import { randomUUID } from 'crypto';
const v4 = randomUUID(); // → "550e8400-e29b-41d4-a716-446655440000"
// Browser
const v4 = crypto.randomUUID();
// UUID v7 (npm: uuid package v10+)
import { v7 as uuidv7 } from 'uuid';
const v7 = uuidv7(); // → "018f0b2d-4c9e-7abc-89de-f012345678ab"
// Python
import uuid
v4 = str(uuid.uuid4()) # Random
v5 = str(uuid.uuid5(uuid.NAMESPACE_URL, 'https://example.com'))
# PostgreSQL
SELECT gen_random_uuid(); -- v4 (pg 13+)
SELECT uuid_generate_v4(); -- v4 (uuid-ossp extension)
SELECT gen_random_uuid()::text; -- as textUUID (Universally Unique Identifier) — это 128-битный идентификатор, стандартизированный в RFC 4122. Форматируется как 8-4-4-4-12 шестнадцатеричных символов, разделённых дефисами. Разработан для уникальности в пространстве и времени без центрального органа.
Используйте v4 для большинства общих целей — генерируется случайно и имеет крайне низкую вероятность коллизии. Используйте v7 для временно упорядоченных UUID в качестве первичных ключей базы данных. Используйте v5 для детерминированных UUID из пары namespace+имя. Избегайте v1 в новых проектах — раскрывает MAC-адрес.
UUID v4 полностью случайный (122 случайных бита). UUID v7 кодирует временную метку Unix в первых 48 битах, за которыми следуют случайные биты. Это делает UUID v7 сортируемыми по времени создания, значительно улучшая производительность B-tree индексов.
Практически да. UUID v4 имеет 122 случайных бита, давая 2^122 ≈ 5,3 × 10^36 возможных значений. Чтобы иметь 50% шанс коллизии, нужно было бы сгенерировать около 2,7 × 10^18 UUID.