- Tipo
- Versão 7: data Unix ordenável
- Variante
- RFC 9562 (antes RFC 4122)
- Data de criação
- 22 de fev. de 2022, 16:22:22 2022-02-22T19:22:22.000Z · 1645557742000 ms
017f22e2-79b0-7cc3-98c4-dc0c0c07398f017F22E2-79B0-7CC3-98C4-DC0C0C07398F{017F22E2-79B0-7CC3-98C4-DC0C0C07398F}urn:uuid:017f22e2-79b0-7cc3-98c4-dc0c0c07398f01FWHE4YDGFK1SHH6W1G60EECF017f22e279b07cc398c4dc0c0c07398f1989357241971137676463954034883508623AX8i4nmwfMOYxNwMDAc5jw==Como funciona
Um UUID é um número de 128 bits escrito como 32 dígitos hexadecimais em cinco grupos (8-4-4-4-12). Ele identifica um registro sem perguntar a ninguém se o valor já está em uso: dois servidores, dois apps móveis ou dois processos podem criar identificadores ao mesmo tempo sem se coordenar e sem colidir. O formato é definido pela RFC 9562, que em 2024 substituiu a RFC 4122 e acrescentou as versões 6, 7 e 8.
O dígito que abre o terceiro grupo indica a versão, e cada versão organiza os bits de outra forma. A 4 é puro acaso. A 7 começa com a data em milissegundos, então os identificadores ficam ordenados por criação. As versões 3 e 5 não têm nada de aleatório: saem do hash de um namespace e de um nome, por isso sempre dão o mesmo resultado. A 1 e a 6 levam uma data com precisão de 100 nanossegundos e um nó que historicamente era o MAC do computador.
O analisador faz o caminho inverso: lê a versão e a variante, recupera a data dos UUID v1, v6 e v7 e dos ULID, e mostra o mesmo valor escrito como GUID, URN, hexadecimal, inteiro ou Base64. Tudo é calculado no seu navegador; nenhum identificador vai para um servidor.
Exemplos
v5 · DNS · www.example.com2ed6657d-e927-568b-95e1-2665a8aea6a2É o vetor de teste da RFC 9562. Qualquer biblioteca que implemente corretamente a versão 5 deve devolver exatamente este valor para esse nome no namespace DNS.017F22E2-79B0-7CC3-98C4-DC0C0C07398F2022-02-22T19:22:22.000ZOs primeiros 12 dígitos de um UUID v7 são os milissegundos Unix em hexadecimal: 0x017F22E279B0 é 1645557742000.C232AB00-9414-11EC-B3C8-9F6BDECED8461EC9414C-232A-6B00-B3C8-9F6BDECED846O mesmo instante como versão 1 e como versão 6. A 6 reordena os bits da data do mais para o menos significativo para que o texto ordene cronologicamente; a sequência de relógio e o nó não mudam.01ARZ3NDEKTSV4RRFFQ69G5FAV01563e3a-b5d3-d676-4c61-efb99302bd5bUm ULID ocupa os mesmos 128 bits de um UUID, então pode ser guardado em uma coluna uuid. Mas não tem versão nem variante: ao lê-lo como UUID, esses dígitos fazem parte do acaso.Casos de uso
- Criar a chave primária no cliente ou em vários serviços ao mesmo tempo, sem esperar o banco de dados atribuir um autoincremento.
- Gerar chaves de idempotência para que um pagamento ou pedido repetido não seja processado duas vezes.
- Marcar cada requisição com um identificador de correlação para acompanhá-la pelos logs de vários microsserviços.
- Derivar com v5 um identificador estável a partir de uma chave natural (um e-mail, uma URL, um SKU) para que dois sistemas cheguem ao mesmo valor sem compartilhar uma tabela.
- Saber quando um registro foi criado a partir do seu UUID v7 ou ULID quando ele aparece em um log ou relatório de erro.
- Carregar dados de teste com centenas de identificadores válidos de uma só vez.
Perguntas frequentes
v4 ou v7 para uma chave primária?
v7, a não ser que você tenha um motivo para esconder a data de criação. Índices de árvore B guardam as chaves em ordem, e um v4 cai em qualquer lugar do índice: cada inserção toca uma página diferente, páginas são divididas e o cache rende menos. Um v7 sempre vai para o final, como um autoincremento. Cuidado com o SQL Server: o tipo uniqueidentifier ordena começando pelos últimos seis bytes, então ali um v7 também não fica sequencial.
Dois UUID v4 podem se repetir?
Em teoria sim, na prática não. Um v4 tem 122 bits aleatórios, e para chegar a 50 % de probabilidade de haver ao menos uma repetição seria preciso gerar uns 2,7 × 10¹⁸, ou seja, um bilhão por segundo durante mais de 85 anos. A condição é usar um gerador criptográfico: os duplicados reais relatados vêm de sementes mal inicializadas, não da matemática.
UUID e GUID são a mesma coisa?
Sim, GUID é o nome que a Microsoft usa e o texto é idêntico; no Windows costuma aparecer em maiúsculas e entre chaves. A diferença está no binário: o Guid.ToByteArray do .NET guarda os três primeiros grupos em little-endian, então se você ler esses bytes brutos em outra linguagem verá os primeiros dígitos invertidos.
Posso usar um UUID como token secreto?
Um v4 bem gerado tem 122 bits imprevisíveis, o que basta para um link difícil de adivinhar, mas a RFC 9562 esclarece que UUIDs não foram pensados como credenciais: muitas bibliotecas não garantem um gerador criptográfico, e as versões 1, 6 e 7 revelam a data de criação. Para tokens de sessão ou de recuperação de senha, é melhor gerar bytes aleatórios dedicados.
ULID ou UUID v7?
Levam quase a mesma informação: 48 bits de milissegundos e o resto aleatório. O ULID é escrito em 26 caracteres sem hífens nem letras ambíguas, mais prático em uma URL. O v7 é um UUID padrão, então cabe nas colunas uuid do PostgreSQL e em qualquer validador sem conversão. Se você está começando do zero e seu banco tem tipo uuid, v7.
Por que o nó dos meus UUID v1 não é o meu MAC?
Porque expor o MAC da placa de rede permite rastrear qual equipamento criou cada identificador, e foi assim que se identificou o autor do vírus Melissa em 1999. A RFC 9562 recomenda usar um nó aleatório com o bit multicast ligado, que é o que esta ferramenta faz; o analisador avisa quando um UUID v1 tem um MAC real.