Os UUID permitem criar identificadores de 128 bits sem consultar um contador central para obter o próximo valor. Esta propriedade é útil em aplicações distribuídas, dispositivos que trabalham sem ligação e registos criados antes da inserção numa base de dados. Não significa, porém, que um identificador seja secreto ou que a sua presença autorize o acesso a um recurso.
Vamos usar o gerador e inspetor de UUID para verificar exemplos fixos e produzir pequenos lotes. O percurso distingue a versão 4, baseada em aleatoriedade, da versão 7, que incorpora informação temporal. Também mostra como reconhecer NIL e MAX e quais as perguntas que uma simples validação de formato nunca consegue responder.
Escolher a versão a partir das necessidades do sistema
UUID v4 utiliza dados aleatórios nos bits que não estão reservados para a versão e a variante. O formato não define um campo com a data de criação. UUID v7 coloca um timestamp Unix em milissegundos nos 48 bits mais significativos e combina os restantes bits disponíveis com aleatoriedade e mecanismos admitidos pela especificação para melhorar a monotonicidade.
A decisão deve considerar os formatos aceites pelas bibliotecas, pelos controladores e pelos consumidores da API. O interesse em ordenação temporal pode favorecer v7, mas é necessário confirmar como a base de dados armazena e compara os valores. O tipo de índice, a representação binária ou textual e a carga real influenciam o resultado.
Não prometas que v7 torna qualquer base de dados mais rápida, nem escolhas v4 apenas porque parece menos previsível. Ambas as versões podem aparecer publicamente em URLs e mensagens. O controlo de acesso deve continuar a verificar quem pode consultar ou alterar o registo, independentemente da dificuldade de adivinhar a sua chave.
Inspecionar valores fixos antes de gerar novos
Utiliza estes identificadores sem alterações:
550e8400-e29b-41d4-a716-446655440000
017f22e2-79b0-7cc3-98c4-dc0c0c07398f
00000000-0000-0000-0000-000000000000
ffffffff-ffff-ffff-ffff-ffffffffffff
O primeiro é reconhecido como UUID v4 e o segundo como UUID v7. O terceiro corresponde ao valor especial NIL, com todos os bits a zero; o quarto é MAX, com todos os bits a um. O inspetor distingue estes valores especiais em vez de lhes atribuir uma versão comum gerada pela ferramenta.
Altera o último caráter do primeiro exemplo para z. O resultado deve ser inválido, porque a representação admite algarismos hexadecimais e não letras arbitrárias. Este teste deteta uma alteração de formato; não procura o identificador numa base de dados nem verifica a existência de um registo associado.
Os valores gerados não são fixos. Ao criar três UUID v7, exige três linhas válidas da versão 7, mas não esperes um texto específico. Faz o mesmo com v4. Um teste correto verifica propriedades do resultado, como quantidade e versão, em vez de comparar aleatoriedade com uma captura anterior.
Gerar um lote e verificar a transferência
Abre a ferramenta, seleciona v4 e indica a quantidade três. Prime Gerar UUID. Os valores só são criados por esta ação, não ao apresentar a página ou alterar uma etiqueta. Confirma três linhas e copia o lote. O resultado anterior é limpo quando mudas opções, evitando que um lote v4 pareça corresponder a uma seleção v7 posterior.
Repete o procedimento com v7 e utiliza o inspetor independente para confirmar a versão de cada linha. Experimenta também os quatro exemplos fixos e a variante inválida terminada em z. A inspeção não substitui nem modifica o lote gerado, pelo que podes comparar os dois conjuntos sem misturar as operações.
A quantidade permitida vai de 1 a 1.000. Descarrega o ficheiro .txt e conta as linhas não vazias para confirmar que recebeste o lote completo. Mantém a ordem de geração se quiseres investigar como o teu armazenamento ordena v7. Utiliza sempre a mesma representação na comparação; misturar texto canónico e bytes reorganizados pode produzir conclusões enganadoras.
Ler versão e variante sem inventar garantias
O RFC 9562 define a representação canónica em grupos hexadecimais de 8-4-4-4-12 caracteres, além dos campos de versão e variante. Na versão 4, o dígito da versão é 4; na versão 7 é 7. A variante do RFC começa com os bits binários 10. Estes campos permitem reconhecer a disposição dos restantes bits.
Em v7, os primeiros 48 bits contêm milissegundos Unix. Excluindo versão e variante, existem 74 bits disponíveis para aleatoriedade ou combinações previstas para melhorar a ordenação dentro do mesmo milissegundo. Isso favorece a ordem temporal, mas não cria uma sequência universal de eventos entre máquinas com relógios diferentes.
A ferramenta delega a geração e a inspeção numa biblioteca UUID e utiliza aleatoriedade criptográfica do ambiente. Não substitui essa fonte por Math.random. Se a geração segura estiver indisponível, apresenta um erro. A inspeção observa apenas o valor final: não consegue demonstrar que um UUID recebido foi realmente produzido por um gerador seguro.
Perceber o alcance de um resultado inválido ou válido
Um identificador pode falhar por ter um número incorreto de caracteres, hífenes deslocados, caracteres não hexadecimais, variante não suportada ou versão não reconhecida. Copia a forma canónica sem prefixos ou chavetas, salvo quando o protocolo do destinatário os admitir explicitamente. Remover espaços exteriores é diferente de alterar os caracteres que fazem parte do identificador.
Um resultado válido apenas confirma propriedades do formato. Não prova existência, propriedade, atualidade, unicidade numa tabela ou autorização. Consulta o armazenamento para verificar existência e aplica restrições de unicidade onde uma colisão teria consequências. O tratamento de conflitos na inserção continua a ser necessário, mesmo que a probabilidade de colisão seja muito baixa.
Se surgir um erro de aleatoriedade segura, utiliza um navegador compatível e um contexto adequado. Não resolvas o problema escrevendo cadeias aleatórias à mão. Para quantidades fora do intervalo ou fracionárias, corrige a entrada. A ferramenta rejeita o pedido em vez de gerar parcialmente um lote cujo tamanho pudesse parecer correto à primeira vista.
Definir uma política para além da geração
Escolhe uma representação consistente: texto canónico ou 16 bytes, conforme o suporte da base de dados e do controlador. Verifica a ordem dos bytes utilizada por cada componente. Dois sistemas podem aceitar um UUID válido e ainda assim ordená-lo de maneira diferente se converterem a representação de formas distintas.
Não uses UUID como palavra-passe, chave de API, token de acesso ou prova de que alguém pode consultar um recurso. V7 revela informação temporal; a opacidade de v4 também não constitui autenticação. Mantém os segredos em mecanismos próprios e verifica as permissões em cada operação. Um URL difícil de adivinhar não substitui estas verificações.
Documenta o tratamento de NIL e MAX. Podem servir como valores sentinela quando um protocolo lhes atribui significado, mas convenções locais não documentadas criam ambiguidades. Define se são reservados, proibidos ou aceites em cada campo. Para compreender os milissegundos presentes em v7, consulta o guia de timestamp Unix, mantendo separadas a interpretação temporal e a validação de UUID.
Não confundir ordem temporal com uma sequência global
O gerador produz v4 e v7 em lotes limitados. O inspetor reconhece texto UUID e valores especiais, mas não reserva identificadores, não consulta um registo mundial e não garante ausência de colisões. Não cria todas as versões existentes nem atribui significado aos dados associados ao identificador.
A ordenação de v7 também tem limites. Vários valores podem partilhar o mesmo milissegundo, os relógios podem recuar e bibliotecas diferentes podem utilizar estratégias distintas. Se o processo exige uma ordem total de acontecimentos, um UUID isolado não substitui números de sequência ou outro mecanismo de coordenação apropriado.
A ferramenta processa os valores no navegador, mas um ficheiro descarregado, uma captura de ecrã ou um registo de diagnóstico continua a poder relacionar identificadores com pessoas ou recursos. Usa exemplos sintéticos em testes públicos. O guia de privacidade para ferramentas de desenvolvimento ajuda a avaliar essas cópias sem tratar todos os identificadores como se fossem segredos.
Validar a escolha antes de a adotar
Regista por que motivo escolheste v4 ou v7: compatibilidade, criação distribuída ou interesse em ordenação temporal. Confirma o suporte das bibliotecas e do armazenamento reais, sem generalizar resultados de outro sistema. Mantém geração criptográfica, representação consistente e regras de unicidade na camada responsável pelos dados.
Nos exemplos deste guia, reconhece as versões 4 e 7, distingue NIL e MAX e rejeita o valor terminado em z. Nos lotes novos, verifica quantidade e versão, não um texto esperado. Descarrega um lote e confirma uma linha por identificador, preservando a ordem quando essa característica fizer parte do teste.
Por fim, testa inserção, serialização, leitura e ordenação com o controlador utilizado em produção. Define o comportamento perante conflitos e valores especiais. Revê o controlo de acesso de forma independente. Estas verificações dão significado prático ao identificador sem lhe atribuir propriedades que nem o formato nem o gerador podem garantir.
Fontes: RFC 9562: Universally Unique IDentifiers, documentação da biblioteca uuid e especificação Web Cryptography API.