# Versões de UUID explicadas: v1 até v8

> Toda a família UUID em um só lugar, da v1 com tempo-e-MAC à v4 aleatória e à v7 com ordenação temporal, além das versões baseadas em nome e como se leem os bits de versão e variante.

Source: https://ronutz.com/pt-BR/learn/uuid-versions  
Updated: 2026-06-27  
Related tools: https://ronutz.com/pt-BR/tools/uuid

---

## Um formato, várias receitas

Um UUID tem sempre a mesma forma: 128 bits, escritos como 32 dígitos hexadecimais no familiar agrupamento `8-4-4-4-12`. O que muda entre as versões é como esses bits são gerados. O padrão atual, RFC 9562 (publicado em 2024, substituindo a longeva RFC 4122), define as versões 1 a 8, cada uma uma estratégia diferente para preencher 128 bits de um modo que permaneça único sem uma autoridade central. A [visão geral de UUID](https://ronutz.com/pt-BR/learn/uuid) foca nas duas que você mais usará, v4 e v7; este artigo mapeia a família inteira para que você possa reconhecer e escolher qualquer uma delas.

## Como um UUID anuncia sua versão

Dois pequenos campos são reservados não importa a versão, e a ferramenta lê ambos. A **versão** é codificada em quatro bits (o primeiro dígito hexadecimal do terceiro grupo), então um `4` ali significa um UUID v4 e um `7` significa v7. A **variante** é codificada nos bits superiores do grupo seguinte (o primeiro dígito hexadecimal do quarto grupo é tipicamente `8`, `9`, `a` ou `b` para a variante padrão). Juntos, eles dizem a quem lê como interpretar os bits restantes, e é por isso que uma ferramenta consegue rotular a versão de um UUID apenas o inspecionando, sem contexto.

## As versões baseadas em tempo: v1, v6, v7

Três versões codificam um carimbo de tempo, o que as torna aproximadamente ordenadas no tempo, uma propriedade útil para chaves de banco de dados (veja o artigo [chaves de banco de dados](https://ronutz.com/pt-BR/learn/uuid-database-keys)):

- **A versão 1** combina um carimbo de tempo de 60 bits com uma sequência de relógio e um identificador de nó, onde o nó é tradicionalmente o endereço MAC da máquina. Funciona, mas vaza o MAC e o horário de geração, e a ordenação do seu campo de carimbo de tempo não classifica de forma limpa como texto.
- **A versão 6** é a v1 com os campos do carimbo de tempo reordenados para que os bytes classifiquem em ordem cronológica. Existe como melhoria de substituição direta para sistemas já investidos em v1 que querem ordenabilidade.
- **A versão 7** usa um carimbo de tempo Unix direto em milissegundos seguido de bits aleatórios. É a recomendação moderna para novos identificadores com ordenação temporal: ordenável, sem vazamento de hardware e simples. Para a maioria dos novos trabalhos que querem chaves ordenadas, a v7 é a resposta.

## As versões baseadas em nome: v3 e v5

As versões 3 e 5 são determinísticas: a mesma entrada sempre produz o mesmo UUID. Você faz hash de um identificador de namespace junto com um nome, e o resumo vira o UUID. **A versão 3** usa MD5 e **a versão 5** usa SHA-1; a v5 é preferida porque o SHA-1, embora não usado aqui por segurança, é a escolha menos frágil. Essas são a versão a que recorrer quando você precisa de um identificador estável derivado de dados existentes, por exemplo um UUID consistente para uma dada URL ou nome de arquivo, de modo que dois sistemas computem independentemente o mesmo valor.

## A versão aleatória: v4

**A versão 4** preenche 122 bits com aleatoriedade (os outros 6 são os bits fixos de versão e variante). Não carrega carimbo de tempo, nem MAC, nem estrutura, o que a torna o padrão seguro quando você simplesmente quer um identificador opaco e resistente a colisões e não se importa com ordenação. Sua única desvantagem é precisamente essa falta de ordem, que é o que prejudica a localidade do índice do banco e motivou a v7. A geração de v4 da ferramenta usa uma fonte aleatória criptograficamente segura no seu navegador, então os valores nunca tocam um servidor.

## A versão 8 e os UUIDs especiais

**A versão 8** é reservada para uso personalizado ou experimental: apenas os bits de versão e variante são fixos, e o resto é seu para definir, o que permite a um sistema codificar seus próprios dados na forma de UUID enquanto permanece um UUID válido. Há também dois valores especiais a reconhecer: o UUID **nil**, todos zeros, e o UUID **max**, todos uns, ambos usados como sentinelas. A versão 2 existe historicamente (uma variante DCE Security) mas raramente é vista na prática e não é algo que você escolheria hoje.

## Escolhendo pela intenção

A família é grande, mas a escolha costuma ser rápida assim que você nomeia o que precisa. Para um identificador opaco e impossível de adivinhar, sem ordenação, use **v4**. Para um identificador estável derivado deterministicamente de dados existentes, use **v5**. Para uma chave ordenada no tempo que indexa bem, use **v7**. As versões mais antigas baseadas em tempo (v1, v6) importam principalmente para compatibilidade com sistemas existentes, e a v8 está ali quando você genuinamente precisa codificar sua própria estrutura. Quando você cola um UUID na ferramenta e ela relata a versão, esse único dígito lhe diz qual dessas receitas o produziu.
