Pular para o conteúdo principal

Geradores

Estes geradores produzem identificadores e valores de preenchimento no seu navegador. A aleatoriedade vem da Web Crypto API — a mesma fonte criptográfica que a plataforma usa para chaves — e não de Math.random nem de um servidor que viu todos os identificadores que emitiu a você.

12 ferramentasSó local

Converter

Inspecionar

Gerar

Quando usar uma ferramenta de gerar que roda no navegador?

Um gerador parece o único tipo de ferramenta em que não poderia importar de forma alguma onde o trabalho acontece. Importa duas vezes.

O primeiro motivo é que um gerador do lado do servidor viu cada identificador que deu a você. Se eles viram chaves primárias, chaves de API, tokens de convite ou qualquer outra coisa com autoridade anexada, um terceiro agora tem uma lista deles. É improvável que isso seja explorado e ainda assim é uma exposição totalmente evitável, porque o navegador tem uma fonte de aleatoriedade criptográfica perfeitamente boa embutida.

O segundo é a qualidade. Uma quantidade desanimadora de geradores online chama Math.random(), que é um PRNG rápido e não criptográfico. A saída dele é uniforme o suficiente para parecer aleatória e é previsível a partir de uma sequência curta de valores anteriores. Para um fixture de teste isso é inofensivo. Para qualquer coisa que controle acesso é uma vulnerabilidade, e nada na saída distingue os dois casos. Estas ferramentas usam exclusivamente crypto.getRandomValues().

A escolha entre versões de UUID é a decisão que mais vale acertar, e costuma ser tomada por acidente. v4 — aleatoriedade pura — é o padrão em quase todo lugar, e é uma chave primária ruim em escala por um motivo estrutural: valores aleatórios se espalham por um índice B-tree, então cada insert toca uma página diferente, a taxa de acerto do cache despenca e o índice se fragmenta. As equipes em geral descobrem isso como uma degradação lenta e inexplicada no throughput de escrita, em algum ponto depois dos primeiros milhões de linhas.

v7 corrige isso colocando um timestamp em milissegundos nos 48 bits iniciais, então identificadores gerados próximos no tempo se ordenam próximos, e os inserts anexam à ponta quente do índice. É o padrão certo para chaves de banco de dados sob o RFC 9562. A contrapartida é real e vale registrar: um identificador v7 publica o próprio momento de criação para qualquer pessoa que consiga lê-lo, então, para um identificador público em que isso é sensível, v4 ainda é o correto.

v1 está incluído por completude e para ler dados legados. Ele codifica um timestamp e, na forma original, o endereço MAC da máquina que o gerou — foi por isso que caiu em desuso, e é por isso que poder inspecionar um é mais útil do que poder criar um. Se você precisa converter um valor gerado em outra representação, a ferramenta de Base64 fica ao lado, e o Formatador de JSON arruma um arquivo de seed no qual você colou identificadores.

Perguntas frequentes

Devo usar UUID v4 ou v7 como chave primária de banco de dados?

v7 para qualquer coisa que vá para uma coluna indexada. v4 é 122 bits de aleatoriedade, então inserts consecutivos caem em pontos aleatórios de um índice B-tree: cada insert suja uma página diferente, o índice se fragmenta, e o throughput de escrita se degrada de forma mensurável conforme a tabela cresce. v7 coloca um timestamp de 48 bits em milissegundos nos bits altos, então os valores recém-gerados se ordenam próximos e os inserts anexam à mesma região do índice. v4 continua sendo a escolha certa quando o identificador é público e não deve vazar o momento de criação.

Estes UUIDs são realmente aleatórios, ou é um PRNG com seed?

Eles vêm de crypto.getRandomValues(), o gerador criptograficamente seguro da Web Crypto API, que sorteia do pool de entropia do sistema operacional. Essa é a mesma fonte usada para material de chaves, e é categoricamente diferente de Math.random(), que é um PRNG rápido e não criptográfico cuja saída é previsível a partir de um punhado de valores anteriores.

O que é o RFC 9562 e ele muda alguma coisa?

O RFC 9562, publicado em maio de 2024, substituiu o RFC 4122 como padrão de UUID. Ele manteve v1 e v4 inalterados e adicionou as versões ordenadas no tempo v6, v7 e v8. Na prática, a mudança que importa é o v7 virar padrão, em vez de uma coleção de extensões de fornecedores incompatíveis entre si, como ULID e KSUID.

Dá para gerar muitos de uma vez?

Sim — a geração em lote vai até 10.000 por vez, com saída como linhas simples, strings entre aspas, um array JSON ou um delimitador à sua escolha, pronta para colar em um arquivo de seed ou em um fixture. A geração é síncrona e quase instantânea; o limite prático é o que você consegue colar, não o que o navegador consegue produzir.

Dá para verificar o que é um UUID existente?

Sim. Cole um no inspetor e ele reporta a versão, a variante e — para v1, v6 e v7 — o timestamp embutido decodificado em uma data legível. É o jeito mais rápido de descobrir se os identificadores de uma tabela são ordenados no tempo, e se eles vazam um momento de criação que você não pretendia publicar.

O que mais existe no ToolsByUs?

ToolsByUs — Geradores