O que é um UUID v4 e como é gerado?
Um UUID v4 (Universally Unique Identifier, versão 4) é um identificador de 128 bits, dos quais 122 são preenchidos com aleatoriedade pura e os restantes 6 bits são fixados para indicar a versão e a variante. A representação canónica consiste em 36 caracteres hexadecimais no formato 8‑4‑4‑4‑12, por exemplo f47ac10b-58cc-4372-a567-0e02b2c3d479. O «4» no terceiro grupo indica que se trata da versão 4; os dois bits mais significativos do quarto grupo (o primeiro caractere após o segundo hífen) codificam a variante, tipicamente 10 para a variante RFC 4122.
O gerador aqui descrito produz um ou mais UUID v4 utilizando a função crypto.randomUUID() do navegador, que recorre a uma fonte de aleatoriedade criptograficamente segura. Cada identificador é independente e instantaneamente gerado no lado do cliente, sem qualquer comunicação com um servidor. O utilizador pode escolher o número de UUIDs (de 1 a 100) e, sempre que altera qualquer opção — formato, contagem, maiúsculas ou hífenes — a lista é imediatamente regenerada.
A estrutura de 122 bits aleatórios significa que, ao contrário de UUID v1 (baseado no tempo e no endereço MAC) ou v7 (ordenado temporalmente), os UUID v4 não transportam qualquer informação de momento ou local de criação. São, por isso, verdadeiramente não sequenciais e adequados para cenários onde a correlação temporal deve ser evitada.
Aleatoriedade e probabilidade de colisão
Com 122 bits de entropia, a probabilidade de colisão entre dois UUID v4 gerados independentemente é extremamente baixa. Para se ter uma noção concreta, a fórmula de probabilidade de pelo menos uma colisão num conjunto de n identificadores é aproximadamente:
P ≈ 1 - e^(-n² / (2 × 2¹²²))
Substituindo valores práticos: se gerar mil milhões de UUIDs (10⁹), a probabilidade de uma única colisão é inferior a 10⁻¹⁸. Para efeitos de comparação, é muito mais provável que um erro de hardware ou uma falha na fonte de aleatoriedade produza um UUID duplicado do que o acaso puro. Esta característica torna o UUID v4 a escolha padrão para sistemas distribuídos onde não existe coordenação central e cada nó precisa de gerar chaves únicas sem consultar os outros.
É importante sublinhar que o gerador aqui apresentado não armazena estado nem mantém um contador. Cada UUID é independente, e a aleatoriedade é fornecida pelo sistema operativo através de interfaces como /dev/urandom (Linux), CryptGenRandom (Windows) ou SecRandomCopyBytes (iOS/macOS). O navegador expõe essa capacidade via a API Web Crypto, que é a mesma utilizada para geração de chaves TLS e tokens de autenticação.
Impacto na indexação de bases de dados
A utilização de UUID v4 como chave primária em bases de dados relacionais apresenta um custo bem conhecido: a fragmentação de índices. Ao contrário de chaves sequenciais (como INT AUTO_INCREMENT) ou de identificadores ordenados temporalmente (ULID, UUID v7), os UUID v4 distribuem-se aleatoriamente no espaço dos 128 bits. Quando inseridos num índice B‑tree, os novos valores podem cair em qualquer posição, obrigando a frequentes reequilíbrios e divisões de páginas.
Para bases de dados que armazenam milhões de registos, o impacto prático é um aumento significativo do tempo de escrita e da utilização de espaço em disco, especialmente em tabelas com índices clustered (como no InnoDB do MySQL). Há duas formas comuns de mitigar este problema:
- Usar uma chave primária numérica (por exemplo,
BIGINT AUTO_INCREMENT) para o índice clustered e armazenar o UUID apenas como chave candidata ou identificador lógico. - Substituir o UUID v4 por UUID v7, que mantém 48 bits de timestamp e ordena cronologicamente, reduzindo drasticamente a fragmentação.
Contudo, em sistemas onde a aleatoriedade é um requisito de segurança — por exemplo, para impedir a enumeração de registos — a fragmentação é um custo aceitável. O gerador desta página permite produzir rapidamente conjuntos de UUID v4 para testes de carga e avaliação desse impacto antes de uma decisão de arquitetura.
Comparação com identificadores baseados no tempo
O mesmo seletor de formato que permite escolher UUID v4 também inclui UUID v7, ULID e NanoID. Cada um serve um propósito diferente:
| Formato | Bits aleatórios | Ordenação temporal | Tamanho | Indicação de momento |
|---|---|---|---|---|
| UUID v4 | 122 | Não | 36 chars (com hífenes) | Nenhuma |
| UUID v7 | 74 (restantes são timestamp de 48 bits + variante) | Sim (cronológica) | 36 chars | Precisão de milissegundos |
| ULID | 80 (restantes são timestamp de 48 bits) | Sim | 26 chars (base32) | Precisão de milissegundos |
| NanoID | Variável (tipicamente 126) | Não | 21 chars (padrão) | Nenhuma |
A principal vantagem do UUID v4 sobre as alternativas ordenadas é a imprevisibilidade total: dois UUIDs gerados no mesmo milissegundo não têm qualquer relação entre si. Isto é desejável para tokens de API, IDs de sessão ou identificadores de transações financeiras onde a sequência temporal não deve ser exposta. Já o UUID v7 e o ULID são preferíveis para chaves primárias em bases de dados com elevada taxa de escritas, pois os novos valores são inseridos perto do fim do índice, mantendo a árvore mais compacta.
O gerador desta página expõe opções de formatação (maiúsculas, hífenes) que são exclusivas dos formatos UUID (v4 e v7). As outras opções (ULID, NanoID) utilizam controlos diferentes, porque as suas representações canónicas não incluem hífenes e a capitalização tem regras próprias.
Personalização do formato: maiúsculas e hífenes
Duas opções adicionais permitem adaptar a saída do gerador:
Maiúsculas (Uppercase) – Quando ativada, as letras hexadecimais a a f são convertidas para A a F. A norma RFC 4122 não impõe maiúsculas ou minúsculas, mas alguns sistemas (por exemplo, bases de dados que comparam cadeias de forma sensível a maiúsculas) podem exigir consistência. Notar que o separador «4» no terceiro grupo mantém‑se como dígito; apenas as letras são capitalizadas.
Incluir hífenes (Include hyphens) – Se desativado, os quatro hífenes são removidos, resultando numa cadeia de 32 caracteres hexadecimais contínuos (por exemplo, f47ac10b58cc4372a5670e02b2c3d479). Isto é útil para contextos onde os hífenes não são permitidos, como em nomes de ficheiros, URLs ou campos de formulário que impõem restrições de caracteres. Porém, a ausência de hífenes dificulta a leitura manual e pode quebrar a validação em sistemas que esperam o formato canónico.
Ambas as opções são aplicadas instantaneamente e regeneram a lista completa de UUIDs. O utilizador pode copiar um único identificador clicando sobre ele (o que o coloca na área de transferência) ou copiar todos de uma só vez através do botão «Copiar tudo», após o qual surge a mensagem «Copiado tudo!».
Geração local no navegador
Uma vantagem frequentemente ignorada deste tipo de gerador é a privacidade. Como todos os cálculos são feitos localmente no navegador, nenhum dado é enviado para um servidor externo. A página utiliza a API crypto.getRandomValues() combinada com a implementação interna do navegador para o formato UUID v4. Em navegadores modernos (Chrome, Firefox, Safari, Edge), esta API está disponível sem necessidade de bibliotecas adicionais.
Em termos de desempenho, a geração de 100 UUIDs v4 demora menos de um milissegundo na maioria dos dispositivos. O limite de 100 deve‑se apenas a considerações de usabilidade; não há qualquer restrição técnica na página ou no protocolo. Para obter mais identificadores, o utilizador pode executar várias vezes a geração.
A página mostra um estado claro: «Pronto.» quando nenhuma ação foi realizada, e «Gerado.» após a primeira geração. Este feedback visual é especialmente útil quando se alteram opções rapidamente, pois confirma que a lista foi atualizada.
Perguntas frequentes
Quantos UUID v4 posso gerar de cada vez?
Entre 1 e 100, inclusive. Qualquer valor fora deste intervalo é recusado.
Os UUIDs são realmente aleatórios?
Sim. São gerados com crypto.randomUUID(), que utiliza uma fonte de aleatoriedade criptograficamente segura do sistema operativo. Não são utilizados geradores pseudo‑aleatórios de baixa qualidade.
Porque é que o UUID v4 causa fragmentação em bases de dados?
Porque os valores são distribuídos aleatoriamente no espaço de 128 bits. Os índices B‑tree esperam inserções sequenciais; valores aleatórios provocam divisões frequentes de páginas, aumentando a latência de escrita e o espaço ocupado.
O que acontece se eu desativar os hífenes?
O UUID passa a ter 32 caracteres hexadecimais, sem separadores. Continua a ser um identificador válido, mas não segue a representação canónica da RFC 4122.
Posso usar maiúsculas e hífenes ao mesmo tempo?
Sim. As duas opções são independentes. Pode ter UUIDs em maiúsculas com hífenes (padrão) ou sem hífenes, e o mesmo para minúsculas.
O gerador funciona offline?
Sim, desde que a página tenha sido carregada previamente. Não é necessária ligação à Internet para gerar UUIDs, pois tudo é processado localmente.