Gerador de UUID Versão 7
UUIDv7 • Ordenado no Tempo (RFC 9562)
00000000-0000-0000-0000-000000000000
Envolver:
Gerar UUIDs em Lote
0 msReady
Máx 5.000
Formatação e Estrutura
Pronto
No batch active1-click copy available on each row
Padrão Moderno (2024)•RFC 9562 Seção 5.7
Especificação Técnica do UUID Versão 7 (RFC 9562)
O UUIDv7 combina um timestamp Unix de 48 bits (em milissegundos) com 74 bits de entropia criptográfica e sequência. Foi padronizado na RFC 9562 (2024) para eliminar a degradação de índices B-Tree e a fragmentação de páginas em bancos de dados causadas pelas chaves aleatórias do UUIDv4.
Layout de Bits e Estrutura Binária
Distribuição detalhada de 128 bits de acordo com os padrões RFC.
| Nome do Campo | Intervalo de Bits | Finalidade e Descrição |
|---|---|---|
| unix_ts_ms | 48 bits (0-47) | Timestamp Unix Epoch sem sinal em milissegundos (big-endian). |
| ver | 4 bits (48-51) | Valor binário constante 0111 (identifica a Versão 7). |
| rand_a | 12 bits (52-63) | Entropia pseudoaleatória ou contador de sequência sub-milissegundo. |
| var | 2 bits (64-65) | Valor binário constante 10 (variante padrão RFC 4122/9562). |
| rand_b | 62 bits (66-127) | Bits de entropia pseudoaleatória criptograficamente seguros. |
✓
Vantagens e Pontos Fortes
- •Ordenação cronológica natural; perfeito para índices B-Tree clusterizados (PostgreSQL, MySQL, SQLite).
- •Elimina I/O de disco aleatório, descarte de cache e divisões de páginas B-Tree em inserções massivas.
- •74 bits de entropia por milissegundo garantem ausência de colisões em microserviços distribuídos.
- •O timestamp de criação pode ser extraído diretamente sem consultar o banco de dados.
!
Considerações e Desvantagens
- •Revela o milissegundo aproximado de criação em URLs públicas.
- •Exige contador monotônico para gerar múltiplos identificadores no mesmo milissegundo.
Recomendado para
- →Chaves primárias em bancos de dados relacionais e orientados a documentos (PostgreSQL, MySQL, CockroachDB, MongoDB).
- →Streaming de eventos, logs de auditoria e filas de mensagens (Kafka, RabbitMQ, SQS).
- →Dados temporais e séries temporais.
Quando evitar
- ✕Tokens de segurança ou cookies de sessão onde a hora de criação deve permanecer estritamente confidencial.
- ✕Sistemas que exigem inteiros sequenciais simples sem carimbo temporal.
Exemplos de Implementação de Código
Native Node.js / BrowserTypeScript / Node.js
// Browser / Node 22+ with Web Crypto
function generateUUIDv7(): string {
const bytes = new Uint8Array(16);
crypto.getRandomValues(bytes);
const now = Date.now();
bytes[0] = (now / 0x10000000000) & 0xff;
bytes[1] = (now / 0x100000000) & 0xff;
bytes[2] = (now / 0x1000000) & 0xff;
bytes[3] = (now / 0x10000) & 0xff;
bytes[4] = (now / 0x100) & 0xff;
bytes[5] = now & 0xff;
bytes[6] = (bytes[6] & 0x0f) | 0x70; // version 7
bytes[8] = (bytes[8] & 0x3f) | 0x80; // variant
return [...bytes].map((b, i) =>
(i === 4 || i === 6 || i === 8 || i === 10 ? '-' : '') + b.toString(16).padStart(2, '0')
).join('');
}Python (uuid6 / 3.14+)Python
import uuid6
new_id = uuid6.uuid7()
print(new_id) # e.g. 018e6a12-8921-71e4-8a4e-128a9b345678PostgreSQL FunctionPostgreSQL
-- PostgreSQL 13+ native UUIDv7 generator
CREATE OR REPLACE FUNCTION uuid_generate_v7()
RETURNS uuid AS $$
DECLARE
v_time numeric = extract(epoch FROM clock_timestamp()) * 1000;
v_bytes bytea = gen_random_bytes(16);
BEGIN
v_bytes = set_byte(v_bytes, 0, (v_time::bigint >> 40)::int);
v_bytes = set_byte(v_bytes, 1, (v_time::bigint >> 32)::int);
v_bytes = set_byte(v_bytes, 2, (v_time::bigint >> 24)::int);
v_bytes = set_byte(v_bytes, 3, (v_time::bigint >> 16)::int);
v_bytes = set_byte(v_bytes, 4, (v_time::bigint >> 8)::int);
v_bytes = set_byte(v_bytes, 5, (v_time::bigint)::int);
v_bytes = set_byte(v_bytes, 6, (get_byte(v_bytes, 6) & 15) | 112);
v_bytes = set_byte(v_bytes, 8, (get_byte(v_bytes, 8) & 63) | 128);
RETURN encode(v_bytes, 'hex')::uuid;
END;
$$ LANGUAGE plpgsql VOLATILE;Perguntas Frequentes
Por que migrar do UUIDv4 para o UUIDv7?▼
O UUIDv4 insere dados de forma dispersa nos índices B-Tree, causando alta fragmentação. O UUIDv7 insere sequencialmente no final do índice, aumentando a velocidade de gravação em até 4 vezes.
O UUIDv7 é compatível com colunas UUID existentes?▼
Sim. Utiliza o mesmo padrão de 128 bits (32 dígitos hexadecimais com 4 hifens) e é 100% compatível sem alterações de esquema.
Dois UUIDv7 gerados no mesmo milissegundo podem colidir?▼
Não. Graças a 74 bits de entropia e sequenciamento, bilhões de identificadores podem ser gerados por milissegundo sem risco de colisão.