O que é UUID? Formato, versões e UUID vs GUID
UUID (universally unique identifier, identificador único universal) é um número de 128 bits usado para identificar dados sem pedir a um servidor central o próximo ID livre. Normalmente é escrito com 36 caracteres: 32 dígitos hexadecimais em cinco grupos no padrão 8-4-4-4-12, como f47ac10b-58cc-4372-a567-0e02b2c3d479. O formato é definido pela RFC 9562 (maio de 2024), que substituiu a RFC 4122.
Experimente grátis: Gerador de UUID Gratuito e sem necessidade de conta.
Então, o que é UUID na prática e para que serve? Qualquer sistema pode criar um sozinho, até offline, e ter certeza quase absoluta de que ninguém mais vai gerar o mesmo valor. Por isso os UUIDs são populares como chaves de banco de dados, nomes de arquivos, IDs de requisições e de mensagens. Este guia explica o formato, as versões, a chance real de colisão, a diferença entre UUID e GUID e como escolher entre v4 e v7. Para testar os exemplos, abra o gerador de UUID gratuito em outra aba.
O que é UUID por dentro? O formato 8-4-4-4-12
Os 128 bits são 16 bytes. Cada byte vira dois dígitos hexadecimais, o que dá 32 dígitos, e quatro hífens levam a forma de texto a 36 caracteres. Duas posições têm significado fixo:
f47ac10b-58cc-4372-a567-0e02b2c3d479
^ ^
| +-- 17º dígito "a": variante (8, 9, a ou b = RFC 9562)
+------- 13º dígito "4": versão 4 (aleatória)
- A versão é o primeiro dígito do terceiro grupo (o 13º dígito hexadecimal). Ela indica como o UUID foi gerado.
- A variante é o primeiro dígito do quarto grupo (o 17º dígito hexadecimal). Nos UUIDs padrão, os dois bits mais altos são
10, então esse dígito é sempre8,9,aoub. Os valores0a7pertencem a antigos identificadores NCS,cedsão reservados para compatibilidade com a Microsoft, eeef, para uso futuro.
Como esses 6 bits são fixos, um UUID aleatório da versão 4 tem 128 − 6 = 122 bits aleatórios. As letras hexadecimais podem ser maiúsculas, minúsculas ou misturadas, então F47AC10B-… e f47ac10b-… são o mesmo UUID; o mais comum é usar minúsculas.
Versões de UUID: de v1 a v8, nil e max
A RFC 9562 define oito versões e dois valores especiais:
| Versão | Como é montado | Uso típico |
|---|---|---|
| v1 | Carimbo de tempo de 60 bits (passos de 100 ns desde 1582) + sequência de relógio + ID de nó, tradicionalmente o endereço MAC | Sistemas legados |
| v2 | DCE Security, não detalhada na RFC | Pouco usada |
| v3 | Hash MD5 de um UUID de namespace e um nome | IDs reproduzíveis (prefira v5) |
| v4 | 122 bits aleatórios | Padrão para uso geral |
| v5 | Hash SHA-1 de um UUID de namespace e um nome | IDs reproduzíveis a partir de nomes |
| v6 | Mesmos campos da v1, reordenados para o tempo ficar ordenável | Migração de sistemas v1 |
| v7 | Carimbo de tempo Unix de 48 bits em milissegundos + bits aleatórios | Chaves de banco de dados, IDs ordenáveis |
| v8 | Layout próprio; só versão e variante são fixas | Formatos específicos de fornecedor |
| Nil | 00000000-0000-0000-0000-000000000000 |
Marcador de "sem valor" |
| Max | ffffffff-ffff-ffff-ffff-ffffffffffff |
Sentinela ou limite superior |
As versões baseadas em nome são determinísticas. O namespace DNS com o nome example.com sempre gera o UUID v5 cfbff0d1-9375-5685-968c-48ce8b15ae17, em qualquer máquina e em qualquer linguagem. Use-as quando a mesma entrada precisar sempre gerar o mesmo ID.
Um UUID versão 7 coloca o tempo no início. Este exemplo foi criado em 24/09/2026 às 12:00:00 UTC, ou seja, 1.790.251.200.000 milissegundos após a época Unix, ou 0x01a0d3496e00 em hexadecimal:
01a0d349-6e00-7c3f-9d21-4b6e8a1f0c57
^^^^^^^^^^^^^ ^ ^
| | +-- dígito da variante "9"
| +------- versão 7
+--------------------- carimbo de tempo de 48 bits em ms
Os 74 bits restantes são aleatórios (ou em parte um contador, dependendo da biblioteca).
UUIDs são únicos? Chance de colisão na v4
Os UUIDs não têm unicidade garantida: são únicos com probabilidade esmagadora. Com 122 bits aleatórios, existem 2^122 ≈ 5,3 × 10^36 valores v4 possíveis. A aproximação do paradoxo do aniversário dá o número n de UUIDs necessário para uma chance de 50% de pelo menos dois serem iguais:
n ≈ √(2 · ln 2 · 2^122) ≈ 2,71 × 10^18
São 2,71 quintilhões de UUIDs. Gerando um bilhão por segundo, você levaria cerca de 86 anos para chegar lá. Em volumes realistas, o risco é desprezível:
| UUIDs v4 gerados | Probabilidade de alguma colisão |
|---|---|
| 1 bilhão (10^9) | cerca de 9,4 × 10^-20 |
| 1 trilhão (10^12) | cerca de 9,4 × 10^-14 |
| 103 trilhões (1,03 × 10^14) | cerca de 1 em 1 bilhão |
| 2,71 × 10^18 | cerca de 50% |
Esses números pressupõem um bom gerador de números aleatórios. Na prática, colisões vêm de bugs: um gerador mal inicializado, máquinas virtuais clonadas que reaproveitam o mesmo estado ou código que copia um ID em vez de criar um novo. Uma restrição de unicidade no banco de dados continua valendo a pena.
UUID vs GUID: qual é a diferença?
Na prática, nenhuma. GUID (globally unique identifier) é o nome que a Microsoft dá ao mesmo valor de 128 bits, usado no Windows, COM, .NET e SQL Server. O Guid.NewGuid() do .NET, por exemplo, cria um UUID versão 4 comum. As diferenças estão na apresentação e no armazenamento:
- Estilo do texto. Ferramentas da Microsoft costumam mostrar GUIDs em maiúsculas e entre chaves, como
{F47AC10B-58CC-4372-A567-0E02B2C3D479}. É o mesmo valor da forma em minúsculas. - Ordem dos bytes em binário. A estrutura GUID da Microsoft divide o valor em um campo de 32 bits, dois campos de 16 bits e 8 bytes avulsos. Em sistemas little-endian, e no
Guid.ToByteArray()do .NET, os três primeiros campos são gravados com os bytes invertidos, enquanto os 8 últimos bytes mantêm a ordem. Isso costuma ser chamado de mixed-endian:
Texto: f47ac10b-58cc-4372-a567-0e02b2c3d479
Ordem RFC: f4 7a c1 0b | 58 cc | 43 72 | a5 67 0e 02 b2 c3 d4 79
Ordem Microsoft: 0b c1 7a f4 | cc 58 | 72 43 | a5 67 0e 02 b2 c3 d4 79
O texto é idêntico; só os 16 bytes brutos mudam. Se você copiar GUIDs binários entre um sistema Microsoft e outro que espera a ordem RFC, o valor sai embaralhado. Converta pela forma de texto ou, a partir do .NET 8, use ToByteArray(bigEndian: true). A Microsoft documenta os grupos invertidos na referência de Guid.ToByteArray.
Portanto, "UUID vs GUID" é uma questão de nome, não uma escolha que você precise fazer.
UUID v4 vs v7 como chave primária
Os dois são UUIDs de 128 bits, mas se comportam de forma bem diferente dentro de um índice.
- A v4 é aleatória, então cada nova linha cai numa posição qualquer do índice B-tree. As inserções mexem em páginas do índice inteiro, o que causa divisões de página, mais escritas e um conjunto de trabalho maior que precisa ficar em memória.
- A v7 começa com um carimbo de tempo, então IDs novos são maiores que os antigos. As inserções vão para o fim do índice, como num inteiro autoincremental, e linhas criadas juntas ficam próximas.
Com a v7 você também pode ordenar pelo ID para obter a ordem de criação e ler o horário de criação no próprio ID. Essa também é a desvantagem: quem vê um ID v7 sabe quando o registro foi criado, com precisão de milissegundo. Use v4 para identificadores públicos cujo horário deva ficar privado, e v7 para chaves internas em tabelas grandes com muitas escritas.
Como armazenar UUIDs de forma eficiente
Guarde os 16 bytes, não o texto de 36 caracteres. Uma coluna de texto ocupa pelo menos 36 bytes por valor, mais que o dobro, e todo índice que inclui a chave cresce junto.
- PostgreSQL: use o tipo nativo
uuid(16 bytes). - SQL Server: use
uniqueidentifier(16 bytes). - MySQL: use
BINARY(16)comUUID_TO_BIN()eBIN_TO_UUID()para converter.
Converta para texto só nas bordas do sistema, como APIs e logs.
Como gerar um UUID no código
A maioria das linguagens tem um gerador embutido:
import uuid
uuid.uuid4() # random v4
uuid.uuid7() # v7, Python 3.14+
uuid.uuid5(uuid.NAMESPACE_DNS, "example.com") # cfbff0d1-9375-5685-968c-48ce8b15ae17
crypto.randomUUID(); // v4, in browsers (HTTPS pages) and Node.js
SELECT gen_random_uuid(); -- v4, built in since PostgreSQL 13
SELECT uuidv7(); -- v7, PostgreSQL 18+
Guid.NewGuid(); // v4
Guid.CreateVersion7(); // v7, .NET 9+
O crypto.randomUUID() está documentado no MDN. No navegador, ele só funciona em páginas seguras (HTTPS).
Como validar um UUID com regex
Este padrão aceita a forma canônica das versões 1 a 8 com a variante padrão (use uma comparação que ignore maiúsculas e minúsculas):
^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
[1-8] confere o dígito da versão e [89ab], a variante. Adicione verificações separadas se também quiser aceitar os UUIDs nil e max, chaves ou o prefixo urn:uuid:.
UUIDs não são segredos
Um UUID identifica algo; não o protege. A RFC 9562 diz que as implementações não devem supor que UUIDs são difíceis de adivinhar e que eles não podem ser usados como mecanismo de segurança. A v1 revela o horário de criação e, tradicionalmente, o endereço MAC da máquina que a gerou; a v7 revela o horário de criação. Nem mesmo uma v4 de um gerador seguro foi feita para ser token de redefinição de senha ou chave de API. Para isso, use um token aleatório próprio, por exemplo do gerador de tokens, e verifique as permissões a cada requisição mesmo assim.
Alternativas ao UUID
O ULID é uma alternativa popular com objetivos parecidos: 128 bits, um carimbo de tempo de 48 bits em milissegundos e 80 bits aleatórios, escritos como 26 caracteres em Base32 de Crockford para serem ordenáveis como texto. Se você precisa desse formato, o gerador de ULID cria e decodifica ULIDs e os converte em UUIDs. Para projetos novos, o UUID v7 oferece a mesma ordenação por tempo mantendo o formato UUID padrão que os bancos de dados entendem nativamente.
Gerar e inspecionar UUIDs online
O gerador de UUID gratuito roda inteiramente no seu navegador. Ele cria UUIDs v1, v3, v4, v5 e v7, além dos valores nil e max, até 500 de uma vez. Você pode escolher minúsculas, maiúsculas ou chaves, remover os hífens e separar a lista por linhas, vírgulas, espaços ou como array JSON, e depois copiá-la ou baixá-la como .txt ou .json. Para v3 e v5, escolha o namespace DNS, URL, OID ou X.500, ou cole o seu.
O validador embutido aceita entradas canônicas, entre chaves, com urn:uuid: e sem hífens, e mostra a versão, a variante e a forma canônica. Ele decodifica o carimbo de tempo de UUIDs v1 e v7, e a sequência de relógio e o nó da v1. Alguns limites: não gera v6 nem v8, a v1 usa um nó aleatório em vez do seu endereço MAC, e IDs v7 criados no mesmo milissegundo não têm garantia de ficar na ordem de criação, porque os bits depois do carimbo de tempo são aleatórios e não um contador.
Perguntas frequentes
UUID é a mesma coisa que GUID?
Sim. GUID é o nome que a Microsoft dá ao UUID. O valor e o formato de texto são os mesmos; ferramentas da Microsoft costumam mostrar GUIDs em maiúsculas e entre chaves, e algumas APIs da Microsoft gravam os três primeiros campos em ordem little-endian no formato binário.
Dois UUIDs podem ser iguais?
Em teoria sim, na prática quase nunca. Com a v4, seriam necessários cerca de 2,71 × 10^18 UUIDs para uma chance de 50% de uma duplicata. Duplicatas reais costumam vir de bugs de software ou de um gerador aleatório com defeito, então mantenha uma restrição de unicidade nas colunas de chave.
Devo usar UUID v4 ou v7?
Use v7 para chaves primárias em tabelas com muitas inserções, porque IDs ordenados por tempo mantêm os índices compactos e ordenam pela data de criação. Use v4 quando o ID for público e não deva revelar nada sobre quando o registro foi criado.
Qual é o tamanho de um UUID?
Um UUID tem 128 bits, ou 16 bytes. A forma de texto padrão tem 36 caracteres: 32 dígitos hexadecimais e 4 hífens. Sem hífens são 32 caracteres, e com chaves, 38.
É seguro usar UUIDs em URLs?
Eles podem ser exibidos, mas não são controle de acesso. Uma v4 aleatória é difícil de adivinhar, mas pode vazar por logs, histórico do navegador ou pelo cabeçalho Referer, e a v1 e a v7 revelam quando foram criadas. Sempre verifique se o usuário tem permissão para acessar o recurso.
Experimente grátis: Gerador de UUID Gratuito e sem necessidade de conta.