Gerador de CUID Eficiente para Identificadores Únicos em Sistemas
Gere identificadores únicos resistentes a colisões (CUIDs) para sistemas distribuídos, bancos de dados e aplicações web. Crie IDs escaláveis e classificáveis instantaneamente.
Gerador de CUID
Gere um ID resistente a colisões de forma rápida e fácil.
Documentação
O que é um CUID?
Um CUID (identificador único resistente a colisões, do inglês collision-resistant unique identifier) é uma sequência curta de letras e dígitos usada para rotular um registro, arquivo ou evento de modo que dois itens nunca tenham o mesmo nome. Esta ferramenta gera CUID2, a versão atual do formato, usando a biblioteca @paralleldrive/cuid2. Cada id tem 25 caracteres, contém apenas letras minúsculas e dígitos e é criado inteiramente no navegador. Nada é enviado a um servidor.
Como usar este gerador de CUID
- Clique em Gerar novo CUID para criar um id.
- Clique em Copiar para a área de transferência para copiá-lo.
- Cole o id em um banco de dados, nome de arquivo ou aplicativo.
- Clique em gerar de novo para obter outro id. Colisões entre valores CUID2 distintos são extremamente improváveis, embora não sejam matematicamente impossíveis.
O id gerado também fica guardado na URL da página, então um link para o resultado pode ser compartilhado ou salvo nos favoritos.
Estrutura e fórmula do CUID2
Um CUID2 é montado assim:
1id = randomLetter + base36( SHA3-512( time + entropy + counter + fingerprint ) ).substring(1, length)
2A função de hash mistura quatro entradas privadas (a hora atual, um contador por sessão, uma impressão digital da máquina host e entropia aleatória) e as processa com SHA3-512. O resultado é convertido para a base 36 (dígitos 0-9 e letras a-z) e cortado no comprimento solicitado. O padrão da biblioteca é de 24 caracteres. Esta ferramenta solicita 25.
Somente o primeiro caractere fica isolado: uma letra aleatória colocada no início para que todo id comece com uma letra, e não com um dígito. Os autores da biblioteca afirmam que a letra inicial torna o id um identificador utilizável em JavaScript e em HTML/CSS. Todo caractere depois dessa primeira letra faz parte de um único corpo de hash contínuo e opaco. Ele não tem seções separadas.
Como o hash só funciona em um sentido, nenhuma de suas entradas pode ser extraída de volta do id pronto. Um CUID2 não tem timestamp recuperável, nem contador recuperável, nem impressão digital recuperável. Essa é uma escolha deliberada de privacidade e segurança: um id, por si só, não revela quando nem onde foi criado.
Exemplo
Gerar um id com esta ferramenta pode produzir:
1vcpuhcj51eomj1o31dnlqopu0
2Aqui, v é a letra inicial aleatória e cpuhcj51eomj1o31dnlqopu0 (24 caracteres) é o corpo do hash. O primeiro caractere é sempre uma letra. O corpo do hash pode conter uma mistura de letras e dígitos.
Por que os sistemas usam CUID2
- Sem necessidade de coordenação. Qualquer máquina pode gerar um id válido por conta própria, sem pedir o próximo valor a um servidor ou banco de dados central.
- Resistência a colisões. A combinação de hora, contador, impressão digital do host e entropia aleatória torna extremamente improvável que duas máquinas produzam o mesmo id, mesmo gerando muitos ids por segundo.
- Compatível com URLs. Um CUID2 usa apenas letras minúsculas e dígitos, então nunca precisa ser codificado para uso em um endereço web.
- Geração rápida e privada. Como esta ferramenta executa o gerador no navegador, os ids são criados na hora e nunca saem do dispositivo.
Os ids CUID2 não são ordenáveis pela data de criação. Diferentemente de um número de autoincremento de banco de dados ou do antigo formato CUID (versão 1), um CUID2 esconde seu timestamp dentro do hash em vez de guardá-lo à vista. Aplicações que precisam ordenar registros pela ordem de criação devem guardar uma coluna de timestamp separada junto com o id.
CUID2 vs. UUID vs. ids de autoincremento
| Característica | CUID2 | UUID v4 | Autoincremento |
|---|---|---|---|
| Comprimento | 25 caracteres | 36 caracteres (com hifens) | Varia (geralmente um número curto) |
| Conjunto de caracteres | Letras minúsculas e dígitos | Dígitos hexadecimais e hifens | Dígitos |
| Exige coordenação central | Não | Não | Sim (uma sequência do banco de dados) |
| Ordenável pelo horário de criação | Não | Não | Sim |
| Compatível com URLs sem codificação | Sim | Exige cuidado com os hifens | Sim |
CUID2 e UUID v4 resolvem o mesmo problema: gerar ids sem coordenação central. Um UUID tem 128 bits escritos em um "formato de sequência hexadecimal com hifens" de 32 dígitos hexadecimais e 4 hifens. O CUID2 é mais curto e usa um conjunto de caracteres menor, o que o torna mais fácil de ler e de colar em uma URL.
Usos comuns
- Chaves primárias em bancos de dados distribuídos, em que vários servidores inserem linhas de forma independente
- Ids de requisição ou de rastreamento usados para acompanhar uma ação por vários microsserviços
- Nomes de arquivo para uploads, de modo que dois arquivos nunca se sobrescrevam
- Ids de sessão ou de token para aplicações web
- Ids de mensagem em filas como Kafka ou RabbitMQ
Uma breve história
O formato CUID original foi criado por Eric Elliott como alternativa aos UUIDs para aplicações distribuídas. Hoje ele está obsoleto em favor do CUID2. O CUID2, publicado pelo mesmo projeto Paralleldrive, redesenhou o formato em torno de um hash criptográfico e removeu o timestamp e o contador recuperáveis que a versão original expunha. Esta ferramenta gera apenas ids CUID2.
Perguntas frequentes
Qual é a diferença entre o CUID (v1) e o CUID2? O CUID v1 guardava um timestamp e um contador visíveis dentro do id, o que tornava os ids ordenáveis, mas também revelava quando e quantos ids tinham sido criados. O CUID2 substitui esses campos visíveis por um hash unidirecional, de modo que nenhuma informação pode ser lida de volta a partir do id.
Os CUIDs desta ferramenta são ordenáveis pela data de criação? Não. Um CUID2 não tem timestamp recuperável, então os ids não podem ser ordenados por quando foram gerados apenas olhando a sequência.
Qual é o tamanho de um id gerado, e o tamanho pode ser alterado? Esta ferramenta sempre gera ids de 25 caracteres. Não há opção nesta ferramenta para pedir um tamanho diferente.
Duas máquinas diferentes podem gerar o mesmo CUID2 ao mesmo tempo? Em teoria é possível, mas na prática é extremamente improvável. Cada id mistura uma impressão digital específica do host com entropia aleatória, então é muito improvável que máquinas independentes produzam o mesmo hash.
Esta ferramenta envia algum dado a um servidor? Não. O id é gerado por JavaScript executado no navegador, usando o relógio do sistema local e a aleatoriedade fornecida pelo navegador. Nada é transmitido.
Posso usar um CUID2 como chave primária de banco de dados?
Sim. Os ids CUID2 funcionam bem como chaves primárias em bancos de dados distribuídos, pois qualquer nó pode gerar um sem consultar uma sequência central. Eles não são ordenados naturalmente pela hora de inserção, então uma aplicação que precisa dessa ordem deve manter uma coluna created_at separada.
Referências
- Paralleldrive. Cuid2 (README). github.com/paralleldrive/cuid2 — fontes de entropia, letra inicial, saída na base 36, comprimento padrão de 24, entradas não recuperáveis, recomendação sobre
createdAt. - Paralleldrive. Cuid (obsoleto). github.com/paralleldrive/cuid — CUID original de Eric Elliott, obsoleto em favor do Cuid2.
- IETF. RFC 9562: Universally Unique IDentifiers (UUIDs). rfc-editor.org — UUID de 128 bits, formato de sequência hexadecimal com hifens, sem registro central.