Cada versão UUID — v1 a v8 — com diagramas de estrutura, casos de utilização, risco de colisão e exemplos de código JavaScript.
Estrutura
timestamp (60-bit) + clock seq (14-bit) + MAC (48-bit)
Risco de colisão
Very low
Vantagens
Desvantagens
Melhor utilizado para
Legacy systems. Avoid in new projects due to MAC address exposure.
Estrutura
MD5(namespace UUID + name) → UUID
Risco de colisão
MD5 collision risk (low for UUIDs)
Vantagens
Desvantagens
Melhor utilizado para
Generating UUIDs from URLs, email addresses, or other stable identifiers. Use v5 instead.
Estrutura
122 random bits + 4-bit version + 2-bit variant
Risco de colisão
Negligible (2^122 possibilities)
Vantagens
Desvantagens
Melhor utilizado para
Default choice for most applications. IDs for records, sessions, tokens.
Estrutura
SHA-1(namespace UUID + name) → UUID (top 128 bits)
Risco de colisão
SHA-1 — extremely low for UUID purposes
Vantagens
Desvantagens
Melhor utilizado para
Deterministic IDs from a namespace + name. Example: UUID for 'https://example.com' is always the same.
Estrutura
Unix ms timestamp (48-bit) + version (4-bit) + random (74-bit)
Risco de colisão
Very low (74 random bits)
Vantagens
Desvantagens
Melhor utilizado para
Database primary keys where sort order matters. Replaces v1 for time-ordered UUIDs.
Estrutura
128 bits, content defined by the implementation
Risco de colisão
Depends on implementation
Vantagens
Desvantagens
Melhor utilizado para
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 textUm UUID (Universally Unique Identifier) é um identificador de 128 bits padronizado no RFC 4122. É formatado como 8-4-4-4-12 caracteres hexadecimais separados por hífenes. São concebidos para serem únicos no espaço e no tempo sem uma autoridade central.
Utilize v4 para a maioria dos propósitos gerais — é gerada aleatoriamente e tem probabilidade de colisão extremamente baixa. Utilize v7 se precisar de UUIDs ordenados por tempo para chaves primárias de base de dados. Utilize v5 para UUIDs determinísticos de um par namespace+nome.
UUID v4 é puramente aleatória (122 bits aleatórios). UUID v7 codifica um timestamp Unix nos primeiros 48 bits seguido de bits aleatórios. Isto torna os UUIDs v7 ordenáveis por tempo de criação, melhorando significativamente o desempenho do índice B-tree.
Praticamente sim. UUID v4 tem 122 bits aleatórios, dando 2^122 ≈ 5,3 × 10^36 valores possíveis. Para ter 50% de probabilidade de colisão seria necessário gerar cerca de 2,7 × 10^18 UUIDs.