w

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

  1. Chaves primárias de banco de dados: Como chaves primárias em bancos de dados distribuídos
  2. Identificação de arquivos: Identificar arquivos em sistemas de arquivos
  3. Gerenciamento de sessão: Identificadores de sessão em aplicações web
  4. Filas de mensagens: Identificadores únicos para mensagens
  5. 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

  1. Uso geral: Use UUID v4
  2. Necessidade de ordenação por tempo: Use UUID v1
  3. Necessidade de determinismo: Use UUID v3 ou v5
  4. 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

Esta página foi útil?