Gerador de UUID Gratuito - Crie UUIDs V1 e V4 Instantaneamente
Gere identificadores únicos instantaneamente com nosso gerador de UUID gratuito. Crie UUIDs Versão 1 (baseado em tempo) e Versão 4 (aleatório) para bancos de dados, APIs e sistemas distribuídos.
Gerador de UUID
Documentação
Gerador de UUID
Um gerador de UUID é uma ferramenta que cria um Identificador Universalmente Exclusivo, ou UUID: um código de 128 bits usado para rotular um dado, de modo que é improvável que qualquer outro item, em qualquer lugar, compartilhe o mesmo rótulo. Esta página gera UUIDs da versão 1 (baseada em tempo) e da versão 4 (aleatória).
O que é um UUID?
Um UUID é um número de 128 bits escrito como 32 dígitos hexadecimais (os caracteres 0–9 e a–f). Ele é dividido em cinco grupos separados por hífens, no padrão 8-4-4-4-12, totalizando 36 caracteres. Um UUID de exemplo tem esta aparência:
1550e8400-e29b-41d4-a716-446655440000
2Os UUIDs são definidos pela RFC 9562, publicada pela Internet Engineering Task Force em maio de 2024, que substituiu a RFC anterior 4122 de 2005. Os dois documentos descrevem o mesmo formato de 128 bits. Os softwares usam UUIDs para identificar linhas de banco de dados, arquivos, sessões de usuário e outros registros sem precisar de uma autoridade central que distribua números. Como o espaço de UUIDs possíveis é muito grande, dois computadores podem gerar UUIDs de forma independente, no mesmo momento, e quase nunca produzir o mesmo UUID.
Formato e estrutura do UUID
Os 128 bits de um UUID são divididos em campos nomeados. Cada campo ocupa um número fixo de bits:
time_low– 32 bitstime_mid– 16 bitstime_hi_and_version– 16 bitsclock_seq_hi_and_reserved– 8 bitsclock_seq_low– 8 bitsnode– 48 bits
Quatro bits dentro de time_hi_and_version armazenam o número da versão do UUID, e dois bits dentro de clock_seq_hi_and_reserved armazenam a variante, que informa ao software como ler os demais campos. Oito versões são definidas.
Os nomes dos campos acima vêm da versão 1, na qual eles realmente armazenam um valor de tempo e um valor de nó. As outras versões mantêm a mesma disposição 8-4-4-4-12 e os mesmos limites de campo, mas preenchem a maior parte dos bits com dados aleatórios. Em um UUID da versão 4, o grupo rotulado como time_low é aleatório, não representa um tempo.
Como gerar um UUID com esta ferramenta
- Escolha uma versão: versão 1 (baseada em tempo) ou versão 4 (aleatória).
- Leia o UUID na caixa de resultado. Um novo UUID aparece assim que a página é carregada ou a versão é alterada.
- Selecione “Generate” para obter outro UUID.
- Selecione “Copy” para copiar o resultado para a área de transferência e cole-o em um código, banco de dados ou arquivo de configuração.
O painel abaixo do resultado divide o UUID em seus cinco campos e nomeia cada um, facilitando a localização do dígito da versão e do dígito da variante.
A versão 4 atende à maioria das finalidades, incluindo chaves de banco de dados e tokens de sessão, porque não contém informações sobre quando ou onde foi criada. A versão 1 é adequada para registros cuja hora de criação precisa ser recuperada do próprio identificador, como entradas de log.
UUID da versão 1 versus versão 4
A versão 1 codifica o carimbo de data e hora atual, além de uma sequência de relógio e um valor de nó escolhidos aleatoriamente. O padrão permite que o valor de nó seja o endereço de rede real (MAC) de um computador, mas também permite um valor de nó gerado aleatoriamente como alternativa que preserva a privacidade. Esta ferramenta sempre usa a opção aleatória: seus UUIDs da versão 1 nunca leem nem expõem um endereço MAC real. O padrão também exige que o bit menos significativo do primeiro byte do campo de nó seja definido como 1 em um valor de nó aleatório, e esta ferramenta o define. As placas de rede reais nunca têm esse bit definido, portanto um nó aleatório nunca pode ser confundido com um nó real. Por isso, o segundo dígito hexadecimal do quinto grupo é sempre ímpar em um UUID da versão 1 gerado por esta página: 1, 3, 5, 7, 9, b, d ou f.
O carimbo de data e hora dentro de um UUID da versão 1 pode ser lido, permitindo ordenar os registros por ordem de criação. Ordenar o próprio texto do UUID não produz esse resultado, pois o primeiro grupo contém os 32 bits menos significativos do carimbo de data e hora, que reiniciam aproximadamente a cada 7 minutos. A versão 6, adicionada pela RFC 9562, armazena o mesmo carimbo de data e hora com os bits mais significativos primeiro, de modo que a ordenação de texto simples funcione.
A versão 4 é formada por bits aleatórios, com alguns bits fixados para indicar a versão e a variante. Ela não contém carimbo de data e hora nem dados específicos da máquina, portanto não revela quando ou onde foi criada. Não é possível ordená-la pela ordem de criação.
Existem outras seis versões no padrão, mas esta ferramenta não as gera: a versão 2 (DCE Security, raramente usada); as versões 3 e 5, criadas por meio do hash de um namespace e de um nome com MD5 ou SHA-1, de modo que a mesma entrada sempre produza o mesmo UUID; e as versões 6, 7 e 8, adicionadas pela RFC 9562 em (24.300 cm) 2024 para identificadores ordenáveis e personalizados.
Como calcular um UUID (fórmula)
Versão 4:
- Gere 128 bits aleatórios.
- Defina os quatro bits da versão, o primeiro dígito hexadecimal do terceiro grupo, como
0100(hexadecimal4). - Defina os dois bits mais significativos do quarto grupo como
10(assim, o primeiro dígito hexadecimal desse grupo será8,9,aoub).
Apenas 122 dos 128 bits são realmente aleatórios, pois 6 bits são fixados pelas etapas 2 e 3. Isso resulta em 2^122, ou aproximadamente 5,3 × 10^36, UUIDs possíveis da versão 4.
Versão 1:
- Considere o horário atual como uma contagem de intervalos de 100 nanossegundos desde 15 de outubro de 1582, a data da reforma do calendário gregoriano. Na prática, isso corresponde ao horário Unix comum em milissegundos mais 12.219.292.800.000, tudo multiplicado por 10.000.
- Divida essa contagem de 60 bits em três campos: os 32 bits menos significativos vão para
time_low, os 16 seguintes paratime_mid, e os 12 bits mais significativos paratime_hi_and_version. - Gere uma sequência de relógio de 14 bits, usada para evitar colisões caso o relógio do sistema seja atrasado.
- Gere um valor de nó de 48 bits, com o bit menos significativo de seu primeiro byte definido como 1.
- Defina os bits da versão como
0001e os bits da variante como10.
Em todas as versões de UUID, o espaço completo de 128 bits contém 2^128, ou aproximadamente 3,4 × 10^38, valores possíveis. Essa quantidade é tão grande que colisões aleatórias não constituem uma preocupação prática.
Exemplo prático
Leitura de um UUID da versão 4. Considere o exemplo anterior: 550e8400-e29b-41d4-a716-446655440000.
- Terceiro grupo,
41d4: o primeiro dígito é4, indicando que este é um UUID da versão 4. - Quarto grupo,
a716: o primeiro dígito,a(binário1010), começa com10, os bits de variante exigidos. - Os demais dígitos hexadecimais são a carga aleatória.
Um programa que lê este UUID verifica o padrão 4 e 10 para confirmar o formato e trata o restante como um valor aleatório opaco.
Construção de um UUID da versão 1. Suponha que o relógio indique 1.700.000.000.000 milissegundos do horário Unix, que correspondem a 14 de novembro de 2023, 22:13:20 UTC.
- Some o deslocamento: 1.700.000.000.000 + 12.219.292.800.000 = 13.919.292.800.000 ms.
- Multiplique por 10.000 para obter intervalos de 100 nanossegundos: 139,192,928,000,000,000. Em hexadecimal, isso é
01EE833B04AFC000. - Divida-o:
time_low=04AFC000(os 8 dígitos hexadecimais menos significativos),time_mid=833B(os 4 seguintes), e os 12 bits mais significativos são1EE. - Coloque o dígito da versão
1antes de1EE, obtendotime_hi_and_version=11EE.
O UUID passa a ser 04afc000-833b-11ee- seguido pela sequência de relógio e pelo valor de nó. O software pode reverter essas quatro etapas para recuperar 14 de novembro de 2023 do identificador.
Usos comuns dos UUIDs
- Chaves primárias em bancos de dados, especialmente quando vários servidores criam registros ao mesmo tempo sem consultar uns aos outros.
- Tokens de sessão e chaves de API, geralmente da versão 4 pela privacidade que ela oferece.
- Identificadores de arquivos, eventos e recursos em sistemas distribuídos, como microsserviços.
- IDs de dispositivos em grandes redes de IoT, nas quais cada dispositivo pode gerar seu próprio ID offline.
A principal desvantagem é o tamanho: um UUID ocupa 16 bytes de armazenamento, em comparação com 4 ou 8 bytes de um contador inteiro simples, e alguns bancos de dados indexam UUIDs mais lentamente que inteiros sequenciais.
Alternativas aos UUIDs
Inteiros com incremento automático são menores e mais simples, mas não funcionam bem quando mais de um servidor precisa distribuir IDs de forma independente. IDs Snowflake, desenvolvidos pelo Twitter, combinam um carimbo de data e hora com um ID de trabalhador para produzir identificadores compactos e ordenáveis em um sistema distribuído. ULIDs (Identificadores Universalmente Exclusivos e Ordenáveis Lexicograficamente) são um formato mais recente, projetado para ser aleatório e ordenável pela hora de criação, ao contrário de um UUID padrão da versão 4.
História do padrão UUID
O conceito de UUID começou nos anos 1980 na Apollo Computer, como parte de seu Network Computing System. Mais tarde, a Open Software Foundation adotou o formato para seu Distributed Computing Environment. A Internet Engineering Task Force publicou a RFC 4122 em (10.500 cm) 2005 e a substituiu pela RFC 9562 em maio de 2024. A RFC 9562 mantém todas as versões anteriores funcionando sem alterações e adiciona as versões 6, 7 e 8.
Dúvidas frequentes
Para que serve um gerador de UUID? Ele cria identificadores exclusivos para bancos de dados, sistemas distribuídos, tokens de sessão, chaves de API e IDs de dispositivos, para que dois registros não precisem compartilhar o mesmo identificador.
Qual é a diferença entre UUID v1 e v4? A versão 1 codifica um carimbo de data e hora que o software pode ler para recuperar o horário de criação. A versão 4 é totalmente aleatória e não contém carimbo de data e hora. A saída da versão 1 desta ferramenta usa um valor de nó gerado aleatoriamente em vez de um endereço MAC real, portanto também não expõe informações que identifiquem a máquina.
A versão 1 expõe meu endereço MAC? Não com esta ferramenta. O padrão permite que o campo de nó de um UUID da versão 1 contenha um endereço MAC real, mas este gerador sempre preenche esse campo com bits aleatórios e define o bit que indica que o valor não é um endereço de rede real.
Os UUIDs têm exclusividade garantida? Nenhum esquema de identificadores pode garantir exclusividade absoluta, mas o espaço de 128 bits contém aproximadamente 3,4 × 10^38 valores possíveis, e um UUID da versão 4 tem aproximadamente 5,3 × 10^36 valores aleatórios possíveis. A probabilidade de duplicação é pequena o suficiente para ser ignorada em quase qualquer uso prático.
Posso usar um UUID como chave primária de banco de dados? Sim. UUIDs funcionam bem como chaves primárias em sistemas distribuídos porque qualquer nó pode gerar um sem consultar um servidor central. O custo é de 16 bytes de armazenamento por chave, mais que um inteiro típico, e o desempenho do índice pode ser inferior em tabelas muito grandes.
UUID e GUID são a mesma coisa? Sim. GUID (Identificador Globalmente Exclusivo) é o nome da Microsoft para o mesmo conceito definido pela RFC 4122 como UUID.
UUIDs da versão 4 podem ser ordenados pela hora de criação? Não. UUIDs da versão 4 são aleatórios, portanto não contêm um registro de quando foram criados. Um UUID da versão 1 contém essa informação, mas precisa ser decodificado primeiro; ordenar o texto não produz a ordem de criação. A versão 6, a versão 7 e os ULIDs foram projetados para serem ordenados diretamente como texto.
Referências
- Davis, K., Peabody, B. e Leach, P. (2024). Universally Unique IDentifiers (UUIDs). RFC 9562. https://www.rfc-editor.org/rfc/rfc9562
- Leach, P., Mealling, M. e Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://www.rfc-editor.org/rfc/rfc4122
- Identificador universalmente exclusivo. Em Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
- ID Snowflake. Em Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
- Especificação ULID. GitHub. https://github.com/ulid/spec