O que é um UUID?
Um UUID (Identificador Único Universal) é um rótulo de 128 bits formatado como 32 dígitos hexadecimais divididos em cinco grupos por hífens, por exemplo 550e8400-e29b-41d4-a716-446655440000. UUIDs versão 4 são gerados aleatoriamente, dando uma chance astronomicamente baixa de dois valores idênticos serem produzidos.
UUIDs são amplamente usados como chaves primárias de banco de dados, tokens de sessão e identificadores únicos em sistemas distribuídos onde uma autoridade central não pode atribuir IDs. Esta ferramenta usa o crypto.randomUUID() embutido no navegador, que é criptograficamente seguro.
Como gerar um UUID v4?
Para gerar um UUID v4, 128 bits são preenchidos com valores criptograficamente aleatórios, e então 6 bits específicos são fixados para marcar a versão e a variante, para que o valor ainda corresponda ao formato padrão de UUID. Formato de exemplo: 550e8400-e29b-41d4-a716-446655440000, onde o "4" logo após o segundo hífen sempre marca a versão 4.
Passos para gerar um UUID versão 4
- Gere 128 bits aleatórios (16 bytes) usando um gerador de números aleatórios criptograficamente seguro.
- Defina os 4 bits mais significativos do 7º byte como 0100 em binário, o que marca isso como versão 4 — por isso o primeiro caractere do terceiro grupo é sempre "4".
- Defina os 2 bits mais significativos do 9º byte como 10 em binário, o que marca a variante padrão — isso faz o primeiro caractere do quarto grupo ser sempre 8, 9, a ou b.
- Formate os bits restantes como 32 dígitos hexadecimais.
- Insira hífens para dividir os dígitos em grupos de 8-4-4-4-12 caracteres, produzindo a string final do UUID.
Estrutura do UUID v4
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx, onde x é qualquer dígito hex aleatório e y é um de 8, 9, a ou b
- Comprimento total = 36 caracteres incluindo 4 hífens (32 dígitos hex + 4 hífens)
- Nibble de versão = sempre "4" (marca a versão 4, ou seja, geração aleatória)
- Nibble de variante = sempre 8, 9, a ou b (marca a variante padrão RFC)
Exemplo de formato de UUID v4 (ilustrativo — cada geração é aleatória)
| Grupo | Comprimento | Segmento de exemplo |
|---|
| time_low | 8 dígitos hex | 550e8400 |
| time_mid | 4 dígitos hex | e29b |
| version + time_hi | 4 dígitos hex (começa com 4) | 41d4 |
| variant + clock_seq | 4 dígitos hex (começa com 8-b) | a716 |
| node | 12 dígitos hex | 446655440000 |
Perguntas frequentes
Quão improvável é que dois valores de UUID v4 colidam?
Um UUID v4 tem 122 bits aleatórios (128 no total menos 6 bits fixos de versão/variante), dando cerca de 5,3 x 10^36 valores possíveis. Gerar um bilhão de UUIDs por segundo durante um bilhão de anos ainda deixaria a chance de qualquer colisão desprezivelmente pequena, por isso os UUIDs são tratados como efetivamente únicos sem coordenação central.
Por que todo UUID v4 tem um 4 na mesma posição?
Esse caractere não é aleatório — é fixado pelo padrão para marcar o UUID como versão 4 (gerado aleatoriamente), para que softwares que leem o ID possam identificar qual versão de UUID e algoritmo de geração o produziu, mesmo sem metadados adicionais.
Um UUID é a mesma coisa que um GUID?
GUID (Globally Unique Identifier) é o nome que a Microsoft dá ao mesmo formato de identificador de 128 bits padronizado como UUID. Os dois termos descrevem a mesma estrutura subjacente e geralmente são usados de forma intercambiável na prática, embora algumas ferramentas legadas da Microsoft tenham pequenas diferenças de formatação.
UUIDs são adequados como chaves primárias de banco de dados?
O UUID v4 funciona bem quando os IDs precisam ser gerados de forma independente em vários servidores sem coordenação, evitando o gargalo de um único contador auto-incremental. A contrapartida é que UUIDs aleatórios são maiores que inteiros e, diferente de IDs sequenciais, podem prejudicar a localidade de índice em alguns bancos de dados sob carga pesada de inserção.
Esta ferramenta gera UUIDs versão 4 (aleatórios) usando o crypto.randomUUID() embutido no navegador, que é criptograficamente seguro; ela não gera outras versões de UUID, como v1 (baseado em timestamp) ou v5 (hash baseado em nome).
Sources: RFC 9562 — Universally Unique IDentifiers (UUIDs)