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

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

Os UUIDs (Universally Unique Identifiers) são identificadores de 128 bits concebidos para serem únicos no espaço e no tempo sem uma autoridade central. 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 apresentado como 32 dígitos hexadecimais em cinco grupos separados por hífenes:

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ífenes)
  • Versão: Codificada no 13.º carácter (o nibble "hi")
  • Variante: Codificada no 17.º carácter

Gere UUIDs instantaneamente com o nosso Gerador de UUID.

Versões do UUID

UUID v1: Baseado no 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

Vantagens: Naturalmente ordenável por hora de criação, unicidade garantida por máquina. Desvantagens: Expõe o endereço MAC (preocupação de privacidade), pode revelar a hora de criação. Utilizar quando: Necessita de ordenação temporal e está num ambiente controlado.

UUID v4: Aleatório

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

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

Vantagens: Simples, sem fuga de informação, sem necessidade de coordenação. Desvantagens: Não ordenável, desempenho de índice de base de dados ligeiramente inferior ao dos IDs sequenciais. Utilizar quando: Uso geral — esta é a escolha predefinida 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

Vantagens: Naturalmente ordenado por tempo, excelente desempenho de índice de base de dados, sem fuga de informação além da precisão de milissegundos. Desvantagens: Mais recente, algumas bibliotecas podem ainda não o suportar. Utilizar quando: Necessita de IDs únicos que se ordenem cronologicamente — ideal para chaves primárias de base 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 preferível ao v3.
  • UUID v6: v1 reordenado para melhor ordenação. Substituído pelo v7.
  • UUID Nulo: Todos zeros (00000000-0000-0000-0000-000000000000). Utilizado 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 mil milhão de UUIDs: probabilidade ≈ 1 em 10^18
  • Para ter 50% de probabilidade de colisão: necessitaria de aproximadamente 2,7 × 10^18 UUIDs
  • A 1 mil milhão de UUIDs por segundo: demoraria cerca de 86 anos

Para todos os efeitos práticos, as colisões de UUID v4 não acontecerão. É muito mais provável sofrer uma falha de hardware.

UUID vs Outros Formatos de ID

FormatoComprimentoOrdenávelÚnicoSeguro para URL
UUID v436 caract.NãoSimSim
UUID v736 caract.SimSimSim
ULID26 caract.SimSimSim
nanoid21 caract.NãoProvavelmenteSim
Auto-incrementoVariávelSimPor tabelaSim
Snowflake ID18-19 caract.SimPor sistemaSim

ULID (Universally Unique Lexicographically Sortable Identifier)

Os ULIDs são uma alternativa compacta: timestamp de 48 bits + 80 bits aleatórios, codificados como 26 caracteres Crockford Base32. Ordenam-se lexicograficamente por hora de criação.

Quando Utilizar IDs de Auto-Incremento

Os IDs sequenciais são mais simples e eficientes para aplicações com uma única base de dados. Utilize UUIDs quando necessitar de:

  • IDs gerados por múltiplos sistemas de forma independente
  • IDs que não revelem a ordem de inserção a utilizadores externos
  • IDs compatíveis com fusão para bases de dados distribuídas

Considerações de Desempenho em Base de Dados

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

Soluções:

  1. Utilizar UUID v7: UUIDs ordenados por tempo inserem-se sequencialmente, igualando o desempenho do auto-incremento
  2. Armazenar como binário: Utilizar BINARY(16) em vez de CHAR(36) para poupar 55% de armazenamento
  3. Utilizar ULID: Ordenável e mais compacto do 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: armazenar como BINARY(16) para desempenho
CREATE TABLE users (
  id BINARY(16) PRIMARY KEY,
  name VARCHAR(255) NOT NULL
);

Gerar UUIDs

Linha de Comandos

# macOS/Linux
uuidgen

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

JavaScript

// Built-in (Node.js 19+, modern browsers)
crypto.randomUUID();

// Para UUID v7 (utilizando 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, o nosso Gerador de UUID cria UUIDs v4 instantaneamente no seu navegador.

FAQ

Devo utilizar UUID ou inteiro de auto-incremento para a chave primária da minha base de dados?

Para aplicações com uma única base de dados, os inteiros de auto-incremento são mais simples e rápidos. Para sistemas distribuídos, microsserviços ou quando precisa de gerar IDs do lado do cliente antes da inserção na base de dados, os UUIDs (preferencialmente v7) são a melhor escolha. Se estiver a utilizar PostgreSQL, o suporte nativo a UUID torna a diferença de desempenho negligenciável.

Os UUIDs podem ser utilizados como tokens de segurança?

O UUID v4 utiliza 122 bits de aleatoriedade de uma fonte criptográfica, o que proporciona boa entropia. No entanto, para tokens de segurança (chaves API, IDs de sessão), é preferível utilizar formatos de tokens construídos para esse fim, com propriedades adicionais como checksums, codificação de expiração ou identificação por prefixo. Os 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