search

Found

info Visão geral

Gere um ULID de 26 caracteres em Crockford Base32 ou cole um para decodificar o timestamp de 48 bits, o aleatório de 80 bits, a data ISO e a validade.

📘 Como usar

  1. Clique em Gerar para criar um ULID de 26 caracteres ou cole um existente no campo de entrada
  2. Veja a visão por segmentos, onde os 10 primeiros caracteres são o timestamp e os 16 últimos são aleatórios
  3. Consulte o painel decodificado com o timestamp em milissegundos, a data ISO 8601 UTC e a validade

Gerador e decodificador de ULID

Crockford Base32 (0-9 e A-Z sem I, L, O, U), 26 caracteres. Não distingue maiúsculas.

Visão por segmentos

Timestamp (10 caracteres) Aleatório (16 caracteres)
Status

Carga decodificada

Timestamp (ms)
Data (ISO 8601 UTC)
Parte temporal (10 car.)
Parte aleatória (16 car.)
Aleatório (hex)

※ Um ULID tem 10 caracteres (timestamp de 48 bits) + 16 caracteres (aleatório de 80 bits), totalizando 26. Crockford Base32 exclui I, L, O e U.

※ Como o timestamp vem primeiro, a ordem alfabética dos ULIDs coincide com a ordem cronológica.

Article

Gerador e decodificador de ULID | Identificadores ordenáveis por tempo

Gere um ULID de 26 caracteres em Crockford Base32 com um clique, ou cole um para extrair o horário de criação. Os 10 primeiros caracteres guardam um timestamp de 48 bits em milissegundos e os 16 últimos guardam 80 bits de aleatoriedade, então o painel decodificado mostra o valor em milissegundos, a data ISO 8601 UTC, a cauda aleatória em hexadecimal e se a string está bem formada.

💡 Sobre esta ferramenta

Um ULID parece um bloco opaco de 26 caracteres, mas metade dessa string é um timestamp legível escondido à vista de todos. O detalhe é que esse timestamp está em Crockford Base32, não em hexadecimal nem em decimal, então olhar para 01ARZ3NDEKTSV4RRFFQ69G5FAV não revela quando ele foi criado. Decodificá-lo na mão significa mapear cada um dos dez primeiros caracteres para um valor de 5 bits, acumulá-los em base 32 e converter o resultado em uma data.

Esta ferramenta faz essa ida e volta nos dois sentidos. Ao colar um ULID, ela valida o comprimento, rejeita qualquer caractere fora do alfabeto Crockford (que omite de propósito I, L, O e U para evitar confusões visuais), separa o timestamp da cauda aleatória e renderiza o horário de criação como uma string ISO 8601. A visão por segmentos pinta a metade temporal e a aleatória em cores diferentes, de modo que a estrutura fica clara num relance, algo que uma simples chamada de biblioteca não oferece.

🧐 Perguntas frequentes

Qual a diferença para um UUID v4? Um UUID v4 são 122 bits de aleatoriedade pura, sem ordem inerente. Um ULID coloca na frente um timestamp de 48 bits em milissegundos, então dois ULIDs criados em momentos diferentes se ordenam cronologicamente por simples comparação de strings. UUID v7 adicionou depois um prefixo de tempo semelhante; o ULID o carrega desde a sua especificação de 2016.

Por que a ordem alfabética coincide com a ordem temporal? Porque os bits mais significativos vêm primeiro. O timestamp ocupa os 10 caracteres iniciais, então ordenar as strings ULID alfabeticamente coloca as mais antigas na frente. Isso as torna convenientes como chaves primárias de banco de dados, onde inserções ordenadas mantêm os índices B-tree compactos.

O que é Crockford Base32? É um alfabeto de base 32 que descarta as letras I, L, O e U. I e L são excluídas para não se confundir com 1, O com 0, e U para evitar formar palavras impróprias. Restam os dígitos 0-9 e 22 letras maiúsculas, 32 símbolos no total, cada um codificando 5 bits.

Dois ULIDs podem colidir? Dentro do mesmo milissegundo a colisão depende dos 80 bits aleatórios, que dão cerca de 1,2 × 10^24 combinações. Um choque prático é astronomicamente improvável. A aleatoriedade aqui vem do crypto.getRandomValues do navegador, e não de um gerador pseudoaleatório fraco.

Diferencia maiúsculas de minúsculas? Não. A decodificação Crockford é insensível a maiúsculas, então a entrada é normalizada para maiúsculas antes da validação. Você pode colar um ULID em minúsculas e ainda obter uma decodificação limpa.

📚 Curiosidades: por que 26 caracteres

O ULID foi publicado por Alizain Feerasta em 2016 como resposta ao fato de o UUID v4 encaixar mal em bancos de dados ordenados, e o formato tem algumas peculiaridades deliberadas que vale a pena conhecer. O campo de timestamp tem 48 bits, o que cobre datas até o ano 10889 antes de estourar, então não é um problema que você vá encontrar. A codificação ajusta o valor para exatamente 26 caracteres Crockford: 48 bits de timestamp e 80 de aleatoriedade somam 128 no total, a mesma largura de um UUID, o que não é por acaso, já que foi projetado para caber na mesma coluna de 128 bits. O fato de terminar em 26 caracteres, e não nos 25 que você esperaria de 128 bits divididos por 5, ocorre porque o primeiro caractere usa apenas 3 dos seus 5 bits, razão pela qual um ULID válido nunca começa com um caractere superior a 7.