1. O Que E Nanoid
Nanoid e uma biblioteca de geracao de IDs unicos criada por Andrey Sitnik, projetada para ser uma alternativa mais compacta ao UUID. Com 21 caracteres no formato padrao (vs 36 do UUID com hifens), ele oferece ~126 bits de entropia — mais que os 122 bits do UUID v4 — em um formato mais curto e URL-safe.
A biblioteca oficial tem mais de 20 milhoes de downloads semanais no npm, o que a torna uma das bibliotecas de geracao de IDs mais populares do ecossistema JavaScript.
2. Algoritmo e Seguranca
O Nanoid usa crypto.getRandomValues() (navegadores) ou crypto.randomBytes() (Node.js) para gerar bytes aleatorios criptograficamente seguros. O algoritmo usa um metodo de rejection sampling para eliminar bias na selecao de caracteres:
- Calcula uma mascara de bits para o tamanho do alfabeto.
- Gera bytes aleatorios em lote (step = 1.6 * mask * size / alphabetSize).
- Aplica a mascara a cada byte e aceita apenas valores dentro do range do alfabeto.
- Descarta bytes fora do range e continua ate ter o tamanho desejado.
Esse processo garante distribuicao uniforme sem bias — um requisito fundamental para IDs criptograficamente seguros.
"O Nanoid e seguro por design: usa CSPRNG nativo, rejeita bytes com bias e produz IDs com entropia alta em formato compacto."
3. Probabilidade de Colisao
A probabilidade de colisao e calculada pelo problema do aniversario. Para o Nanoid padrao (21 chars, alfabeto de 64 chars):
- Combinacoes possiveis: 64^21 ≈ 2.89 × 10^37
- 50% de chance de colisao apos: ~1.2 × 10^19 IDs gerados
- Em contexto pratico: gerando 1 bilhao de IDs por segundo, levaria ~383 anos para 1% de chance de colisao
4. Customizacao de Tamanho e Alfabeto
Uma das principais vantagens do Nanoid e a customizacao total:
- Tamanho menor (ex: 10 chars): adequado para URLs curtas ou identificadores visiveis ao usuario, com menor entropia.
- Apenas numeros: util para codigos de verificacao ou PINs.
- Apenas maiusculas: mais legivel em interfaces graficas onde a capitalizacao pode ser confusa.
- Base32 sem ambiguidades: exclui letras parecidas (I, L, O) para melhorar digitacao manual.
Nossa ferramenta calcula automaticamente a entropia e probabilidade de colisao para qualquer combinacao de tamanho e alfabeto.
5. Quando Usar Nanoid
- IDs de sessao e tokens curtos: quando o espaco de armazenamento e bandwidth importam.
- Slugs de URL: IDs URL-safe sem precisar de encoding.
- Codigos de verificacao: com alfabeto numerico e tamanho 6-8 para OTPs.
- Identificadores de recursos em APIs REST: mais curtos que UUID nos endpoints.
- Chaves de idempotencia: para garantir que operacoes nao sejam executadas duas vezes.
6. Perguntas Frequentes
Posso usar Nanoid em producao com tamanho menor que 21?
Sim, mas avalie a entropia necessaria. Para 10 chars com alfabeto de 64 chars, voce tem ~60 bits de entropia — suficiente para a maioria dos casos internos, mas abaixo do recomendado para identificadores publicos de longa vida.
O Nanoid e compativel com bancos de dados relacionais?
Sim. Como e uma string, pode ser armazenado como VARCHAR ou TEXT em qualquer banco. Para melhor performance, use VARCHAR(21) com indice para o tamanho padrao.
Qual a diferenca entre Nanoid e Math.random()?
Math.random() NAO e criptograficamente seguro e nao deve ser usado para gerar IDs. Nanoid usa CSPRNG nativo, garantindo que os IDs nao possam ser previstas por um atacante que conhece IDs anteriores.