Gerador de ULID

Gere ULIDs online: IDs de 26 caracteres em Crockford Base32 com carimbo de data/hora de 48 bits e 80 bits aleatórios.

Formato
IDs gerados
Pronto. Gere ULIDs diretamente no seu navegador.

Como este ID é estruturado

Estrutura
26 caracteres Crockford Base32: 10 caracteres de tempo seguidos por 16 caracteres aleatórios.
Entropia
80 bits aleatórios após o carimbo de data/hora de 48 bits em milissegundos.
Tempo
Sim. Os primeiros 10 caracteres codificam o tempo em milissegundos, permitindo ordenação léxica cronológica.
Risco de colisão
A parte final aleatória possui 80 bits; o risco está associado principalmente à quantidade de IDs gerados no mesmo milissegundo.
Exemplo
01M12BRQVAVN71TXW3YK5PZWSZ

Seus IDs são gerados localmente com alta aleatoriedade no navegador. Nada é enviado para o BroBroGo.

Perguntas frequentes

Para que serve o ULID?

O ULID é compacto, amigável para URLs e ordenável por tempo como texto simples, sendo ideal para logs, chaves de objetos e registros que precisam ser ordenados por data de criação.

O ULID é a mesma coisa que o UUID v7?

Não. Embora ambos incluam o tempo em milissegundos, o ULID usa Crockford Base32 com 26 caracteres, enquanto o UUID v7 mantém o formato hexadecimal padrão de 36 caracteres do UUID.

O que é um ULID e como esta página gera identificadores únicos?

A página ulid-generator produz identificadores no formato ULID — uma string de 26 caracteres que codifica 128 bits de informação. Você escolhe quantos IDs precisa (de 1 a 100) e o conjunto é gerado instantaneamente no seu navegador. Cada ULID aparece como uma sequência alfanumérica sem hífens, pronta para ser copiada individualmente ou toda de uma vez.

O diferencial principal do ULID em relação a outros formatos do mesmo gerador está na compactação e na ordenação temporal. Enquanto um UUID v4 ocupa 36 caracteres com hífens, o ULID usa apenas 26 caracteres, eliminando os hífens e adotando exclusivamente o alfabeto Crockford base32. Esse alfabeto é case‑insensitive — "a" e "A" representam o mesmo valor — e exclui letras visualmente ambíguas como I, L, O e U. O resultado é um identificador mais curto, fácil de transcrever manualmente e seguro para uso em URLs sem necessidade de percent‑encoding.

Na prática, o gerador não oferece toggles para maiúsculas/minúsculas nem para inclusão de hífens, porque o ULID é inerentemente case‑insensitive e não possui hífens. Toda a geração é local, usando crypto.getRandomValues() do navegador, e nenhum dado enviado a servidores.

Diferenças fundamentais entre ULID e outros formatos de identificador

A tabela abaixo resume as principais diferenças entre ULID, UUID v4 e NanoID (versão padrão de 21 caracteres):

Característica ULID UUID v4 NanoID (21 caracteres)
Comprimento 26 caracteres 36 caracteres (com hífens) 21 caracteres
Base de codificação Crockford base32 (case‑insensitive) hexadecimal (case‑insensitive) URL‑safe base64 (case‑sensitive)
Ordenação temporal Sim (primeiros 10 caracteres são timestamp) Não (aleatório) Não (aleatório)
Bits totais 128 128 126 (com 21 caracteres e 64 símbolos)
Hífens Não Sim (4 hífens) Não
Segurança para URLs Sim, caracteres todos unreserved Sim, exceto os hífens Sim, por construção

O ULID foi projetado para ser mais amigável que o UUID em sistemas que precisam de ordenação por criação. Os primeiros 10 caracteres codificam um timestamp com precisão de milissegundos, o que permite ordenar os IDs lexicograficamente. Isso melhora a performance de índices B‑tree em bancos de dados — novos registros tendem a ser inseridos no final da árvore, ao contrário dos UUIDs aleatórios que causam fragmentação.

Por outro lado, o NanoID pode ser mais curto, mas não é ordenável e sua representação é case‑sensitive, o que pode gerar confusão em contextos onde "a" e "A" são tratados como diferentes. O ULID elimina esse problema.

Estrutura interna do ULID: timestamp e componente aleatório

Um ULID de 26 caracteres representa 128 bits, divididos em duas partes:

  • Timestamp (primeiros 10 caracteres): 48 bits, codificando o número de milissegundos desde a época Unix (1º de janeiro de 1970). Isso dá cerca de 8.925 anos de alcance, até o ano 10889 d.C.
  • Componente aleatório (16 caracteres seguintes): 80 bits gerados aleatoriamente.

A codificação usa o alfabeto Crockford base32: 0123456789ABCDEFGHJKMNPQRSTVWXYZ. As letras I, L, O e U foram removidas para evitar confusão com dígitos (1, l, 0, u). Além disso, o alfabeto não faz distinção entre maiúsculas e minúsculas — tanto "a" quanto "A" decodificam para o mesmo valor. Isso torna o ULID resiliente a erros manuais de digitação.

Exemplo de ULID: 01ARZ3NDEKTSV4RRFFQ69G5FAV. Os primeiros 10 caracteres (01ARZ3NDEK) representam o timestamp; os 16 restantes (TSV4RRFFQ69G5FAV) são aleatórios.

Note que a ordenação lexicográfica entre ULIDs é válida apenas se os timestamps forem comparados diretamente. IDs gerados no mesmo milissegundo podem aparecer em qualquer ordem, pois a porção aleatória não carrega informação temporal.

Por que ULIDs são ordenáveis e seguros para URLs

A ordenação temporal é consequência direta do formato: os primeiros 10 caracteres são uma representação base32 de um inteiro de 48 bits que cresce monotonicamente com o tempo. Como base32 é lexicograficamente ordenável (0 < 1 <... < Z), uma string ULID com timestamp menor sempre virá antes na ordenação de strings.

Essa propriedade é útil em diversos cenários:

  • Primary keys em bancos de dados: índices B‑tree se beneficiam da inserção sequencial, reduzindo a reorganização de páginas.
  • Logs e eventos: ordenar por ID já dá a ordem cronológica aproximada, sem necessidade de campo separado.
  • APIs RESTful: IDs parecem "mais curtos" e não expõem a sequência exata, já que o timestamp tem precisão de milissegundo (dificulta adivinhar próximos IDs).

Quanto à segurança para URLs, todos os caracteres do alfabeto Crockford base32 são unreserved segundo a RFC 3986 (letras e dígitos). Nenhum percent‑encoding é necessário. Isso contrasta com UUIDs que usam hífens (caracteres reservados em alguns contextos) e com NanoID que pode incluir underscores e hífens.

Probabilidade de colisão e geração local no navegador

A porção aleatória de 80 bits (16 caracteres base32) fornece um espaço de 2^80 valores possíveis. A probabilidade de colisão entre dois ULIDs gerados no mesmo milissegundo é extremamente baixa. Para um cenário com 1.000 IDs gerados por milissegundo, a chance de colisão é da ordem de 10^-15. Na prática, é segura para a maioria dos sistemas distribuídos.

A página gera os ULIDs inteiramente no lado do cliente, usando crypto.getRandomValues() — uma fonte de aleatoriedade criptograficamente forte disponível em navegadores modernos. Nenhum ID é enviado para servidores, nem mesmo o número de IDs solicitados. Isso garante privacidade e evita latência de rede.

O gerador aceita contagens entre 1 e 100 inclusive. Valores fora dessa faixa são rejeitados. A cada alteração na contagem ou na seleção de formato, a lista é automaticamente regenerada.

Como usar o gerador de ULID: contagem, cópia e estados

A interface é direta:

  1. Selecione o formato "ULID" (já é a escolha ativa na página).
  2. Defina a quantidade desejada: um número inteiro de 1 a 100.
  3. A lista de ULIDs aparece imediatamente. O estado exibe "Pronto." ou "Gerado." conforme ação.
  4. Para copiar um ID individual, clique sobre ele — vai para a área de transferência.
  5. Para copiar todos os IDs de uma vez, clique no botão correspondente; o estado mudará para "Copiado tudo!".

Não há opção de alternar entre maiúsculas/minúsculas ou adicionar hífens, porque o formato ULID não as suporta. A string gerada já vem no formato canônico: 26 caracteres em maiúsculas (por convenção, mas podem ser lidas em minúsculas sem perda).

Perguntas frequentes (FAQ)

Por que o gerador não permite escolher entre maiúsculas e minúsculas?
Porque o ULID é case‑insensitive por definição. O alfabeto Crockford base32 trata maiúsculas e minúsculas como equivalentes. A página gera as strings em maiúsculas por legibilidade, mas você pode convertê‑las para minúsculas sem alterar o valor.

Posso gerar mais de 100 ULIDs de uma vez?
Não. O campo de contagem aceita apenas valores entre 1 e 100. Se precisar de mais, faça várias gerações em sequência — lembre‑se de que IDs gerados em milissegundos diferentes terão timestamps diferentes e serão ordenáveis.

Como copiar um ULID específico?
Clique sobre o ULID desejado na lista. O texto será copiado para a área de transferência. Um feedback visual (mudança de estado) confirma a operação.

ULID é realmente melhor que UUID para bancos de dados?
Depende do caso. ULIDs são ordenáveis, o que melhora a performance de índices B‑tree em inserções sequenciais. UUIDs v4 são puramente aleatórios e podem causar fragmentação. Porém, UUIDs v7 (baseados em timestamp) oferecem ordenação similar. ULID é uma alternativa mais compacta e sem hífens.

A página gera ULIDs que seguem a especificação oficial?
Sim. Os ULIDs gerados seguem o formato definido pelo projeto ulid/spec: timestamp de 48 bits em base32 Crockford + 80 bits aleatórios. A aleatoriedade é fornecida por crypto.getRandomValues(), atendendo aos requisitos de segurança.

O que acontece se eu gerar IDs no mesmo milissegundo?
Nesse caso, a ordenação entre eles não é garantida — a porção aleatória pode colocar qualquer um na frente. Se você precisa de ordenação estrita mesmo dentro do mesmo milissegundo, considere incrementar manualmente um contador ou usar um formato como ULID com sufixo monotônico (não implementado nesta página).