1001Ferramentas
🆔 Geradores

Gerador de NanoID / ULID

Gere identificadores únicos modernos: NanoID (URL-safe, 21 chars por padrão) e ULID (ordenável por tempo, 26 chars). Alternativas compactas ao UUID para bancos de dados modernos. Processado no navegador.

NanoID

ULID (Universally Unique Lexicographically Sortable Identifier)

Diferenças

  • NanoID: 21 caracteres por padrão, URL-safe, alfabeto personalizável. Substituto moderno ao UUID v4.
  • ULID: 26 caracteres, ordenável cronologicamente (os primeiros 10 chars contêm o timestamp em ms). Ideal para chaves primárias em bancos de dados.

NanoID e ULID: quando UUID parece grande demais

NanoID foi criado por Andrey Sitnik e publicado no npm em 2017 como alternativa mais compacta ao UUID v4. A saída padrão tem 21 caracteres de um alfabeto URL-safe de 64 caracteres (A-Z a-z 0-9 _ -), o que dá 21 × log2(64) = 126 bits de entropia. É praticamente a mesma resistência a colisões do UUID v4 (122 bits), mas em 21 caracteres em vez de 36 — e sem os hífens que forçam percent-encoding em alguns contextos.

Em escala: gerando 1 bilhão de NanoIDs por segundo, seriam necessários cerca de 21 anos para uma única colisão se tornar provável. Para qualquer carga realista, NanoID é tão seguro quanto UUID v4, sendo mais curto, URL-safe de fábrica e cerca de 2x mais rápido em alguns benchmarks de Node.js porque não há sobrecarga de formatação hexadecimal.

Alfabetos personalizados

NanoID permite trocar o alfabeto. Um truque comum é remover caracteres visualmente ambíguos (0/O, 1/l/I) quando humanos vão digitar o ID. Escolha um comprimento que compense o alfabeto menor: com 32 caracteres de Crockford Base32, são necessários 25 caracteres para igualar a entropia do NanoID padrão de 21.

ULID: ordenável por construção

ULID — Universally Unique Lexicographically Sortable Identifier — foi proposto por Alizain Feerasta em 2016. Codifica 128 bits em 26 caracteres de Crockford Base32 (sem I, L, O ou U para evitar confusão). O layout é 48 bits de timestamp Unix em milissegundos (válido até o ano 10889) seguidos de 80 bits de aleatoriedade. Propriedade-chave: ordem lexicográfica é igual à ordem de criação — ordenar strings ordena os IDs por tempo.

Isso torna o ULID uma escolha sólida para chaves primárias em bancos distribuídos: você ganha os benefícios de localidade de uma coluna auto-incremento (linhas novas agrupadas em índices B-tree) sem coordenar um contador entre nós. Dentro do mesmo milissegundo, a especificação recomenda um contador monotônico para manter a ordem estável.

NanoID vs ULID vs UUID v4 vs KSUID

  • NanoID — compacto, totalmente aleatório, URL-safe. Sem timestamp.
  • ULID — ordenável, embute timestamp, Base32. 128 bits.
  • UUID v4 — padrão RFC 9562, onipresente, mas longo (36 chars) e não ordenável.
  • KSUID — parecido com ULID (prefixado por timestamp), 27 chars Base62, timestamp em segundos de 32 bits.

Perguntas frequentes

Posso usar NanoID ou ULID em URLs? Sim — ambos são URL-safe sem escapar. NanoID usa _ e -; ULID usa apenas alfanuméricos maiúsculos.

NanoID é realmente mais rápido que UUID? Em benchmarks de Node.js, NanoID é cerca de 2x mais rápido que o gerador UUID v4 canônico porque pula a formatação hex e a inserção dos hífens. A diferença diminui com o crypto.randomUUID() nativo.

Clock drift quebra o ULID? Um salto do relógio para trás pode produzir IDs fora de ordem, mas o componente aleatório torna a colisão astronomicamente improvável. A maioria das bibliotecas de ULID detecta a regressão e incrementa o contador para preservar a monotonicidade.

Ferramentas Relacionadas