1001Ferramentas
🆔Geradores

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.getRandomValues no 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