Guia de geração de GUID/UUID em JavaScript: da teoria ao código

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Por que você precisa de GUID/UUID e por que é mais fácil do que parece?

\n\n

Você já se perguntou como sites e aplicativos diferenciam um registro no banco de dados de outro? Ou como seu navegador lembra que foi você quem colocou algo no carrinho, e não o vizinho? O segredo geralmente está em uma pequena, mas poderosa string — GUID (Globally Unique Identifier) ou seu irmão mais preciso UUID (Universally Unique Identifier).

\n\n

No Stack Overflow, a pergunta "How do I create a GUID / UUID?" acumula milhares de visualizações. Isso não é por acaso. Todo desenvolvedor, mais cedo ou mais tarde, enfrenta a tarefa: "Preciso de um ID único, mas não quero carregar uma biblioteca inteira". Hoje, vamos explorar esse tópico em JavaScript do início ao fim. Você aprenderá não apenas como gerar um UUID, mas também entenderá qual método escolher para sua tarefa.

\n\n

Pronto? Vamos lá!

\n\n

O que é UUID de verdade? (e por que não é mágica)

\n\n

Antes de escrever código, vamos entender a teoria. UUID é um número de 128 bits que geralmente é escrito em formato hexadecimal com hífens. Parece assim:

\n\n
123e4567-e89b-12d3-a456-426614174000
\n\n

O padrão RFC 4122 descreve várias versões de UUID. As mais populares são:

\n
    \n
  • Versão 4: UUID aleatório. Quase tudo que você encontra na internet é isso.
  • \n
  • Versão 1: Baseado em tempo e endereço MAC. Está obsoleto, mas ainda aparece.
  • \n
  • Versão 5: Gerado a partir de um nome (por exemplo, URL) usando o hash SHA-1.
  • \n
\n\n

A principal propriedade do UUID é a singularidade sem um servidor central. A probabilidade de colisão (dois IDs coincidirem) é tão baixa que pode ser ignorada. Diz-se que, se você gerasse um bilhão de UUIDs por segundo, levaria cerca de 100 anos para criar uma duplicata. Uma boa garantia, não é?

\n\n

A maneira mais correta: crypto.randomUUID()

\n\n

Se você está escrevendo JavaScript moderno (ES2020+), tem à sua disposição uma solução nativa — crypto.randomUUID(). Este método está disponível em navegadores e Node.js (a partir da versão 14.17.0).

\n\n

Veja como funciona:

\n\n
// Navegador\nconst myUUID = crypto.randomUUID();\nconsole.log(myUUID); // Saída: "f47ac10b-58cc-4372-a567-0e02b2c3d479"
\n\n
// Node.js (versões modernas)\nconst { randomUUID } = require('crypto');\nconst myUUID = randomUUID();\nconsole.log(myUUID);
\n\n

Por que esta é a melhor escolha?

\n
    \n
  • Segurança: Usa um gerador de números aleatórios criptograficamente seguro. Sem padrões previsíveis.
  • \n
  • Padrão: Segue rigorosamente o RFC 4122 versão 4.
  • \n
  • Desempenho: Escrito em C++ internamente, funciona extremamente rápido.
  • \n
  • Zero dependências: Não precisa instalar bibliotecas de terceiros.
  • \n
\n\n

Importante: Em navegadores antigos (Internet Explorer, Safari anteriores a 15.4), este método pode não estar disponível. Se você precisar suportar esses "dinossauros", continue lendo — temos opções alternativas.

\n\n

O hack clássico: Math.random() + padrão RFC 4122

\n\n

Antes do surgimento do crypto.randomUUID(), os desenvolvedores inventavam soluções caseiras. A opção mais popular é usar Math.random() para substituir dígitos no modelo UUID. Este código circula pela internet há mais de 10 anos:

\n\n
function generateUUID() {\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n        const r = Math.random() * 16 | 0;\n        const v = c === 'x' ? r : (r & 0x3 | 0x8);\n        return v.toString(16);\n    });\n}\n\nconsole.log(generateUUID()); // Saída: "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d"
\n\n

Como funciona?

\n
    \n
  1. O modelo xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx define o formato.
  2. \n
  3. O caractere 'x'

Blogs

Book Recommendations