alltools.one
Development
2025-07-03
7 min
alltools.one Team
UUIDIdentifierDatabaseAPIDevelopment

Guia de UUID: Versões, Formatos e Boas Práticas

UUIDs (Identificadores Únicos Universais) são identificadores de 128 bits projetados para serem únicos no espaço e no tempo sem uma autoridade central. Eles são a escolha padrão para sistemas distribuídos onde gerar IDs de forma independente — sem coordenação — é essencial.

Formato do UUID

Um UUID é um número de 128 bits exibido como 32 dígitos hexadecimais em cinco grupos separados por hífens:

550e8400-e29b-41d4-a716-446655440000
^^^^^^^^ ^^^^ ^^^^ ^^^^ ^^^^^^^^^^^^
time-low  mid  hi   clk   node
              +ver  +var
  • Total: 128 bits (16 bytes)
  • Comprimento da string: 36 caracteres (32 hex + 4 hífens)
  • Versão: Codificada no 13º caractere (o nibble "hi")
  • Variante: Codificada no 17º caractere

Gere UUIDs instantaneamente com nosso Gerador de UUID.

Versões de UUID

UUID v1: Baseado em Tempo

Gerado a partir do timestamp atual e do endereço MAC da máquina.

// Estrutura: timestamp (60 bits) + sequência de relógio (14 bits) + nó (48 bits)
6ba7b810-9dad-11d1-80b4-00c04fd430c8

Prós: Naturalmente ordenável por hora de criação, unicidade garantida por máquina. Contras: Expõe o endereço MAC (preocupação com privacidade), pode revelar a hora de criação. Use quando: Você precisa de ordenação temporal e está em um ambiente controlado.

UUID v4: Aleatório

Gerado a partir de números aleatórios criptograficamente seguros. Esta é a versão mais utilizada.

// 122 bits aleatórios (6 bits reservados para versão e variante)
f47ac10b-58cc-4372-a567-0e02b2c3d479

Prós: Simples, sem vazamento de informações, sem necessidade de coordenação. Contras: Não ordenável, desempenho de índice de banco de dados ligeiramente inferior ao de IDs sequenciais. Use quando: Uso geral — esta é a escolha padrão para a maioria das aplicações.

UUID v7: Aleatório Ordenado por Tempo (Novo Padrão)

A versão mais recente (RFC 9562, 2024), combinando um timestamp Unix com dados aleatórios.

// Estrutura: timestamp (48 bits) + aleatório (74 bits)
018e7b50-4a00-7000-8000-000000000001

Prós: Naturalmente ordenado por tempo, excelente desempenho de índice de banco de dados, sem vazamento de informações além da precisão de milissegundos. Contras: Mais recente, algumas bibliotecas podem ainda não suportá-lo. Use quando: Você precisa de IDs únicos que ordenam cronologicamente — ideal para chaves primárias de banco de dados.

Outras Versões

  • UUID v3: Hash MD5 de um namespace e nome. Determinístico.
  • UUID v5: Hash SHA-1 de um namespace e nome. Determinístico e preferido em relação ao v3.
  • UUID v6: v1 reordenado para melhor ordenabilidade. Substituído pelo v7.
  • UUID Nulo: Todos zeros (00000000-0000-0000-0000-000000000000). Usado como valor sentinela.

Probabilidade de Colisão

Qual a probabilidade de dois UUIDs (v4) gerados aleatoriamente colidirem? Com 122 bits aleatórios:

  • Após gerar 1 bilhão de UUIDs: probabilidade ≈ 1 em 10^18
  • Para ter 50% de chance de colisão: você precisa de aproximadamente 2,7 × 10^18 UUIDs
  • A 1 bilhão de UUIDs por segundo: levaria cerca de 86 anos

Para todos os fins práticos, colisões de UUID v4 não acontecerão. Você tem muito mais probabilidade de sofrer uma falha de hardware.

UUID vs Outros Formatos de ID

FormatoComprimentoOrdenávelÚnicoSeguro para URL
UUID v436 charsNãoSimSim
UUID v736 charsSimSimSim
ULID26 charsSimSimSim
nanoid21 charsNãoProvavelmenteSim
Auto-incrementoVariávelSimPor tabelaSim
Snowflake ID18-19 charsSimPor sistemaSim

ULID (Identificador Único Lexicograficamente Ordenável Universal)

ULIDs são uma alternativa compacta: timestamp de 48 bits + 80 bits aleatórios, codificados como 26 caracteres Crockford Base32. Eles são ordenáveis lexicograficamente por hora de criação.

Quando Usar IDs Auto-Incrementais

IDs sequenciais são mais simples e eficientes para aplicações com um único banco de dados. Use UUIDs quando você precisar de:

  • IDs gerados por múltiplos sistemas independentemente
  • IDs que não revelem a ordem de inserção para usuários externos
  • IDs compatíveis com merge para bancos de dados distribuídos

Considerações de Desempenho em Bancos de Dados

UUIDs aleatórios (v4) causam fragmentação de índice B-tree porque as inserções acontecem em posições aleatórias. Isso pode degradar o desempenho de escrita em 2-5x comparado com IDs sequenciais em tabelas grandes.

Soluções:

  1. Use UUID v7: UUIDs ordenados por tempo inserem sequencialmente, igualando o desempenho de auto-incremento
  2. Armazene como binário: Use BINARY(16) em vez de CHAR(36) para economizar 55% de armazenamento
  3. Use ULID: Ordenável e mais compacto que UUIDs
-- PostgreSQL: tipo UUID nativo (16 bytes, eficiente)
CREATE TABLE users (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  name TEXT NOT NULL
);

-- MySQL: armazene como BINARY(16) para desempenho
CREATE TABLE users (
  id BINARY(16) PRIMARY KEY,
  name VARCHAR(255) NOT NULL
);

Gerando UUIDs

Linha de Comando

# macOS/Linux
uuidgen

# Python one-liner
python3 -c "import uuid; print(uuid.uuid4())"

JavaScript

// Nativo (Node.js 19+, navegadores modernos)
crypto.randomUUID();

// Para UUID v7 (usando o pacote uuid)
import { v7 } from 'uuid';
const id = v7();

Python

import uuid
uuid.uuid4()  # Aleatório
uuid.uuid5(uuid.NAMESPACE_DNS, 'example.com')  # Baseado em nome

Para geração rápida sem código, nosso Gerador de UUID cria UUIDs v4 instantaneamente no seu navegador.

FAQ

Devo usar UUID ou inteiro auto-incremental como chave primária do meu banco de dados?

Para aplicações com um único banco de dados, inteiros auto-incrementais são mais simples e rápidos. Para sistemas distribuídos, microsserviços ou quando você precisa gerar IDs no lado do cliente antes da inserção no banco de dados, UUIDs (preferencialmente v7) são a melhor escolha. Se você está usando PostgreSQL, o suporte nativo a UUID torna a diferença de desempenho insignificante.

UUIDs podem ser usados como tokens de segurança?

UUID v4 usa 122 bits de aleatoriedade de uma fonte criptográfica, o que fornece boa entropia. No entanto, para tokens de segurança (chaves de API, IDs de sessão), é melhor usar formatos de token construídos para esse fim, com propriedades adicionais como checksums, codificação de expiração ou identificação por prefixo. UUIDs são para identidade, não para autenticação.

Recursos Relacionados

Published on 2025-07-03
UUID Guide: Versions, Formats, and Best Practices | alltools.one