Gerador de ULID

Gere em lote ULIDs, identificadores ordenáveis cronologicamente que funcionam como alternativa aos UUID.

O que significa gerar ULID

Gerar ULID consiste em emitir em lote identificadores únicos globais que se ordenam por tempo: o Universally Unique Lexicographically Sortable Identifier. Um ULID é uma cadeia de 26 caracteres em Crockford Base32 cujos 10 primeiros codificam o instante da geração e cujos 16 restantes provêm de uma fonte aleatória criptograficamente segura. Diferentemente de um identificador totalmente aleatório como o UUID v4, sua grande virtude é que ordenar as cadeias alfabeticamente também as ordena pelo momento em que foram criadas.

Esta ferramenta obtém a parte aleatória de crypto.getRandomValues() da Web Crypto API, de modo que a fonte é criptograficamente segura e não um simples gerador pseudoaleatório. Tudo acontece dentro do navegador: nem o número que você informa nem os identificadores produzidos são enviados a um servidor. Podem ser gerados até 1.000 de uma vez, e a saída está disponível em maiúsculas — a forma canônica da especificação — ou em minúsculas.

Como gerar ULID

  1. Indique quantos precisa Digite o número de ULID a emitir de uma vez, entre 1 e 1.000.
  2. Decida se os quer em minúsculas Marque a opção de minúsculas se quiser uniformidade para usá-los numa URL ou num log. Ambas as caixas são válidas segundo a especificação.
  3. Clique em gerar São listados juntos os ULID solicitados, com a hora atual na parte de marca temporal.
  4. Copie os resultados Copie-os um a um, ou use copiar tudo para levar a lista completa separada por quebras de linha.

Dicas para aproveitar melhor

  • Os primeiros 10 caracteres de um ULID codificam um timestamp (o momento da criação), enquanto os 16 restantes são aleatórios. Exceto quando dois ULIDs são gerados no mesmo milissegundo, basta ordenar como texto para obter a ordem cronológica de criação.
  • Usar um UUID v4 totalmente aleatório como chave primária de banco de dados tende a fragmentar os índices B-tree, já que novas linhas são inseridas em posições aleatórias. Como os ULIDs seguem aproximadamente a ordem do tempo, as novas linhas tendem a ser inseridas perto do fim do índice, o que ajuda a mitigar esse problema.
  • Um ULID é representado por 26 caracteres em Base32 de Crockford (o alfabeto de 32 caracteres `0`-`9` e `A`-`Z` sem as letras I, L, O e U, facilmente confundíveis), o que o torna mais curto que um UUID (36 caracteres incluindo hífens) e seguro para uso em ambientes que não diferenciam maiúsculas de minúsculas.
  • Para comparar formatos com o Nano ID e o UUID v4, consulte a tabela comparativa disponível na ferramenta irmã, a página do Gerador de Nano ID.

Quando gerar ULID ajuda

Chaves primárias e identificadores de registro

Ao adotar ULID como chave primária de uma tabela nova, você pode preparar cedo no desenvolvimento um lote de identificadores para registros fictícios e dados iniciais.

Identificadores de evento num sistema orientado a eventos

Quando cada evento de uma fila de mensagens ou de um sistema distribuído precisa de um identificador único, os ULID se ordenam por tempo, o que facilita muito acompanhar os logs cronologicamente.

Identificadores de log e rastreamento de amostra

Produza na hora identificadores no formato real para testar ou demonstrar uma plataforma de logs ou uma ferramenta de rastreamento.

Comparar com outros formatos de identificador

Se está em dúvida entre ULID, UUID v4, UUID v7 ou Nano ID para URLs curtas, compare antes a aparência e o comprimento reais. Veja também a geração de UUID, a geração de UUID v7 e a geração de Nano ID.

Termos relacionados aos ULID

ULID
Abreviação de Universally Unique Lexicographically Sortable Identifier. Identificador único de 128 bits cujos 48 primeiros bits guardam a hora da geração, de modo que ordenar as cadeias basta para dispô-los cronologicamente.
Crockford Base32
Codificação que usa 32 caracteres: os algarismos 0–9 e as letras A–Z, retiradas as visualmente confundíveis I, L, O e U. Um ULID é assim codificado em 26 caracteres.
Monotonicidade
Propriedade de um valor que sempre cresce com o tempo. Um ULID não garante a ordem quando vários são gerados no mesmo milissegundo, mas a extensão de geração monotônica prevista na especificação mantém o crescimento mesmo então.
UUID
Abreviação de Universally Unique Identifier. Norma de identificador único de 128 bits definida na RFC 4122, escrita normalmente com 36 caracteres hexadecimais incluindo os hifens. É uma norma independente do ULID.
Identificadores únicos em sistemas distribuídos
Mecanismo pelo qual vários servidores ou processos geram cada um identificadores sem colisão de forma independente, sem consultar um emissor central. ULID e UUID combinam hora de geração e aleatoriedade para reduzir a probabilidade de colisão a um nível desprezível.
Parte de marca temporal
Os 10 primeiros caracteres de um ULID: um valor de 48 bits que codifica a hora da geração em milissegundos como Crockford Base32. É o núcleo do mecanismo que permite deduzir a ordem de geração com uma simples comparação de cadeias.

Perguntas frequentes

Um ULID (Universally Unique Lexicographically Sortable Identifier) é uma especificação de identificadores que, assim como um UUID, são globalmente únicos, mas que também incorporam informação sobre o momento de criação — o que significa que uma simples ordenação de texto os coloca em ordem cronológica.

A principal diferença é se o identificador pode ser ordenado pelo momento de criação. Um UUID v4 é um valor de 128 bits totalmente aleatório, portanto não pode ser ordenado pela ordem de criação, enquanto os primeiros 48 bits de um ULID são um timestamp em milissegundos, de modo que uma simples comparação de texto revela a ordem de criação. Há também uma diferença de formato: um ULID tem 26 caracteres em Base32, enquanto um UUID tem 36 caracteres hexadecimais incluindo hífens.

Usar um valor totalmente aleatório como o UUID v4 como chave primária faz com que novas linhas sejam inseridas em posições aleatórias dentro do índice, o que pode causar fragmentação do índice B-tree e reduzir a eficiência do cache. Como os ULIDs seguem aproximadamente a ordem do tempo, as novas linhas tendem a ser adicionadas perto do fim do índice, o que ajudaria a mitigar esse problema.

Os primeiros 10 caracteres são um timestamp de 48 bits em milissegundos (capaz de representar datas até aproximadamente o ano 10889), e os 16 caracteres restantes são 80 bits de aleatoriedade. No total são 128 bits, o mesmo número de bits de um UUID, mas com a informação do momento de criação incorporada, que é a característica marcante do ULID.
Tool-kun

Curiosidade — como o ULID trouxe a ordem cronológica para o mundo dos identificadores

A especificação do ULID foi publicada em 2016 por Alizain Feerasta. Na época, o UUID já era o método padrão para gerar identificadores únicos em sistemas distribuídos, mas sua natureza totalmente aleatória — que impedia a ordenação — era vista como inconveniente para a eficiência de índices de bancos de dados e para a análise temporal de logs. O ULID surgiu justamente para resolver esse problema.

Na verdade, o UUID também tem variantes baseadas em tempo: a versão 1 (endereço MAC mais timestamp) e a versão 7 (padronizada em 2024, combinando timestamp e valores aleatórios). Contudo, o ULID é uma especificação independente, distinta do padrão UUID (RFC 4122), e se destaca por buscar um design mais simples aliado a uma representação compacta em Base32.

Hoje em dia existem bibliotecas de implementação do ULID em praticamente todas as principais linguagens de programação, e ele é amplamente adotado em cenários em que preservar a ordem de criação importa: IDs de eventos em sistemas distribuídos, IDs de rastreamento em logs e chaves primárias de bancos de dados, entre outros. Sua filosofia de design coincide bastante com a do UUID v7, que surgiu na mesma época, e ambos coexistem como abordagens diferentes para o mesmo objetivo: um identificador ordenável semelhante ao UUID.