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.
Gera CUID2 — IDs colision-resistant, ordenáveis e seguros para URLs.
CUID2 — IDs resistentes a colisão e amigos da privacidade
CUID2 significa Collision-resistant Unique IDentifier, versão 2. Foi desenhado pelo autor de JavaScript Eric Elliott e lançado em 2022 como sucessor do CUID original (2012), que foi descontinuado porque partes da sua estrutura eram previsíveis o bastante para vazar fingerprint de servidor e o horário aproximado de criação. O CUID2 corrige isso colocando todas as entradas internas dentro de um hash antes de aparecerem na string final.
Cada CUID2 tem exatamente 24 caracteres, todos minúsculos, sorteados do alfabeto [a-z0-9]. O primeiro caractere é sempre uma letra — essa única decisão deixa o ID seguro para URLs (sem dígitos no começo confundindo roteadores ou seletores CSS) e para bancos que tratam identificadores de forma diferente de números. Um exemplo típico: tz4a98xxat96iws9zmbrgj3a.
Estrutura interna
Embora apenas 24 caracteres apareçam, o gerador mistura quatro fontes de aleatoriedade:
- Prefixo de letra — 1 letra minúscula aleatória, garante a compatibilidade com URLs/CSS citada acima.
- Timestamp — clock atual em milissegundos, só entra no hash, não aparece legível.
- Contador de sessão — incrementado monotonicamente por instância do gerador, evita colisão intra-processo se o relógio ficar parado.
- Componente aleatório — vindo do CSPRNG da plataforma (
crypto.getRandomValuesno navegador). - Fingerprint do cliente — mistura de pistas de ambiente (host, process id, user agent), também passada apenas pelo hash.
Os cinco insumos são concatenados e passados por SHA3, depois truncados em 23 caracteres e colados após o prefixo de letra. O SHA3 foi escolhido porque é resistente a colisões e a pré-imagem — conhecer a saída não dá ao atacante qualquer informação útil sobre qualquer dos insumos. A probabilidade de colisão fica abaixo de 50% mesmo com mais de 10^36 IDs gerados, muito além de qualquer sistema real.
CUID2 vs UUID v4 / UUID v7 / ULID
- Tamanho — CUID2 tem 24 caracteres; UUID tem 36 com hífens (32 sem). CUID2 fica visivelmente mais curto em URLs e índices.
- Privacidade — CUID2 é hash-based e não revela hora de criação, identidade da máquina nem sequência. UUID v7 e ULID têm timestamp no prefixo e vazam quando o ID foi criado (e a ordem) — tópico recorrente em discussões no Hacker News quando times percebem que expuseram o timing de signup.
- Ordenação — UUID v7 e ULID são ordenáveis lexicograficamente por tempo de criação, ótimo para localidade de índice e queries de série temporal. CUID2 de propósito não é — esse é o trade-off da privacidade.
- Caractere inicial — CUID2 sempre começa com letra; UUIDs podem começar com qualquer dígito hex.
- Performance — CUID2 é mais lento que UUID v4 porque paga um hash SHA3 por ID (ordem de microssegundos), mas esse custo é invisível em qualquer aplicação dominada por I/O.
Quando usar CUID2 — e quando não
Use CUID2 em chaves primárias de bancos distribuídos, IDs públicos em URLs (onde você não quer expor a hora de cadastro), identificadores de event sourcing, chaves de idempotência e qualquer lugar em que o ID vá aparecer numa string visível ao cliente. A implementação oficial de referência é o @paralleldrive/cuid2 para JavaScript/TypeScript, com ports comunitários em Python, Rust, Go e Elixir.
Evite CUID2 quando precisar de IDs ordenáveis por criação (use ULID ou UUID v7), ao interoperar com sistemas que esperam o layout canônico 8-4-4-4-12 do UUID, ou quando o armazenamento estiver tão apertado que 24 vs 16 bytes (UUID binário) faça diferença mensurável em bilhões de linhas.
Perguntas frequentes
CUID2 é determinístico? Não. O componente aleatório e o contador de sessão garantem que dois CUID2s gerados no mesmo milissegundo na mesma máquina ainda serão diferentes.
Posso usar CUID2 em URL ou nome de arquivo? Sim — contém apenas letras minúsculas e dígitos, sem necessidade de encoding. Também é case-insensitive e seguro para copiar e colar.
É mais lento que UUID v4? Um pouco. O hash SHA3 custa alguns microssegundos por ID. Na prática é desprezível perto do INSERT no banco que vem em seguida.
Dois serviços diferentes podem gerar o mesmo CUID2? A matemática diz que não, com probabilidade absurdamente alta — o design mira o limiar de 50% de colisão por volta de 10^36 IDs, mais do que todos os grãos de areia da Terra ao quadrado.
A ferramenta envia meus IDs para algum servidor? Não. A geração acontece inteiramente no navegador, usando crypto.getRandomValues para a entropia. Nada é transmitido.
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 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.
Gerador de Comando mysqldump
Monta um comando mysqldump com flags comuns: host, usuário, banco, opções (single-transaction, routines, triggers).