Gerar UUIDs
Privado — seu arquivo nunca fica armazenado
Qual versão?
Seu UUID aparece aqui.
Como funciona
Escolha uma versão
v4 para tudo o que precisa ser impossível de adivinhar. v7 para chaves de banco de dados. A diferença é explicada na página, e não presumida.
Escolha a quantidade
Um, ou até dez mil de uma vez, com formatação opcional — maiúsculas, chaves, sem hifens ou como lista entre aspas pronta para o código.
Copie
Copie todos ou baixe como arquivo de texto.
Versão 4 ou versão 7, e por que isso importa em um banco de dados
Um UUID tem 128 bits escritos como 32 dígitos hexadecimais no conhecido agrupamento 8-4-4-4-12. Seis desses bits são usados para indicar a versão e a variante, o que deixa 122 bits aleatórios em um UUID versão 4 — o suficiente para você gerar um bilhão por segundo durante um século e ainda ser extremamente improvável ver o mesmo duas vezes. Esse é todo o atrativo: dois sistemas que nunca se comunicaram podem criar identificadores e assumir com segurança que eles nunca vão colidir.
Para isso valer, a aleatoriedade precisa ser real, e aqui ela vem da fonte aleatória criptográfica, e não de um gerador de números aleatórios comum. A diferença importa quando os identificadores são usados como tokens de acesso — um link de redefinição de senha, uma URL de compartilhamento impossível de adivinhar — porque um gerador previsível permite que alguém deduza o próximo valor a partir dos anteriores. Com uma fonte criptográfica, não há nada para prever.
A versão 7 existe porque a versão 4 se comporta mal como chave primária de banco de dados. Ela coloca um timestamp de 48 bits em milissegundos no início e preenche o resto com aleatoriedade, então UUIDs gerados em sequência ficam ordenados na ordem em que foram criados. Parece cosmético, mas não é: uma chave aleatória espalha cada inserção pelo índice inteiro, então cada escrita atinge uma página diferente e o cache deixa de ajudar, enquanto uma chave ordenada por tempo acrescenta sempre em uma ponta. Em uma tabela grande, a diferença na taxa de inserções é considerável, e é por isso que a v7 foi padronizada.
A troca é real e vale ser pesada. Um UUID versão 7 revela a qualquer pessoa que o veja aproximadamente quando ele foi criado, com precisão de milissegundos, e uma sequência deles revela com que velocidade você cria registros. Para uma chave interna, tudo bem. Para um identificador exposto em uma URL — um número de pedido, um link de documento, um id de usuário — é um pequeno vazamento de informação que a versão 4 não tem. Use v7 para a chave primária e v4 para tudo o que é público, se as duas coisas importarem.
Quando você precisa de outra coisa
Gere os UUIDs onde eles são usados. Todo banco de dados e toda linguagem já têm isso — gen_random_uuid() no PostgreSQL, UUID() no MySQL, crypto.randomUUID() em JavaScript, uuid.uuid4() em Python — e gerar um lote no navegador e colar no código serve para uma fixture ou um teste, mas é errado para qualquer coisa que rode em produção.
Se o motivo para usar v7 são chaves ordenáveis, há alternativas que vale conhecer. O ULID codifica a mesma ideia em 26 caracteres, mais curtos e sem diferenciar maiúsculas de minúsculas; identificadores Snowflake cabem em 64 bits, o que reduz pela metade o tamanho do índice em comparação com os 128 de um UUID. E em muitos bancos de dados um inteiro autoincrementado comum ainda é mais rápido e menor que qualquer um deles — UUIDs compensam o custo quando os identificadores precisam ser criados em vários lugares ao mesmo tempo, e não fora disso.
Perguntas frequentes
v4 ou v7 — qual eu quero?
Se for uma chave primária de banco de dados, v7. Se precisar ser impossível de adivinhar — um link de redefinição de senha, um código de convite, um identificador de sessão — v4. Essa é toda a decisão, e a maioria das pessoas nem fica sabendo que havia uma, porque quase todo gerador oferece só v4.
Por que o v4 é ruim como chave de banco de dados?
Porque ele é completamente aleatório, e um índice de banco de dados é ordenado. Novas chaves aleatórias caem em lugares aleatórios do índice, então cada inserção atinge uma página diferente, o cache deixa de ajudar, e o índice se fragmenta e cresce. Em uma tabela grande e movimentada, isso causa uma lentidão mensurável que piora com o tempo. Não é uma preocupação teórica — é o motivo pelo qual a documentação do Postgres e do MySQL hoje trata do assunto.
O que é o UUID v7?
Um UUID cujos primeiros 48 bits são um timestamp em milissegundos, seguidos de aleatoriedade. Ele continua globalmente único e continua tendo 128 bits, mas, como o tempo vem primeiro, UUIDs v7 ficam ordenados na ordem em que foram criados. Novas chaves são acrescentadas ao final do índice em vez de se espalharem por ele, que é exatamente como se comporta um inteiro autoincrementado — com a unicidade de um UUID. Ele foi padronizado na RFC 9562 em 2024 e é a recomendação atual para tabelas novas.
Os UUIDs v7 daqui ficam ordenados mesmo?
Sim, inclusive dentro do mesmo milissegundo, que é a parte que a maioria das implementações erra. Um timestamp só tem resolução de milissegundos, então gerar mil IDs em um loop termina dentro de um único milissegundo — e com bits finais puramente aleatórios esses mil NÃO ficam na ordem em que foram criados. Este gerador usa o contador monotônico descrito na RFC 9562, então um lote é estritamente crescente, sempre. Gere mil e ordene; eles voltam na ordem em que foram criados.
É seguro expor um UUID v7 publicamente?
Com uma coisa em mente: ele revela quando foi criado, com precisão de milissegundos, por definição. Para uma chave de banco de dados, isso costuma ser inofensivo ou até útil. Mas se o momento da criação for sensível, ou se você precisar que o identificador seja impossível de adivinhar, use v4 — o v7 ainda tem 74 bits aleatórios, o que é muito, mas o timestamp dele pode ser lido por qualquer pessoa que tenha o ID.
Eles são aleatórios o suficiente para serem seguros?
Sim. A aleatoriedade vem de `crypto.getRandomValues`, o gerador criptograficamente seguro do navegador, e nunca de `Math.random`. Essa distinção já causou vulnerabilidades reais: `Math.random` é rápido, mas previsível, e tokens de sessão criados com ele já foram adivinhados na prática. Um UUID v4 tem 122 bits aleatórios, o suficiente para que colisões não sejam uma preocupação prática.
Eles são gerados no meu dispositivo?
Sim, inteiramente, e para identificadores isso importa. Um UUID buscado no servidor de outra pessoa é um UUID que outra pessoa já viu — o que anula o propósito se você está gerando um segredo. Estes nunca saem do seu navegador. Depois que a página carregar, desligue o Wi-Fi e ela funciona exatamente igual. Essa é a forma mais simples de confirmar a promessa de privacidade por conta própria, em vez de confiar na nossa palavra.
O que é o UUID nil?
Tudo zero: 00000000-0000-0000-0000-000000000000. É um UUID válido e reservado, usado para significar “nenhum” ou “não definido” onde um null não é possível. O oposto dele, o UUID max, todo formado por f, às vezes é usado como sentinela de ordenação. Os dois são oferecidos aqui porque às vezes são necessários e é chato digitá-los corretamente.
Bom saber: UUIDs versão 4 vêm da fonte aleatória criptográfica do navegador, e não do Math.random, então são seguros para usar como identificadores. A versão 7 incorpora um timestamp em milissegundos, que é o que faz ela ordenar bem — e também significa que revela aproximadamente quando foi criada. Não use v7 quando isso importar.
Coloque esta ferramenta no seu site
Grátis para qualquer blog, página de turma ou artigo de ajuda. Cole um único trecho de código e seus visitantes podem usá-la direto na sua página.
Mais Ferramentas para desenvolvedores
Gerador de hash
MD5, SHA-1, SHA-256, SHA-384 e SHA-512
Codificar Base64
Transforme texto ou um arquivo em Base64
Formatador JSON
Deixe JSON ilegível fácil de ler
Decodificador JWT
Veja o que há dentro de um token, com privacidade
Decodificar Base64
Transforme Base64 de volta em texto ou arquivo
Validador JSON
Descubra exatamente onde o JSON está quebrado