Gerador de UUID v3, v4, v5, v6 e v7
O gerador de UUID cria identificadores únicos nas versões 3, 4, 5, 6 e 7. Cada versão resolve um problema diferente, e escolher errado custa desempenho de banco de dados ou colisão de chave.
Qual versão usar
A v4 é aleatória e é o padrão para identificador de uso geral. A v7, definida pela RFC 9562, também é aleatória mas começa com um timestamp em milissegundos, então ordena por tempo. A v3 e a v5 são determinísticas: o mesmo nome dentro do mesmo namespace sempre gera o mesmo UUID. A v6 é uma reordenação da v1 para ficar ordenável.
Na prática: precisa só de identificador único, use v4. Vai ser chave primária de tabela grande, prefira v7. Precisa que o mesmo dado gere sempre o mesmo id, use v5.
Por que v7 importa em banco de dados
Chave primária aleatória espalha inserções por toda a árvore do índice. Cada insert toca uma página diferente, o cache do banco perde eficiência e o índice fragmenta. Com v7 os valores crescem no tempo, então as inserções vão para o fim do índice, que é o caso que todo B-tree otimiza.
Em MySQL com InnoDB o efeito é mais forte, porque a tabela é fisicamente ordenada pela chave primária: id aleatório causa divisão de página constante. Em PostgreSQL o impacto é menor, mas ainda existe no índice.
O custo do v7 é que ele revela quando o registro foi criado. Se o identificador é público e essa informação for sensível, prefira v4.
RFC 9562 substituiu a RFC 4122
As versões 1 a 5 vinham da RFC 4122, de 2005. A RFC 9562, de 2024, a tornou obsoleta e acrescentou v6, v7 e v8. Se você está lendo documentação que só menciona v1 a v5, ela é anterior a essa atualização.
A aleatoriedade da v4 e da v7 aqui vem de crypto.getRandomValues, o gerador criptográfico do navegador, e não de Math.random. A v5 usa SHA-1 e a v3 usa MD5, ambos aplicados sobre namespace mais nome.
Nada do que você cola aqui sai do seu navegador. O processamento é todo local, em JavaScript, sem envio para servidor, sem log e sem armazenamento.
Perguntas frequentes
Qual a diferença entre UUID v4 e v7?
A v4 é totalmente aleatória. A v7 começa com um timestamp em milissegundos, então UUIDs gerados em sequência ficam ordenados. Isso mantém a inserção no fim do índice do banco em vez de espalhar por toda a árvore.
UUID v4 pode repetir?
Na prática não. São 122 bits aleatórios. A probabilidade de colisão só se torna relevante depois de bilhões de bilhões de gerações, o que está muito além de qualquer aplicação real.
Quando usar UUID v5 em vez de v4?
Quando você precisa que a mesma entrada produza sempre o mesmo identificador, por exemplo para derivar um id estável a partir de uma URL ou de um e-mail sem guardar um mapeamento.
UUID v7 vaza informação?
Vaza o instante de criação, que está no início do valor em texto claro. Para identificador interno isso raramente importa; para identificador público de recurso sensível, prefira v4.
A RFC 4122 ainda vale?
Foi tornada obsoleta pela RFC 9562 em 2024. As versões 1 a 5 continuam idênticas, então nada quebrou, mas as versões 6, 7 e 8 só existem na especificação nova.
Referências
- RFC 9562 (Universally Unique IDentifiers)A especificação vigente, que define v6, v7 e v8 além de reeditar as anteriores.
- RFC 4122 (obsoleta)A especificação anterior, ainda citada em muita documentação de biblioteca.
- MDN: crypto.getRandomValues()A fonte de aleatoriedade usada pela v4 e pela v7 aqui.