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
Gerador de UUID
Gere UUIDs (Universally Unique Identifiers) v4 aleatórios com um clique. Copie individualmente ou em lote. Processado no navegador, sem enviar dados para servidores.
Gerador de CUID2
Gera identificadores CUID2 (collision-resistant unique ID v2) — IDs curtos, seguros e otimizados para uso em URL, banco de dados e sistemas distribuídos.
Gerador de String Segura Personalizável
Gera strings aleatórias com classes específicas: alfa minúsculas, maiúsculas, dígitos, símbolos. Útil para senhas, tokens e códigos. Usa crypto.getRandomValues.