MiServe DevTools

Os seus autocolantes

Fixe aqui as ferramentas. Ficam guardadas neste navegador.

Gerador de UUID, ULID e Nano ID

Gere em lote UUID v4, UUID v7 ordenados no tempo, ULIDs e Nano IDs, e leia a versão e o timestamp contidos num ID.

Tipo
Variante
Timestamp (UTC)
A sua hora local
Tempo Unix em milissegundos

Funciona no seu navegador. Nada do que cola é enviado.

Sobre esta ferramenta

Que ID escolher

O UUID versão 4 é composto por 122 bits aleatórios. Não diz nada sobre quando nem onde foi criado, e é a escolha habitual quando um ID só tem de ser único. O UUID versão 7, normalizado no RFC 9562 em 2024, coloca um timestamp Unix de 48 bits em milissegundos à frente de 74 bits aleatórios. Os IDs novos ficam ordenados depois dos mais antigos, por isso as linhas inseridas ao mesmo tempo ficam juntas num índice da base de dados, com o custo de revelar a hora de criação a quem vir o ID.

Um ULID segue a mesma ideia com outra forma de escrita: 48 bits de tempo e 80 bits aleatórios em 26 caracteres de Crockford Base32, sem distinção entre maiúsculas e minúsculas e sem hífenes. Um Nano ID é uma string aleatória com o comprimento e o alfabeto que escolher. O valor predefinido, 21 caracteres de 64 símbolos seguros para URLs, dá 126 bits, um pouco mais do que um UUID versão 4, numa string mais curta.

Quão único, e quão secreto

Em teoria, os IDs aleatórios podem colidir. Na versão 4 teria de gerar cerca de 2,7 triliões (2,7 × 10^18) de UUIDs até a probabilidade de uma única repetição chegar a metade, e é por isso que as aplicações os tratam como únicos. Um Nano ID mais curto ou um alfabeto pequeno reduzem essa margem: a linha por baixo das opções mostra quantos bits aleatórios dá a sua escolha.

Um ID é um identificador, não um segredo. As versões 1, 6 e 7 e os ULIDs revelam quando foram criados, e o RFC 9562 desaconselha usar um UUID como prova de permissão. Para um link de reposição de palavra-passe, uma sessão ou uma chave de API, use um token aleatório de pelo menos 128 bits e guarde no servidor apenas um hash dele.

Ler um UUID

Na forma habitual xxxxxxxx-xxxx-Vxxx-Nxxx-xxxxxxxxxxxx, o dígito V é a versão e os primeiros bits de N são a variante: 8, 9, a ou b para a estrutura RFC 9562 que quase todos os UUIDs usam. As versões 1 e 6 guardam uma contagem de 60 bits de intervalos de 100 nanossegundos desde 15 de outubro de 1582, juntamente com um ID de nó, que originalmente era o endereço MAC da placa de rede. A versão 7 guarda milissegundos Unix. As versões 3 e 5 são hashes de um nome e a versão 4 é aleatória, por isso não têm nada para descodificar.

Os primeiros dez caracteres de um ULID são o seu timestamp. A análise também aceita UUIDs sem hífenes, entre chavetas ou com o prefixo urn:uuid:.

Como esta ferramenta os gera

Todos os bits aleatórios vêm de crypto.getRandomValues, o gerador de números aleatórios criptográfico do navegador. Nada é pedido a um servidor e nada é guardado.

Os UUIDs versão 7 gerados no mesmo milissegundo mantêm o timestamp e somam um incremento aleatório aos 74 bits aleatórios, que é o método monotónico descrito no RFC 9562, por isso um lote fica sempre ordenado pela ordem em que foi gerado. Os ULIDs gerados no mesmo milissegundo somam um à parte aleatória, como descreve a especificação ULID. Essa ordem vale para os IDs desta página. IDs gerados em máquinas diferentes no mesmo milissegundo não ficam em nenhuma ordem definida. Os caracteres dos Nano IDs são escolhidos descartando os bytes aleatórios que ficam fora do alfabeto, por isso todos os símbolos são igualmente prováveis.

Perguntas

Devo usar UUID v4 ou UUID v7 como chave primária da base de dados?

A versão 7 é a mais adequada para chave primária quando quer que as linhas novas fiquem próximas umas das outras no índice e não se importa que o ID mostre a hora de criação. A versão 4 é a escolha quando o ID não pode revelar nada. Ambas têm 128 bits e cabem na mesma coluna uuid.

Dois UUIDs gerados podem ser iguais?

É possível, mas demasiado improvável para ser tido em conta. Um UUID versão 4 tem 122 bits aleatórios, por isso são precisos cerca de 2,7 triliões (2,7 × 10^18) deles até uma única repetição ser tão provável como não acontecer. O risco real é uma fonte de aleatoriedade fraca, e é por isso que esta ferramenta usa o gerador criptográfico do navegador.

Um ULID é o mesmo que um UUID v7?

Não, mas os dois são parecidos. Ambos têm 128 bits e começam com um timestamp de 48 bits em milissegundos, por isso os bits de um ULID cabem numa coluna UUID de 128 bits. Um ULID não tem campos de versão nem de variante, por isso o RFC 9562 não o define como UUID, e a sua forma textual usa Crockford Base32 onde um UUID usa hexadecimal.

É possível saber quando um UUID foi criado?

Sim, nas versões 1, 6 e 7 de UUID e nos ULIDs, que têm um timestamp. Cole o valor no campo de análise para o ver como data. Um UUID versão 4 é aleatório e não contém nenhuma hora.

Mais ferramentas de Hash