Gerador de ULID Online

Gere de 1 a 1.000 ULIDs válidos, com opção monotônica, em texto ou JSON. Decodifique um ULID para ver a data e a hora embutidas. Grátis e no navegador.

Gerador de ULID online

Escolha a quantidade e clique em Gerar ULID. Para descobrir quando um ULID foi criado, cole-o no campo Decodificar um ULID.

Decodificar um ULID

Os ULIDs são gerados no seu navegador com um gerador criptográfico; nada é enviado a servidores.

O que é ULID?

ULID (Universally Unique Lexicographically Sortable Identifier) é um identificador de 128 bits, do mesmo tamanho de um UUID, mas escrito em apenas 26 caracteres e feito para ficar em ordem cronológica quando ordenado como texto. A especificação divide os 128 bits em duas partes:

 01ARZ3NDEK      TSV4RRFFQ69G5FAV
|----------|    |----------------|
   tempo            aleatório
  48 bits            80 bits
10 caracteres     16 caracteres
  • Tempo (48 bits): o instante da criação em milissegundos desde 01/01/1970 UTC (o timestamp Unix). Cabe até o ano 10889.
  • Aleatório (80 bits): sorteado a cada ULID, de preferência por uma fonte criptográfica. São 2⁸⁰ ≈ 1,21 × 10²⁴ combinações por milissegundo.

O ULID do exemplo acima, 01ARZ3NDEKTSV4RRFFQ69G5FAV, carrega o timestamp 1469922850259, ou seja, 30/07/2016 às 20:54:10,259 no horário de Brasília (23:54:10.259 UTC). Cole-o no decodificador para conferir.

O alfabeto: Base32 de Crockford

Cada caractere representa 5 bits e vem deste alfabeto de 32 símbolos:

0123456789ABCDEFGHJKMNPQRSTVWXYZ

As letras I, L, O e U ficam de fora para evitar confusão com 1 e 0 (e palavras acidentais). O ULID não diferencia maiúsculas de minúsculas, não tem hifens nem caracteres especiais e pode ir direto numa URL. Atenção: esse alfabeto não é o do Base32 da RFC 4648 (A–Z e 2–7), usado pelo nosso Base32 Encode/Decode.

Por que o primeiro caractere vai só até 7?

Vinte e seis caracteres de 5 bits somam 130 bits, dois a mais que os 128 do ULID. Por isso o primeiro caractere só pode usar 3 bits, de 0 a 7. O maior ULID válido é 7ZZZZZZZZZZZZZZZZZZZZZZZZZ; qualquer texto que comece com 8 ou mais deve ser rejeitado — é o que o decodificador desta página faz.

O que é a opção monotônica?

Sem ela, dois ULIDs criados no mesmo milissegundo têm a mesma parte de tempo e partes aleatórias independentes: a ordem entre eles é imprevisível. No modo monotônico, previsto na especificação, o gerador guarda o último valor e, se o milissegundo não mudou, apenas soma 1 à parte aleatória:

01BX5ZZKBKACTAV9WEVGEMMVRZ
01BX5ZZKBKACTAV9WEVGEMMVS0
01BX5ZZKBKACTAV9WEVGEMMVS1

Assim, uma lista gerada de uma vez já sai em ordem crescente. A garantia vale para um mesmo gerador: aqui, para os ULIDs criados nesta página enquanto ela estiver aberta. Dois servidores gerando em paralelo continuam sem ordem garantida dentro do mesmo milissegundo.

ULID vs UUID

ULIDUUID v4UUID v7
Tamanho128 bits128 bits128 bits
Texto26 caracteres36 caracteres36 caracteres
Ordenável por dataSimNãoSim
Tempo embutido48 bits (ms)Não tem48 bits (ms)
Bits aleatórios8012274
PadrãoEspecificação aberta (ulid/spec)RFC 9562RFC 9562

O ULID e o UUID v7 resolvem o mesmo problema: chaves primárias aleatórias (como o UUID v4) espalham as inserções pelo índice do banco de dados, enquanto identificadores que começam pelo tempo são gravados em sequência. Se o seu banco ou linguagem já tem um tipo uuid nativo, o UUID v7 costuma encaixar melhor; se você quer um texto mais curto, sem hifens e amigável para URLs, o ULID é uma boa escolha. Como ambos têm 128 bits, dá para guardar um ULID numa coluna uuid ou BINARY(16) — o decodificador mostra os 128 bits no formato de UUID. Para gerar UUIDs, use o Gerador de UUID.

Limitações e cuidados

  • O ULID revela a data de criação. Qualquer pessoa pode decodificar os 10 primeiros caracteres. Não use ULID onde o momento do cadastro é informação sensível.
  • Não é um token secreto. A parte de tempo é previsível e, no modo monotônico, o próximo valor também. Para senhas e chaves, use o Gerador de Senha.
  • A ordenação depende do relógio. Máquinas com relógios desajustados geram ULIDs fora de ordem entre si.
  • O decodificador confere o formato e extrai a data; ele não tem como saber se o ULID existe em algum sistema.

Perguntas frequentes

ULID pode repetir?

Na prática, não. Para haver colisão, dois ULIDs teriam de ser criados no mesmo milissegundo e sortear os mesmos 80 bits, uma chance em cerca de 1,2 septilhão para cada par.

Como descobrir a data de um ULID?

Cole o ULID no campo de decodificação desta página. Os 10 primeiros caracteres são o timestamp Unix em milissegundos; a ferramenta mostra a data em Brasília e em UTC. Para converter o número em outras datas, use o Conversor de Timestamp.

ULID diferencia maiúsculas de minúsculas?

Não. 01arz3ndektsv4rrffq69g5fav e 01ARZ3NDEKTSV4RRFFQ69G5FAV são o mesmo ULID. A forma usual é em maiúsculas; a opção Minúsculas existe para sistemas que padronizam assim. Só não misture as duas formas na mesma coluna de texto, porque a ordenação alfabética deixaria de bater com a cronológica.

Posso converter ULID em UUID?

Sim, os dois têm 128 bits: basta escrever os mesmos bits em hexadecimal no formato 8-4-4-4-12. O resultado é aceito por colunas uuid, mas não é um UUID v4 nem v7 “de verdade”, pois os bits de versão e variante ficam com valores quaisquer. Para conferir um UUID, use o Validador de UUID.

Os ULIDs gerados aqui são seguros para produção?

Eles seguem a especificação e usam o gerador criptográfico do navegador (crypto.getRandomValues), e nada é enviado a servidores. Para uso contínuo em um sistema, porém, o normal é gerar os ULIDs na própria aplicação, com uma biblioteca da sua linguagem.

Veja também