Pular para o conteúdo

Gerador de UUID Versão 7

UUIDv7 • Ordenado no Tempo (RFC 9562)
00000000-0000-0000-0000-000000000000
Envolver:

Gerar UUIDs em Lote

Máx 5.000
Formatação e Estrutura

Pronto

No batch active
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 CampoIntervalo de BitsFinalidade e Descrição
unix_ts_ms48 bits (0-47)Timestamp Unix Epoch sem sinal em milissegundos (big-endian).
ver4 bits (48-51)Valor binário constante 0111 (identifica a Versão 7).
rand_a12 bits (52-63)Entropia pseudoaleatória ou contador de sequência sub-milissegundo.
var2 bits (64-65)Valor binário constante 10 (variante padrão RFC 4122/9562).
rand_b62 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-128a9b345678
PostgreSQL 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.