AZ Tools

Decodificador ULID (marca de tempo e aleatoriedade)

Desenvolvimento

Um ULID é um identificador de 26 caracteres ordenável lexicograficamente: os primeiros 10 caracteres são uma marca de tempo de 48 bits em milissegundos e os últimos 16 são 80 bits de aleatoriedade, tudo em Base32 de Crockford. Como o tempo fica nos bits altos, os ULIDs ordenam em ordem de criação — exatamente por isso as pessoas os usam em vez de UUIDs aleatórios. Este decodificador separa um ULID: lê a marca de tempo e a mostra como UTC ISO, um relativo "há x" e milissegundos de época crus, e mostra a parte aleatória em Base32 de Crockford e em hex. A decodificação não diferencia maiúsculas e é tolerante com os confusáveis clássicos de Crockford — I e L são lidos como 1, O como 0 — e valida o comprimento, o alfabeto e que a marca de tempo não estoure os 48 bits (o primeiro caractere deve ser 0–7). Tudo roda localmente; nada é enviado.

Canônico01ARZ3NDEKTSV4RRFFQ69G5FAV
Marca de tempo (UTC)2016-07-30T23:54:10.259Z
Relativohá 9y 11mo
Época ms1469922850259
Aleatoriedade (Base32)TSV4RRFFQ69G5FAV
Aleatoriedade (hex)0xd6764c61efb99302bd5b

Primeiros 10 = marca de 48 bits em ms, últimos 16 = 80 bits de aleatoriedade. Base32 de Crockford: I/L→1, O→0, sem diferenciar maiúsculas.

Como usar

  1. Cole um ULID (26 caracteres, ex.: 01ARZ3NDEKTSV4RRFFQ69G5FAV).
  2. Leia a marca de tempo de criação (UTC, relativa e ms de época).
  3. Copie a marca de tempo ou a aleatoriedade em Crockford ou hex conforme necessário.

Perguntas frequentes

Como um ULID codifica o tempo?
Os primeiros 10 caracteres Base32 de Crockford guardam uma contagem de 48 bits de milissegundos desde a época Unix (1970-01-01). 48 bits cobrem datas até o ano 10889, então o primeiro caractere só pode ser 0–7; algo maior estouraria e é rejeitado como inválido. Os 16 caracteres restantes são 80 bits de aleatoriedade.
Por que a decodificação não diferencia maiúsculas?
Os ULIDs usam Base32 de Crockford, projetada para ser amigável: não diferencia maiúsculas e trata as letras visualmente ambíguas I e L como 1 e O como 0. Esta ferramenta as normaliza antes de decodificar, então um ULID digitado em minúsculas ou com um O no lugar de um zero ainda decodifica corretamente.
Como um ULID difere de um UUID?
Ambos são IDs de 128 bits, mas um ULID é codificado como 26 caracteres Base32 ordenáveis com a marca de tempo nos bits altos, então uma lista de ULIDs já está em ordem de criação. Um UUID aleatório (v4) não carrega tempo e não ordena de forma útil; o UUID v7 é a resposta do padrão à mesma necessidade. Para esses, use o inspetor de UUID.
A marca de tempo é exata?
Sim — a marca de tempo em milissegundos é guardada diretamente no ULID, então a hora de criação é exata ao milissegundo, supondo que o relógio do gerador estivesse correto. O tempo relativo é calculado contra o relógio atual do seu dispositivo.

Ferramentas relacionadas