Gerador de UUID
Gerador de UUID
Use o gerador de UUID para criar rapidamente várias versões de identificadores únicos, com suporte a geração em lote e múltiplos formatos de saída.
O que é UUID?
UUID (Universally Unique Identifier - Identificador Único Universal) é um número de 128 bits usado para identificar de forma única informações em sistemas de computação. O UUID também é conhecido como GUID (Globally Unique Identifier - Identificador Único Global).
Características do UUID
- Unicidade: Probabilidade extremamente baixa de gerar UUIDs duplicados em sistemas distribuídos
- Padronização: Segue o padrão RFC 4122
- Multiplataforma: Pode ser usado em diferentes sistemas operacionais e linguagens de programação
- Descentralizado: Não requer autoridade central de coordenação
Cenários de Aplicação do UUID
- Chaves primárias de banco de dados: Como chaves primárias em bancos de dados distribuídos
- Identificação de arquivos: Identificar arquivos em sistemas de arquivos
- Gerenciamento de sessão: Identificadores de sessão em aplicações web
- Filas de mensagens: Identificadores únicos para mensagens
- Interfaces de API: Identificadores para requisições e respostas de API
Detalhes das Versões de UUID
UUID v1 (Baseado em Tempo e Nó)
Formato: xxxxxxxx-xxxx-1xxx-yxxx-xxxxxxxxxxxx
Características:
- Baseado na hora atual e no ID do nó (geralmente endereço MAC)
- Contém informações de carimbo de data/hora, pode ser classificado por tempo
- Pode vazar informações do endereço MAC
Algoritmo de Geração:
// Exemplo em pseudocódigo
function generateUUIDv1() {
const timestamp = Date.now();
const nodeId = getMACAddress();
const clockSeq = random16Bit();
return formatUUID(timestamp, clockSeq, nodeId);
}
UUID v3 (Baseado em Namespace e MD5)
Formato: xxxxxxxx-xxxx-3xxx-yxxx-xxxxxxxxxxxx
Características:
- Baseado em UUID de namespace e hash MD5 do nome
- O mesmo namespace e nome sempre produzem o mesmo UUID
- Adequado para cenários que exigem UUIDs determinísticos
Algoritmo de Geração:
function generateUUIDv3(namespace, name) {
const namespaceBytes = parseUUID(namespace);
const nameBytes = Buffer.from(name, "utf8");
const hash = crypto
.createHash("md5")
.update(Buffer.concat([namespaceBytes, nameBytes]))
.digest();
return formatUUIDv3(hash);
}
UUID v4 (Geração Aleatória)
Formato: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
Características:
- Gerado de forma completamente aleatória
- Versão de UUID mais comumente usada
- Não contém informações significativas
Algoritmo de Geração:
function generateUUIDv4() {
const bytes = crypto.randomBytes(16);
bytes[6] = (bytes[6] & 0x0f) | 0x40; // Versão 4
bytes[8] = (bytes[8] & 0x3f) | 0x80; // Variante
return formatUUID(bytes);
}
UUID v5 (Baseado em Namespace e SHA-1)
Formato: xxxxxxxx-xxxx-5xxx-yxxx-xxxxxxxxxxxx
Características:
- Baseado em UUID de namespace e hash SHA-1 do nome
- Mais seguro que v3 (usa SHA-1 em vez de MD5)
- Adequado para cenários que exigem UUIDs determinísticos
UUID NIL (UUID Nulo)
Formato: 00000000-0000-0000-0000-000000000000
Características:
- Todos os bits são 0
- Usado para representar "nenhum UUID" ou "UUID desconhecido"
- Usado como valor padrão no design de banco de dados
Namespaces Predefinidos
UUIDs de Namespace Padrão
- Namespace DNS:
6ba7b810-9dad-11d1-80b4-00c04fd430c8 - Namespace URL:
6ba7b811-9dad-11d1-80b4-00c04fd430c8 - Namespace OID:
6ba7b812-9dad-11d1-80b4-00c04fd430c8 - Namespace X.500 DN:
6ba7b814-9dad-11d1-80b4-00c04fd430c8
Exemplos de Uso
// Gerar UUID v3 usando namespace DNS
const dnsNamespace = "6ba7b810-9dad-11d1-80b4-00c04fd430c8";
const uuid = generateUUIDv3(dnsNamespace, "example.com");
// Resultado: 5df41881-3aed-3515-88a7-2f4a814cf09e
Interface da API
Gerar UUID Único
// Gerar UUID v4
const uuid = generateUUID("v4");
// Gerar UUID v1
const uuid = generateUUID("v1");
// Gerar UUID v3
const uuid = generateUUID("v3", {
namespace: "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
name: "example.com",
});
Gerar UUIDs em Lote
// Gerar UUIDs em lote
const uuids = generateMultipleUUIDs("v4", 10);
// Gerar UUIDs de diferentes versões
const mixedUUIDs = generateMultipleUUIDs(["v1", "v4", "v5"], 5);
Validação de UUID
// Validar formato UUID
const isValid = validateUUID("550e8400-e29b-41d4-a716-446655440000");
// Obter versão do UUID
const version = getUUIDVersion("550e8400-e29b-41d4-a716-446655440000");
Considerações de Desempenho
Velocidade de Geração
- v4 (Aleatório): Mais rápido, aproximadamente 100.000 UUIDs/segundo
- v1 (Tempo): Médio, aproximadamente 50.000 UUIDs/segundo
- v3/v5 (Hash): Mais lento, aproximadamente 10.000 UUIDs/segundo
Uso de Memória
- Cada UUID ocupa 16 bytes
- Preste atenção ao uso de memória ao gerar em lote
Segurança de Simultaneidade
- v4 usa geradores de números aleatórios criptograficamente seguros
- v1 requer a garantia de unicidade da sequência do relógio
Melhores Práticas
Escolhendo a Versão do UUID
- Uso geral: Use UUID v4
- Necessidade de ordenação por tempo: Use UUID v1
- Necessidade de determinismo: Use UUID v3 ou v5
- Chaves primárias de banco de dados: Recomendado usar UUID v4
Otimização de Armazenamento
-- Armazenamento de UUID no PostgreSQL
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(255)
);
-- Criar índice
CREATE INDEX idx_users_id ON users(id);
Otimização de Desempenho
// Usar pool de objetos para reduzir alocação de memória
const uuidPool = new Array(1000).fill(null).map(() => generateUUIDv4());
// Usar Web Workers para geração em lote
const worker = new Worker("uuid-worker.js");
worker.postMessage({ type: "generate", count: 1000 });
Perguntas Frequentes
Q: Qual a diferença entre UUID e GUID?
A: UUID e GUID são essencialmente a mesma coisa, apenas nomes diferentes. UUID é o termo padrão da RFC, GUID é o termo da Microsoft.
Q: Os UUIDs podem se repetir?
A: Teoricamente possível, mas com probabilidade extremamente baixa. A probabilidade de repetição do UUID v4 é de aproximadamente 2,71 × 10^-36.
Q: Como escolher a versão do UUID?
A: Escolha com base nos requisitos:
- Necessidade de aleatoriedade: v4
- Necessidade de informações de tempo: v1
- Necessidade de determinismo: v3 ou v5
Q: Os UUIDs afetam o desempenho do banco de dados?
A: Podem afetar, pois os UUIDs são maiores que chaves primárias inteiras. Recomendações:
- Use índices B-tree
- Considere usar UUID v1 (ordenado por tempo)
- Use chaves primárias inteiras quando apropriado
Ferramentas Relacionadas
Especificações Técnicas
Padrões RFC
- RFC 4122: Especificação UUID
- RFC 4122 Seção 4.1.3: Definições de versão UUID
Suporte de Linguagens de Programação
- JavaScript:
crypto.randomUUID()(Node.js 14.17+) - Python: módulo
uuid - Java:
java.util.UUID - C#:
System.Guid
Última atualização: 20 de janeiro de 2024