Uma versão de UUID (Identificador Universalmente Exclusivo) especifica o algoritmo matemático, a codificação de timestamp ou a fonte de entropia utilizada para gerar um identificador de 128 bits. Padronizadas originalmente pela Internet Engineering Task Force (IETF) na RFC 4122 e atualizadas substancialmente na RFC 9562, as versões de UUID asseguram que sistemas em todo o mundo interpretem identificadores de maneira uniforme sem necessidade de coordenação central. Embora qualquer UUID padrão possua fisicamente 128 bits (16 bytes) de comprimento e seja representado como uma string hexadecimal de 32 caracteres com 4 hífens (8-4-4-4-12), a organização interna desses 128 bits difere fundamentalmente conforme a versão. Saber a versão informa se um identificador contém um endereço físico MAC de rede, um timestamp em milissegundos, um hash criptográfico de namespace ou pura entropia pseudoaleatória.

Como Funcionam as Versões de UUID Internamente

As versões de UUID funcionam reservando faixas específicas de bits dentro do payload binário de 128 bits para transmitir metadados juntamente com os dados de identificação. Independentemente da versão, exatamente quatro bits (os bits 48 a 51 na ordem big-endian) são permanentemente reservados para armazenar o número da versão, codificado como um inteiro sem sinal de 1 a 8. Simultaneamente, entre dois e três bits (os bits 64 a 66) são dedicados ao campo de variante, definindo a disposição estrutural e a ordenação de bytes (endianness) de todo o registro. Como esses bits de metadados possuem posições estritamente fixadas, analisadores de software conseguem ler a versão e a variante exatas de qualquer UUID sem conhecimento prévio da aplicação geradora, do banco de dados ou da linguagem de programação.

Onde a Versão Fica Armazenada Dentro de um UUID?

Na representação em texto canônica de um UUID (formatada como xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx), a versão fica armazenada na 13.ª posição de caractere hexadecimal (o caractere M), correspondente ao primeiro caractere do terceiro grupo separado por hífens. Em termos binários, isso ocupa os bits 48 a 51 (os 4 bits mais significativos do octeto 6, denominado time_hi_and_version na especificação). Por exemplo, no UUID 550e8400-e29b-41d4-a716-446655440000, o terceiro bloco começa com o dígito 4, indicando Versão 4. Logo após o terceiro hífen, a 17.ª posição de caractere (o caractere N) codifica a variante em seus bits superiores. Quando N é 8, 9, a ou b (binário 1000 a 1011), o UUID cumpre estritamente o padrão universal IETF RFC 4122 / RFC 9562.

Comparação Completa: Versões de UUID de 1 a 8

As normas RFC 4122 e RFC 9562 formalizam oito versões distintas de UUID concebidas para diferentes cenários de computação: a Versão 1 combina um timestamp gregoriano de 60 bits com o endereço MAC de 48 bits do computador gerador; a Versão 2 (Segurança DCE) embute identificadores POSIX locais de usuário e grupo para tokens de segurança; a Versão 3 gera identificadores determinísticos aplicando hash MD5 sobre um UUID de namespace e um nome de entrada; a Versão 4 utiliza 122 bits de entropia pseudoaleatória criptograficamente segura (CSPRNG) para unicidade geral; a Versão 5 produz identificadores determinísticos idênticos aos da v3, porém empregando o algoritmo mais seguro SHA-1; a Versão 6 reordena os bits temporais gregorianos da v1 colocando os mais significativos primeiro para permitir ordenação lexicográfica em árvores B de bancos de dados; a Versão 7 codifica um timestamp Unix Epoch de 48 bits em milissegundos seguido de contador sequencial submilissegundo e bits de entropia aleatória, consagrando-se como o padrão moderno predileto para chaves primárias; e a Versão 8 oferece um contêiner padronizado para formatos personalizados, experimentais ou de fornecedores específicos fora das versões 1 a 7.

Versão de UUID vs. Variante de UUID: A Diferença Crítica

Desenvolvedores com frequência confundem versões de UUID com variantes, contudo elas desempenham papéis arquiteturais inteiramente diferentes. A variante define o layout binário geral, a interpretação dos bits e a linhagem histórica do identificador de 128 bits. Existem quatro variantes catalogadas: Variante 0 (retrocompatibilidade NCS, bit superior em 0), Variante 1 (padrão IETF RFC 4122 / RFC 9562, bits superiores em 10), Variante 2 (retrocompatibilidade Microsoft COM GUID, bits superiores em 110) e Variante 3 (reservada para definições futuras, bits superiores em 111). Dentro da Variante 1 (que abrange quase a totalidade dos identificadores modernos), o número de versão (1 a 8) especifica o algoritmo exato empregado para gerar os bits restantes. Em resumo, a variante determina a gramática do UUID, enquanto a versão define seu vocabulário interno.

Por que Conhecer a Versão do seu UUID é Crucial em Produção

Identificar a versão precisa de um UUID é vital para a performance de aplicações, segurança de dados e conformidade normativa. Primeiramente, utilizar UUID v1 em aplicações web modernas acarreta um sério risco de privacidade e segurança, visto que expõe permanentemente o endereço físico MAC da máquina servidora e revela o momento exato de criação para agentes externos. Em segundo lugar, o impacto em índices de bancos de dados varia drasticamente: inserir UUIDs v4 totalmente aleatórios em índices B-Tree clusterizados (como chaves primárias no PostgreSQL ou tabelas InnoDB no MySQL) gera fragmentação contínua do disco, divisão constante de páginas de memória e degradação acentuada de escrita. Em contrapartida, migrar de v4 para UUIDs v7 ou v6 ordenados no tempo proporciona velocidade de inserção comparável a inteiros sequenciais mantendo a unicidade distribuída. Detectar as versões de seus UUIDs viabiliza auditorias e migrações seguras.

Como Identificar Manualmente uma Versão de UUID (A Regra do 13.º Hex)

É possível descobrir a versão de qualquer UUID canônico aplicando "A Regra do 13.º Caractere Hexadecimal" sem necessidade de ferramentas de compilação. Localize sua string de 36 caracteres no formato padrão 8-4-4-4-12 com hífens. Ignore os dois primeiros blocos (os 8 primeiros caracteres e os 4 seguintes, somando 12 dígitos hexadecimais). Olhe diretamente para o primeiro caractere do terceiro bloco. Esse único caractere hexadecimal indica a versão exata do UUID: um dígito 1 indica UUID v1, 4 indica UUID v4, 7 indica UUID v7, e assim por diante. Em seguida, observe o primeiro caractere do quarto bloco: se for 8, 9, a ou b (ou maiúsculas A, B), o identificador é garantido como sendo um UUID padrão RFC 4122/9562 legítimo. Nossa ferramenta online automatiza essa inspeção instantaneamente, analisando todos os 128 bits para conferir nibbles de versão, máscaras de variante e validação de sintaxe.

Casos de Uso Práticos e Melhores Práticas na Engenharia

Na engenharia de software contemporânea, cada versão de UUID destaca-se em cenários arquiteturais bem definidos. O UUID v4 é a escolha padrão para tokens efêmeros, identificadores de sessão, chaves de redefinição de senha, parâmetros de estado OAuth e rastreamento distribuído onde ordem cronológica não é requerida nem desejada. O UUID v7 é o padrão áureo indiscutível para chaves primárias em bancos de dados relacionais, barramentos de eventos distribuídos e filas de mensagens onde entidades demandam ordenação temporal em milissegundos, alta localidade de índice e zero consultas de coordenação central. O UUID v5 é ideal para mapeamento determinístico, gerando IDs reprodutíveis a partir de nomes de domínio ou URLs em microsserviços. Por fim, os UUIDs Nil (00000000-0000-0000-0000-000000000000) atuam como valores nulos de inicialização em esquemas tipados, enquanto os UUIDs Max (ffffffff-ffff-ffff-ffff-ffffffffffff) servem como limites superiores em consultas de intervalo.

Perguntas Frequentes sobre Versões de UUID

Como posso saber qual a versão de um UUID apenas olhando para ele?

Você pode determinar a versão verificando o 13.º caractere hexadecimal de um UUID canônico de 36 caracteres (o primeiro dígito após o segundo hífen: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx). O caractere na posição M representa o número da versão (de 1 a 8). Por exemplo, em "550e8400-e29b-41d4-a716-446655440000", o dígito "4" no terceiro bloco indica que se trata de um UUID Versão 4.

O que acontece se um UUID tiver um dígito de versão diferente de 1 a 8?

Se o 13.º caractere hexadecimal for 0, 9 ou uma letra de "a" até "f" (com exceção do UUID Nil de todos os bits zerados e do UUID Max de todos os bits ligados), o identificador é considerado não padrão. Pode ser um formato proprietário, um hash corrompido ou um ID de sistema legado que não segue as especificações RFC 4122 nem RFC 9562.

Duas versões diferentes de UUID podem ter o mesmo formato visual?

Sim. Todas as versões padronizadas de UUID possuem exatamente a mesma estrutura física externa: 128 bits exibidos como 32 dígitos hexadecimais distribuídos por 4 hífens em um formato 8-4-4-4-12. A única diferença visual visível é o nibble de versão no caractere 13 e os bits de variante no caractere 17.

Qual a diferença entre o UUID versão 4 e a versão 7?

O UUID v4 é gerado com 122 bits de números pseudoaleatórios por meio de CSPRNG, não possuindo ordem cronológica natural e provocando fragmentação em índices de bancos de dados B-Tree. Já o UUID v7 embute um timestamp Unix de 48 bits em milissegundos no início do registro, seguido de entropia aleatória, unindo ordenação temporal sequencial a unicidade distribuída de alta velocidade.

Por que meu UUID tem um número de versão mas é sinalizado como inválido?

Um UUID válido deve atender a múltiplos critérios estruturais: conter exatamente 32 caracteres hexadecimais (0-9, a-f), possuir 4 hífens posicionados com precisão nas posições 8, 13, 18 e 23, e exibir bits de variante válidos no quarto bloco (geralmente 8, 9, a ou b). Se contiver caracteres estranhos ou tamanho divergente, será classificado como inválido mesmo que exiba um dígito na posição 13.

O que é o UUID Nil e qual é a sua versão?

O UUID Nil é um identificador especial padronizado na RFC 4122 §4.1.7 e RFC 9562 §5.9 onde todos os 128 bits estão configurados como zero (00000000-0000-0000-0000-000000000000). Ele não representa um algoritmo gerador ativo; seu nibble de versão é formalmente 0 e ele é universalmente reconhecido como marcador de identificador nulo ou vazio.

O que é o UUID Max introduzido na RFC 9562?

O UUID Max é um identificador especial formalizado na RFC 9562 §5.10 onde todos os 128 bits estão configurados como um (ffffffff-ffff-ffff-ffff-ffffffffffff). Ele possui o nibble de versão "f" e atua como valor sentinela oficial ou limite superior para ordenação e consultas de intervalo em bancos de dados.

Esta ferramenta envia meus UUIDs para algum servidor para detectar a versão?

Não. O FastUUIDGenerator realiza toda a detecção de versão, validação sintática e inspeção de bits 100% no seu navegador com JavaScript no cliente. Nenhum identificador, parâmetro ou log é transmitido pela rede ou armazenado em servidores externos, preservando sua total privacidade.