O que é um UUID?
Um UUID (Universally Unique Identifier) é um valor de 128 bits projetado para ser único no espaço e no tempo—sem autoridade central. Representa-se normalmente com 36 caracteres (32 hex + 4 hífenes), por exemplo:
550e8400-e29b-41d4-a716-446655440000
- 128 bits = 16 bytes
- Formas de texto: com hífenes (
8-4-4-4-12) ou compacto 32-hex - Indiferente a maiúsculas/minúsculas:
A–Fpode ser maiúscula ou minúscula - UUID nil:
00000000-0000-0000-0000-000000000000(especial “tudo zeros”)
O Standard Oficial (2025)
O standard IETF atual é o RFC 9562 (maio de 2024), que substitui o RFC 4122. Clarifica versões antigas e introduz formatos modernos ordenados no tempo para melhorar desempenho em bases de dados e logs.
Versões de UUID e Definições (Resumo)
| Versão | Ideia-chave | Uso típico | Notas |
|---|---|---|---|
| UUID v1 | Tempo + identificador de nó | Sistemas legados, correlação de logs | Pode expor info de tempo/host. |
| UUID v2 | DCE security (IDs POSIX) | Especializado/legado | Raro fora de DCE. |
| UUID v3 | Baseado em nome (MD5) | IDs estáveis a partir de um nome | Determinístico; MD5 está desatualizado. Prefira v5. |
| UUID v4 | Aleatório (122 bits) | IDs gerais | Simples, muito suportado. |
| UUID v5 | Baseado em nome (SHA-1) | IDs estáveis a partir de um nome | Determinístico; mesma entrada → mesmo UUID. |
| UUID v6 | Ordenado por tempo (v1 reordenado) | Inserts ordenados | Na prática substituído pelo v7. |
| UUID v7 | Tempo + aleatoriedade | Chaves de BD, logs, eventos | Padrão moderno para UUIDs ordenados. |
| UUID v8 | Personalizado | Interop/experiências | Para formatos/experimentos de fornecedor. |
Escolhas rápidas:
- Precisa de IDs ordenados para melhor indexação na BD? → UUIDv7
- Precisa de IDs determinísticos a partir de uma entrada (ex.: URL, email)? → UUIDv5
- Precisa de um ID simples e imprevisível e a ordenação não importa? → UUIDv4
[ Publicidade • Os Nossos Parceiros ]
Porque o UUIDv7 é o “sweet spot” em 2025
- Ordenado no tempo: codifica timestamp Unix (ms) nos bits altos → ótima localidade de índice e scans por intervalo.
- Continua imprevisível: bits restantes são aleatórios, tornando impraticável adivinhar IDs futuros.
- Vantagens operacionais: inserções B-tree mais suaves, menos splits de página, ingestão mais rápida em escala.
Se usa v1 para ordenação, mudar para v7 dá benefícios semelhantes sem expor identificadores de hardware.
Risco de Colisão (Devo preocupar-me?)
Para v4 (122 bits aleatórios), colisões são astronomicamente improváveis. Regra de bolso: teria de gerar ~1 mil milhão de UUIDs por segundo durante ~85 anos para ~50% de hipótese de uma colisão—muito além do real. Utilize RNG de alta qualidade e siga.
Conclusão: em sistemas reais, trate UUIDs v4/v7 como únicos quando bem gerados.
UUIDs Baseados em Nome (v3/v5) em termos simples
- Combine um namespace (ex.: DNS, URL) com um nome (string) e faça hash.
- Determinístico: as mesmas entradas produzem sempre o mesmo UUID.
- Ótimo para chaves de idempotência, deduplicação, referências estáveis entre serviços.
- Prefira v5 (SHA-1) em vez de v3 (MD5). (Não são “palavras-passe”.)
Boas Práticas
- Escolha a versão certa
- v7 para ordem temporal + desempenho em BD.
- v4 quando precisa apenas de IDs aleatórios fortes.
- v5 para IDs determinísticos de nomes (escolha um namespace fixo).
- Armazenamento
- Use colunas binárias de 16 bytes (ex.:
BINARY(16)) em vez deCHAR(36). - Em PostgreSQL, use o tipo
uuid; para semântica ordenada, armazene v7.
- Use colunas binárias de 16 bytes (ex.:
- Indexação
- Prefira v7 para evitar hotspots aleatórios e melhorar a localidade do índice.
- Formatação
- Aceite hífenado e compacto; normalize para um formato nos logs.
- Trate a entrada como hex indiferente a maiúsculas.
- Segurança
- UUIDs são identificadores, não segredos. Evite expor info via v1. Não use UUIDs como tokens de auth.
- Validação
- Exija:
- 32 hex (compacto) ou
8-4-4-4-12com hífenes - Versão correta (
1–8) - Variante correta (
10xxpara RFC)
- 32 hex (compacto) ou
- Exija:
[ Publicidade • Os Nossos Parceiros ]
FAQ
Um UUID é um identificador de 128 bits normalmente apresentado com 36 caracteres: 8-4-4-4-12 em hexadecimal com hífenes (ex.: 550e8400-e29b-41d4-a716-446655440000). É indiferente a maiúsculas/minúsculas e também pode surgir como 32 hex sem hífenes.
Por omissão, use UUIDv7 para IDs ordenáveis no tempo e amigos do índice em bases de dados. Use UUIDv4 para IDs aleatórios quando a ordenação não importa. Use UUIDv5 quando precisar de IDs determinísticos derivados de um nome.
v4 é puramente aleatório (122 bits aleatórios), simples mas não naturalmente ordenável. v7 codifica um carimbo temporal nos bits mais altos e aleatoriedade no restante, permitindo ordenação quase cronológica com boa imprevisibilidade—ideal para BD e logs com muitas escritas.
Na prática, sim, na maioria dos contextos de desenvolvimento. “GUID” é o termo da Microsoft; “UUID” é o nome do standard IETF. Ambos referem-se a identificadores únicos de 128 bits.
Sim com v7 (concebido para ordem temporal). v1/v6 também ordenam por tempo mas têm questões de privacidade/legado. v4 é aleatório e não ordenável por tempo.
Com um RNG adequado, as colisões v4/v7 são astronomicamente improváveis para volumes reais. Trate-os como únicos e garanta um gerador de alta qualidade.
Use v5 para obter um ID estável a partir de um namespace (ex.: DNS, URL) e um nome (string). As mesmas entradas → o mesmo UUID. Útil para chaves de idempotência, deduplicação e referências entre serviços.
UUIDs são identificadores, não segredos. Não confie neles para autenticação/autorização. Evite dados sensíveis no v1 (pode expor info de tempo/host). Prefira v4/v7 e use verdadeiros segredos para segurança.
Prefira tipos binários de 16 bytes quando disponíveis (ex.: PostgreSQL uuid, MySQL BINARY(16)), não CHAR(36). Poupa espaço e acelera comparações e índices.
Os bits mais altos ordenados por tempo melhoram a localidade de B-tree, reduzem divisões de páginas e aceleram ingestão. Mantém aleatoriedade para evitar previsibilidade e permite scans por intervalo eficientes.
O nil UUID é todo zeros: 00000000-0000-0000-0000-000000000000. Representa um valor “vazio” ou não inicializado; não use para entidades reais.
Verifique 32 hex (compacto) ou 8-4-4-4-12 com hífenes, indiferente a maiúsculas, versão correta (1–8) e variante (8|9|a|b). Rejeite o resto.
Não. Hex é indiferente a maiúsculas. Normalize para um estilo (geralmente minúsculas) para consistência em logs e UIs.
Evite. UUIDs são opacos por design. Se precisa de IDs legíveis por humanos ou estritamente monotónicos, use esquemas sequenciais ou ao estilo ULID/KSUID, ciente dos trade-offs.
Sim, na maioria dos novos desenvolvimentos. v7 preserva benefícios de ordenação sem expor MAC/tempo. Em migrações, faça dual-write ou backfill mantendo as chaves primárias estáveis para evitar rekeys em massa.
Nenhuma semanticamente. Hífenes ajudam a leitura; o formato compacto poupa bytes em texto. Armazene em binário internamente e escolha um formato de apresentação único externamente.
Sim. Com v7 (ou v4 + estratégia de ordenação), as bases de dados tratam-nos bem. Garanta indexação adequada, armazenamento binário e faça benchmark para a sua carga.
Escolha um namespace UUID fixo (DNS/URL/próprio) e uma string estável. O hashing (SHA-1) produz sempre o mesmo UUID. Não use v5 como segredo; trate-o apenas como identificador estável.
[ Publicidade • Os Nossos Parceiros ]
Referência Rápida (Snippets)
Reconhecer um UUID (hífenado, indiferente a maiúsculas):
^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$
Compacto (sem hífenes):
^[0-9a-fA-F]{32}$
Detete a versão no 13.º nibble hex (1–8) e a variante no 17.º nibble (8|9|a|b).
Quando Preferir IDs Sequenciais
- Precisa de inteiros estritamente monotónicos (ex.: números de fatura).
- Tabelas pequenas e chaves legíveis por humanos.
- Precisa de significado de negócio embutido (UUIDs são intencionalmente opacos).
Nos restantes casos, UUIDv7 é a escolha forte para 2025.
[ Publicidade • Os Nossos Parceiros ]