Por que você precisa de GUID/UUID e por que é mais fácil do que parece?
\n\nVocê 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\nNo 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\nPronto? Vamos lá!
\n\nO que é UUID de verdade? (e por que não é mágica)
\n\nAntes 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\n123e4567-e89b-12d3-a456-426614174000\n\nO 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
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\nA maneira mais correta: crypto.randomUUID()
\n\nSe 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\nVeja 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\nPor 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
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\nO hack clássico: Math.random() + padrão RFC 4122
\n\nAntes 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\nfunction 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\nComo funciona?
\n- \n
- O modelo
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxxdefine o formato. \n - O caractere 'x'