Estrutura
timestamp (60-bit) + clock seq (14-bit) + MAC (48-bit)
Risco de colisão
Very low
Vantagens
Desvantagens
Melhor usado 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 usado 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 usado 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 usado 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 usado 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 usado 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 textULIDs são uma alternativa compacta: timestamp de 48 bits + 80 bits aleatórios, codificados como 26 caracteres Crockford Base32. Eles são ordenáveis lexicograficamente por hora de criação.
IDs sequenciais são mais simples e eficientes para aplicações com um único banco de dados. Use UUIDs quando você precisar de:
-- PostgreSQL: tipo UUID nativo (16 bytes, eficiente)
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL
);
-- MySQL: armazene como BINARY(16) para desempenho
CREATE TABLE users (
id BINARY(16) PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
UUID v4 usa 122 bits de aleatoriedade de uma fonte criptográfica, o que fornece boa entropia. No entanto, para tokens de segurança (chaves de API, IDs de sessão), é melhor usar formatos de token construídos para esse fim, com propriedades adicionais como checksums, codificação de expiração ou identificação por prefixo. UUIDs são para identidade, não para autenticação.
Um 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ífens. São projetados para serem únicos no espaço e no tempo sem uma autoridade central.
Use v4 para a maioria dos propósitos gerais — é gerada aleatoriamente e tem probabilidade de colisão extremamente baixa. Use v7 se precisar de UUIDs ordenados por tempo para chaves primárias de banco de dados. Use 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. Isso 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 chance de colisão você precisaria gerar cerca de 2,7 × 10^18 UUIDs.