🧰 ToolPicoTodas as ferramentas →

InícioBlog › UUID para nomes de ficheiro e testes

UUID para nomes de ficheiro e testes: 6 usos práticos além da base de dados

Já associaste UUID quase sempre a chaves primárias de base de dados? Há muitos outros lugares onde um identificador único e imprevisível resolve problemas do dia a dia — de nomes de ficheiro que nunca colidem a dados de teste seguros. Este guia percorre seis usos práticos, e explica também porque o UUID offline do Minecraft funciona de forma completamente diferente de uma UUID v4 aleatória.

Índice

1-2. Nomes de ficheiro e diretorias temporárias

Resposta rápida Renomear ficheiros carregados por utilizadores para uma UUID v4 evita colisões de nome (dois ficheiros chamados foto.jpg de utilizadores diferentes) sem precisar de consultar a base de dados antes de gravar.

Imagina um serviço de upload de imagens usado por milhares de pessoas em simultâneo (cenário ilustrativo). Se o servidor guardasse cada ficheiro com o nome original enviado pelo browser, seria só uma questão de tempo até dois utilizadores enviarem, coincidentemente, um ficheiro com o mesmo nome — sobrescrevendo um ao outro se o sistema de armazenamento não tratasse isso com cuidado. Gerar uma UUID v4 no momento do upload e usá-la como nome físico do ficheiro (por exemplo, 3fa85f64-5717-4562-b3fc-2c963f66afa6.jpg) resolve isto sem precisar de nenhuma consulta prévia — a probabilidade de duas UUID v4 coincidirem é tão baixa que, na prática, pode ser tratada como impossível.

O mesmo raciocínio aplica-se a diretorias temporárias criadas por scripts de build, pipelines de processamento em lote, ou tarefas agendadas: usar um UUID como nome da pasta de trabalho (ex. /tmp/build-a1b2c3d4.../) garante que execuções concorrentes do mesmo script nunca leem ou escrevem acidentalmente nos ficheiros umas das outras.

Dica prática: para este uso, prefere o formato «Simples» (sem chavetas, sem prefixo urn:uuid:) e em minúsculas — é o mais compatível entre sistemas de ficheiros Windows, macOS e Linux.

3-4. Dados de teste e correlação de pedidos

Resposta rápida UUID em lote permitem popular ambientes de teste ou demonstração com identificadores únicos e fictícios, sem reutilizar IDs reais de produção; também servem para correlacionar pedidos em sistemas com múltiplos serviços.

Ao preparar uma base de dados de teste (cenário exemplo: uma equipa de QA precisa de 200 utilizadores fictícios para testar um novo painel), gerar 200 UUID v4 de uma só vez — esta ferramenta suporta lotes até 1000 — dá identificadores prontos a usar, sem qualquer relação com dados reais de clientes. Isto evita duas armadilhas comuns: copiar IDs reais de produção para ambientes menos protegidos, e criar colisões se o ambiente de teste for mais tarde comparado ou fundido com dados reais.

Outro uso frequente em sistemas com vários microsserviços é o ID de correlação (correlation ID, ou trace ID): quando um pedido de um utilizador passa por vários serviços internos, atribuir-lhe uma UUID logo à entrada permite depois procurar essa mesma UUID nos registos (logs) de cada serviço, reconstruindo o percurso completo do pedido para efeitos de depuração — sem depender de nenhum campo de negócio que possa mudar ao longo do processo.

5. Tokens e ligações de acesso único

Resposta rápida Uma UUID v4 aleatória, por ter 122 bits de entropia, pode servir de base para tokens de acesso único (como ligações de confirmação de email ou de reposição de palavra-passe), desde que combinada com um prazo de expiração no lado do servidor.

Um exemplo comum (ilustrativo): um formulário de subscrição de newsletter envia um email de confirmação com uma ligação do tipo /confirmar/<uuid>. Como a UUID v4 é imprevisível e não segue nenhum padrão sequencial, ninguém consegue adivinhar a ligação de outro utilizador tentando variar um número. Isto não substitui boas práticas de segurança — o servidor deve sempre limitar quanto tempo esse token continua válido, e invalidá-lo assim que for usado —, mas o próprio UUID já elimina a possibilidade de adivinhação por tentativa e erro simples.

6. O caso especial: UUID offline do Minecraft

Resposta rápida O UUID offline do Minecraft não é aleatório: calcula-se a partir do nome do jogador com um hash MD5 sobre a cadeia "OfflinePlayer:<nome>", tornando-se assim totalmente determinístico e reproduzível — o oposto de uma UUID v4.

Vale a pena conhecer este caso porque ilustra bem a diferença entre os dois grandes tipos de UUID que esta ferramenta já gera: aleatórias (v4, v7) e determinísticas baseadas em nome (v3/v5). Quando um servidor de Minecraft corre em modo offline — ou seja, sem verificar a conta oficial Mojang/Microsoft do jogador —, precisa na mesma de atribuir um identificador único e estável a cada nome de utilizador, para que plugins, permissões e dados de jogador guardados continuem associados ao mesmo jogador entre sessões. A solução adotada pelo Minecraft é aplicar MD5 à cadeia OfflinePlayer:<nome do jogador> e depois ajustar alguns bits do resultado para que este pareça uma UUID v3 válida (versão e variante corretas).

O resultado prático é que o mesmo nome de jogador produz sempre o mesmo UUID offline, em qualquer servidor que use o mesmo algoritmo — tal como o separador «v3 / v5 Nome» desta ferramenta gera sempre a mesma UUID para o mesmo namespace e nome. A diferença é que o Minecraft usa um prefixo de texto fixo próprio (OfflinePlayer:) em vez de um namespace RFC 4122 estândar, e MD5 em vez de, por exemplo, SHA-1.

Ainda não implementado: um mini-gerador de UUID offline do Minecraft (que aplicasse este cálculo específico automaticamente a partir de um nome de jogador, claramente identificado como «apenas para modo offline») é uma ideia de mini-ferramenta que pondera-se adicionar a esta página no futuro — hoje ainda não existe aqui, e o separador «v3 / v5 Nome» não reproduz este algoritmo exato por não usar o prefixo nem o MD5 da forma específica do Minecraft.

Precisas de gerar UUID v4, v1, v3/v5 ou v7 agora, em lote e com opções de formato?

Experimentar o Gerador UUID →

Perguntas frequentes

Porque usar UUID em vez do nome original de um ficheiro carregado?
Quando uma aplicação aceita ficheiros de utilizadores diferentes (por exemplo, uma galeria de imagens ou um serviço de upload de documentos), dois utilizadores podem enviar ficheiros com exatamente o mesmo nome, como foto.jpg ou relatorio.pdf. Se o servidor guardar o ficheiro com esse nome tal como veio, o segundo upload pode sobrescrever o primeiro. Ao renomear cada ficheiro recebido para uma UUID v4 (ex. 3fa85f64-5717-4562-b3fc-2c963f66afa6.jpg), a probabilidade de colisão torna-se estatisticamente insignificante, e o nome original pode continuar a ser guardado à parte, numa base de dados, para exibição ao utilizador.
É seguro usar sempre o mesmo formato de UUID em nomes de ficheiro em todos os sistemas operativos?
O formato padrão de UUID (32 carateres hexadecimais e 4 hífens, todos em minúsculas) é seguro em Windows, macOS e Linux, porque usa apenas carateres alfanuméricos e o hífen, sem espaços nem símbolos especiais que exijam escape. Convém evitar o formato entre chavetas ({}) em nomes de ficheiro, já que as chavetas podem exigir escape em alguns terminais e scripts de shell; a opção «Simples» (sem chavetas) desta ferramenta é a mais indicada para este uso.
Como usar UUID para criar dados de teste realistas sem usar dados reais de utilizadores?
Ao preparar uma base de dados de teste ou um ambiente de demonstração, gerar centenas de UUID v4 em lote permite criar rapidamente identificadores únicos para registos fictícios (utilizadores, encomendas, sessões) sem reutilizar nenhum ID real de produção nem correr o risco de colidir com um ID já existente se os dois ambientes forem depois combinados. É uma alternativa mais segura a copiar diretamente IDs de produção para um ambiente de testes.
O que é o UUID offline do Minecraft e como se calcula?
Em modo offline (sem autenticação na conta Mojang/Microsoft), um servidor de Minecraft calcula o UUID de um jogador a partir do seu nome de utilizador, aplicando um hash MD5 à cadeia de texto "OfflinePlayer:<nome>" e ajustando depois alguns bits para que o resultado pareça uma UUID v3 válida. Isto é diferente de uma UUID v4 aleatória: é totalmente determinístico — o mesmo nome de jogador produz sempre o mesmo UUID offline, em qualquer servidor offline, o que permite a plugins e mapas de mundo reconhecerem sempre o mesmo jogador mesmo sem ligação à conta oficial.
Consigo gerar o UUID offline do Minecraft com esta ferramenta?
Atualmente não; esta é uma ideia para uma mini-ferramenta futura, que ainda não está implementada nesta página. Hoje, o separador «v3 / v5 Nome» do Gerador UUID permite gerar UUID determinísticas a partir de um namespace e de um nome, o que é o mesmo princípio geral (hash + nome = UUID reproduzível), mas não replica exatamente o algoritmo MD5 com o prefixo OfflinePlayer: usado pelos servidores de Minecraft em modo offline.
Nota: este artigo tem fins informativos e educativos sobre usos comuns de identificadores únicos; não substitui uma análise de arquitetura específica do teu sistema. Os cenários e números apresentados (contagens de ficheiros, utilizadores fictícios) são exemplos ilustrativos, não medições reais.