NanoID Generator
GeneratorGere NanoIDs seguros e seguros para URL com alfabeto e comprimento personalizados. Menores que UUIDs, mais entropia por caractere. Funciona inteiramente no seu navegador.
| IDs únicos possíveis | 8.51 × 10^37 |
| IDs para 1% de chance de colisão | 1.31 × 10^18 |
| A 1.000 IDs/seg | ~41437K years |
| A 1.000.000 IDs/seg | ~41K years |
| A 1.000.000.000 IDs/seg | ~41 years |
NanoID é um gerador de IDs únicos pequeno, seguro e amigável para URL criado por Andrey Sitnik em 2017. Seu formato padrão — 21 caracteres seguros para URL — fornece 126 bits de aleatoriedade, comparável ao UUID v4, sendo 31% mais curto (21 chars vs 36 chars com hifens).
Ao contrário do UUID v4, que é fixo em 128 bits num formato específico de hex+hífen, o NanoID permite escolher seu alfabeto e tamanho. Essa flexibilidade permite ajustar o ID para legibilidade, segurança para URL ou compacidade extrema (ex.: ID hexadecimal de 10 chars para URLs curtas). Todos os predefinidos geram IDs seguros para embutir em URLs sem codificação percentual.
Toda aleatoriedade vem da Web Crypto API (crypto.getRandomValues), tornando os NanoIDs criptograficamente seguros. O algoritmo usa máscara + amostragem por rejeição para evitar viés de módulo, garantindo distribuição uniforme pelo alfabeto independente do seu tamanho.
| Formato | Chars | Entropia | Seguro para URL |
|---|---|---|---|
| NanoID (default) | 21 | 126 bits | ✓ Yes |
| UUID v4 | 36 | 122 bits | ✗ No |
| UUID v7 | 36 | 74 bits random | ✗ No |
| ULID | 26 | 80 bits random | ✓ Yes |
About this tool
Sobre o Gerador de NanoID
NanoID é um formato de identificador compacto, seguro e amigável para URL criado por Andrey Sitnik. Em 21 caracteres seguros para URL, entrega 126 bits de entropia — igualando a segurança do UUID v4 sendo 31% mais curto. Sua principal inovação é a configurabilidade: você pode escolher qualquer alfabeto e qualquer comprimento, ajustando IDs para legibilidade, compacidade ou requisitos específicos de domínio sem sacrificar qualidade criptográfica.
O gerador usa crypto.getRandomValues para toda aleatoriedade, combinado com um algoritmo de máscara + amostragem por rejeição que elimina viés de módulo e garante distribuição uniforme em qualquer alfabeto personalizado. Cinco predefinições cobrem os casos de uso mais comuns: seguro para URL (64 chars, padrão), somente números (10 chars), alfanumérico minúsculo (36 chars), alfanumérico maiúsculo (36 chars) e hexadecimal (16 chars). Um modo personalizado permite digitar qualquer alfabeto de 2 a 256 caracteres únicos.
NanoID é amplamente usado no ecossistema JavaScript como substituto do UUID v4 quando o comprimento do ID importa — URLs públicas, chaves de estado no cliente, chaves de cache, IDs de documentos em bancos NoSQL (MongoDB, Firestore), IDs de correlação de mensagens e qualquer contexto onde identificadores curtos, únicos e opacos são necessários sem codificação percentual em URLs.
Comparado ao UUID v4, NanoID é mais curto (21 vs 36 chars), naturalmente seguro para URL e totalmente configurável. Comparado ao ULID, NanoID não vaza timestamp — o ID é completamente opaco. Comparado a strings aleatórias com Math.random(), NanoID usa CSPRNG, tornando-o seguro para identificadores sensíveis. O estimador de colisão integrado permite verificar a margem de segurança para qualquer combinação de alfabeto e tamanho.
Funcionalidades Principais
- Padrão de 21 caracteres seguros para URL (126 bits de entropia)
- Alfabeto personalizado: seguro para URL, números, minúsculas, maiúsculas, hex ou qualquer conjunto
- Comprimento personalizado: 8 a 256 caracteres
- Sem viés: máscara + amostragem por rejeição para distribuição uniforme
- Criptograficamente seguro via Web Crypto API
- Geração em lote: até 1000 IDs de uma vez
- Estimador de probabilidade de colisão em tempo real
- Cópia individual e cópia de todos com um clique
- 100% baseado no navegador, sem chamadas ao servidor
FAQ
Gerador de NanoID — Perguntas Frequentes
NanoID é seguro?
Sim. Toda aleatoriedade vem do crypto.getRandomValues (Web Crypto API), um gerador de números pseudo-aleatórios criptograficamente seguro disponível em todos os navegadores modernos. O algoritmo de máscara + amostragem por rejeição garante que cada caractere na saída seja uniformemente distribuído pelo alfabeto, sem viés de módulo. Isso torna os NanoIDs adequados para identificadores sensíveis como tokens de sessão, chaves de API e IDs de documentos.
Qual comprimento devo usar?
O padrão de 21 caracteres com o alfabeto seguro para URL (64 chars) fornece 126 bits de entropia — essencialmente o mesmo que UUID v4. Para a maioria das aplicações isso é mais que suficiente. Se precisar de IDs mais curtos (ex.: 10 chars para URLs curtas), use o estimador de colisão: ele mostra quantos IDs você precisaria gerar antes de 1% de probabilidade de colisão com suas configurações. Como regra geral, fique acima de 100 bits de entropia para qualquer aplicação que gere milhões de IDs.
Posso usar um alfabeto personalizado?
Sim. Troque a predefinição para 'Personalizado' e digite qualquer caractere. O mínimo é 2 caracteres únicos. Alfabetos comuns incluem: somente numérico para códigos legíveis por humanos (ex.: OTPs de 6 dígitos), somente maiúsculas para evitar ambiguidade visual (sem l/1 ou O/0), ou conjuntos específicos de domínio. Caracteres duplicados são removidos automaticamente — apenas caracteres únicos contam para o tamanho do alfabeto.
NanoID vs UUID v4 — qual devo usar?
Ambos são criptograficamente seguros e praticamente imunes a colisões. Escolha NanoID quando: IDs aparecem em URLs (seguro por padrão, sem codificação percentual), você quer IDs mais curtos, ou precisa de um alfabeto personalizado. Escolha UUID v4 quando: sua coluna de banco de dados é tipada como UUID (PostgreSQL, MySQL UUID type), você precisa de identificadores conformes ao RFC, ou sua equipe/biblioteca já assume o formato hexadecimal com hifens.
Por que o algoritmo usa máscara + amostragem por rejeição?
Ao mapear bytes aleatórios para um alfabeto cujo tamanho não é uma potência de 2, uma operação simples de módulo (byte % tamanhoAlfabeto) introduz viés de módulo — caracteres no início do alfabeto aparecem ligeiramente mais. A abordagem de máscara + amostragem por rejeição corrige isso: mascara cada byte para a potência de 2 mais próxima acima do tamanho do alfabeto, descarta qualquer valor ≥ tamanhoAlfabeto e tenta novamente. Isso garante que cada caractere tenha probabilidade exatamente igual, importante para segurança e uniformidade estatística.
Qual é a probabilidade de colisão?
O estimador usa a fórmula do paradoxo do aniversário: o número de IDs antes de 1% de chance de colisão é aproximadamente √(2 × A^L × ln(1/(1−0,01))), onde A é o tamanho do alfabeto e L o comprimento. Para o NanoID padrão de 21 chars com alfabeto seguro para URL (64 chars), você precisaria de ~2,7 × 10^17 IDs antes de atingir 1% de risco — a 1 milhão de IDs por segundo, isso leva mais de 8 bilhões de anos. Na prática, colisões de NanoID não são uma preocupação para nenhuma carga de trabalho realista.
Dicas
- Use a predefinição segura para URL para IDs que aparecem em URLs — sem codificação percentual necessária
- Verifique o estimador de colisão sempre que mudar o alfabeto ou comprimento — ele atualiza em tempo real
- Para códigos legíveis por humanos (OTPs, códigos de convite), use números ou maiúsculas com comprimento de 6–8
- Copiar Todos exporta um ID por linha, pronto para colar em script SQL, CSV ou arquivo de configuração