Utilia

Gerador de ULID e Nano ID

Gera ULIDs (com opção monotónica) ou Nano IDs com alfabeto e comprimento à escolha, em lote, descodifica a data de um ULID e vê o risco de colisão.

Tipo de ID

Descodificar um ULID

Como gerar ULIDs ou Nano IDs

  1. Em Tipo de ID, escolhe ULID (ordenável) ou Nano ID (curto).
  2. Define a Quantidade (1 a 1000). São gerados dez IDs logo que a página carrega.
  3. Para ULIDs, mantém Monotónico (estritamente crescente) marcado para que os IDs criados no mesmo milissegundo continuem ordenados, e marca Minúsculas se o teu sistema as preferir.
  4. Para Nano IDs, escolhe um Alfabeto (ou Personalizado… e escreve os teus caracteres) e um Comprimento.
  5. Clica em Gerar e depois em Copiar para copiar a lista, ou em Transferir para obter um ficheiro .txt (um ID por linha).

Para leres a data escondida num ULID, cola-o em Descodificar um ULID ou clica em Descodificar o primeiro ID. A ferramenta mostra o carimbo temporal em UTC (ISO 8601), na tua hora local e em milissegundos Unix, bem como a parte aleatória de 80 bits em hexadecimal.

O que é um ULID?

Um ULID (Universally Unique Lexicographically Sortable Identifier) é um identificador de 128 bits escrito com 26 caracteres em Crockford Base32, por exemplo 01ARZ3NDEKTSV4RRFFQ69G5FAV. Os primeiros 10 caracteres codificam um carimbo temporal de 48 bits em milissegundos (que chega até ao ano 10889); os últimos 16 caracteres são 80 bits aleatórios. O Crockford Base32 deixa de fora I, L, O e U para evitar confusões, e a descodificação não distingue maiúsculas de minúsculas.

Como o tempo vem primeiro, os ULIDs ordenam-se alfabeticamente pela ordem de criação. Isso torna-os boas chaves primárias: as novas linhas são acrescentadas no fim de um índice B-tree em vez de ficarem espalhadas como os UUIDs aleatórios, e podes ordenar pelo ID em vez de por uma coluna de data separada.

Modo monotónico. Dentro do mesmo milissegundo, ULIDs aleatórios ficariam por ordem aleatória. Com a opção monotónica, a ferramenta segue a especificação ULID: quando vários IDs são criados no mesmo milissegundo, mantém o carimbo temporal e soma 1 à parte aleatória anterior. Se o relógio andar para trás, mantém o último carimbo temporal, para que a sequência nunca diminua.

Lembra-te de que um ULID revela quando foi criado. Não o uses onde essa informação for sensível.

O que é um Nano ID?

O Nano ID é um identificador aleatório compacto. Por omissão tem 21 caracteres de um alfabeto de 64 caracteres seguro para URL (A–Z a–z 0–9 _ -), o que dá 126 bits aleatórios, semelhante a um UUID v4 (122 bits) com menos caracteres. Podes escolher hexadecimal, só algarismos, minúsculas e algarismos, alfanumérico, um conjunto sem caracteres parecidos (sem 0/O, 1/l/I, 5/S…) para códigos que as pessoas escrevem à mão, ou o teu próprio alfabeto de 2 a 256 caracteres. Os caracteres repetidos num alfabeto personalizado são removidos, porque tornariam alguns caracteres mais prováveis.

Cada carácter é sorteado com crypto.getRandomValues usando amostragem por rejeição, por isso não há enviesamento de módulo.

Probabilidade de colisão

O painel Probabilidade de colisão aplica o limite do paradoxo do aniversário. Com um alfabeto de tamanho A e um comprimento L, há N = A^L IDs possíveis. Depois de k IDs, a probabilidade de haver pelo menos um duplicado é de cerca de 1 − e^(−k²/2N), por isso o risco de 1% é atingido ao fim de k ≈ √(2N · ln(1/0,99)) IDs. Introduz os IDs gerados por hora para veres quanto tempo isso levaria. Com as definições predefinidas e 1000 IDs por hora, o risco de 1% leva cerca de 149 mil milhões de anos; com 8 caracteres hexadecimais bastam cerca de 9300 IDs.

Perguntas frequentes

ULID ou UUID?

Ambos têm 128 bits. Um ULID é mais curto de escrever (26 caracteres em vez de 36) e ordena-se pelo tempo. A versão 7 do UUID oferece agora a mesma ordenação temporal no formato UUID padrão, que as bases de dados costumam guardar de forma nativa. Escolhe UUID v7 se a tua stack o suportar, ou ULID se quiseres uma string compacta e legível.

Os ULIDs e os Nano IDs são suficientemente seguros para tokens?

Os Nano IDs com o alfabeto e o comprimento predefinidos têm 126 bits aleatórios de um gerador criptográfico, o que chega para ligações impossíveis de adivinhar. Os ULIDs só têm 80 bits aleatórios e, no modo monotónico, IDs consecutivos diferem em uma unidade, por isso não uses ULIDs como segredos.

Posso encurtar um Nano ID?

Sim, mas o risco de colisão cresce muito depressa. Consulta o valor IDs para 1% de probabilidade de duplicado para o teu comprimento e alfabeto antes de confiares num ID curto.

Porque é que o descodificador rejeita o meu ULID?

Um ULID tem de ter exatamente 26 caracteres, usar só caracteres Crockford Base32 e começar por 0 a 7 (um primeiro carácter maior ultrapassaria os 128 bits).

Os IDs ficam guardados ou são enviados para algum lado?

Não. São gerados no teu navegador e desaparecem quando sais da página.