Gerador de Nicks e usernames
Combina adjetivo e substantivo em quatro estilos — limpo, com números, leet e com underscore — e devolve até 100 de uma vez, para popular cadastros de homologação e exercitar a validação do campo de nick.
Os usernames gerados aqui são fictícios, feitos para popular cadastros de teste. A ferramenta não verifica disponibilidade em plataforma alguma. Use apenas em desenvolvimento, homologação e demonstração. Uso permitido e proibido.
Os usernames saem de combinações aleatórias de duas listas de palavras. A ferramenta não consulta plataforma nenhuma e não tem como saber se o nome está livre em algum lugar.
Username é identificador, não nome de pessoa
O campo de username cumpre um papel que o nome civil não cumpre: precisa ser único dentro do sistema, aparecer em URL, caber em um índice e sobreviver a comparação caractere a caractere. As restrições que o cercam são de identificador, não de antropônimo — e é isso que um teste precisa exercitar. Uma lista de nomes de pessoa não substitui: nomes repetem, têm acento, espaço e apóstrofo, e nenhum sistema os usa como chave de login.
Ao contrário de CPF, CNH ou RG, um username não carrega dígito verificador nem estrutura interna: não existe conta que diga se ele é consistente. A única verificação possível é contra o banco de dados, o que empurra todo o peso para as regras de formato e para a restrição de unicidade.
O que este gerador devolve
Cada item combina um adjetivo e um substantivo de listas fixas em inglês: de 6 a 18 caracteres, apenas ASCII, sempre começando por letra. É massa de caminho feliz — boa para encher uma tabela até o limite de 100 por lote, ver a interface com nomes curtos e longos e confirmar que o índice único aguenta inserções em série. Os valores hostis (acento, emoji, espaço no fim, admin, string vazia) não saem daqui: eles vão na última seção e precisam ser escritos à mão.
Os quatro estilos e o que cada um testa
Limpo
DarkWolfAdjetivo e substantivo concatenados com iniciais maiúsculas, entre 6 e 14 caracteres, só letras ASCII. É o caminho feliz de praticamente qualquer regra de username.
Com números
DarkWolf42O nick limpo com um a quatro algarismos ao final. Serve para regras que exigem ao menos um dígito e para as que limitam quantos algarismos são aceitos.
Leet
D4rkW0lfParte das letras a, e, i, o, s e t vira 4, 3, 1, 0, 5 e 7. Produz dígitos no meio da string, onde validações posicionais mal escritas costumam falhar.
Underscore
dark_wolf_07Tudo em minúsculas, dois underscores e dois algarismos finais. É o formato de slug técnico, o mesmo que APIs e sistemas internos costumam aceitar.
A opção Aleatório mistura os quatro, que é o que se quer ao popular um banco: o lote sai com caixas, comprimentos e conjuntos de caracteres diferentes, em vez de cem variações do mesmo formato.
Regras de username, plataforma por plataforma
Não há padrão comum entre serviços: cada regra responde a uma decisão tomada antes, como o tamanho da coluna, o formato das rotas ou o nome virar parte de um endereço de e-mail. Quem integra dois sistemas acaba preso ao conjunto mais restrito dos dois.
Tamanho
Mínimos costumam ficar entre 2 e 5 caracteres, máximos entre 15 e 30. Escolhido o intervalo, os testes que importam são quatro: mínimo menos um, mínimo, máximo e máximo mais um. Um detalhe silencioso mora na contagem — "a".length em JavaScript conta unidades UTF-16, então um emoji fora do plano básico conta 2 e um nome que o usuário vê como curto pode estourar o limite. Se o campo aceita qualquer coisa além de ASCII, conte pontos de código, e lembre que a coluna do banco pode estar contando bytes.
Conjunto de caracteres e posição
O núcleo aceito quase em todo lugar é letra, dígito e underscore; ponto e hífen aparecem em parte dos serviços. Mais importante que a lista são as regras de posição, que quase sempre existem e quase sempre são esquecidas no regex: não começar por dígito (colide com rotas que já usam identificadores numéricos), não começar por underscore (por convenção o prefixo marca conta interna, e ele ordena antes de tudo em listagens), não terminar com ponto e não repetir separadores. O padrão ^[a-z][a-z0-9_]{2,29}$ cobre o início, mas não impede dark__wolf nem dark_ — essas duas precisam de checagem separada.
Nomes reservados
Toda aplicação que serve perfis em /:username tem um conjunto de nomes que não pode entregar: admin, root, api, www, login, suporte, null, undefined e, principalmente, cada rota de primeiro nível do próprio app. Um usuário registrado como configuracoes pode tornar /configuracoes ambíguo ou inalcançável. Duas precauções resolvem a maior parte: a lista mora junto da definição das rotas, não em um arquivo esquecido, e a comparação acontece depois da normalização — senão Admin e ADMIN passam direto.
Unicode e homóglifos
Aceitar acento e alfabetos não latinos é razoável, mas obriga a normalizar antes de comparar. A forma NFKC resolve a camada mais óbvia: ligaduras viram letras separadas, dígitos de largura total viram dígitos comuns, variantes de compatibilidade colapsam. O que ela não faz é tratar homóglifos — caracteres distintos que o navegador desenha igual, como o а cirílico e o a latino. São dois pontos de código diferentes: passam por qualquer índice único e produzem dois perfis visualmente idênticos, que é o mecanismo clássico de personificação. Impedir isso exige guardar, além do nome, um esqueleto derivado de uma tabela de confusáveis e comparar o esqueleto no cadastro. Restringir a entrada a ASCII resolve na marra, e é o que a maioria dos serviços faz.
Casos-limite que o cadastro precisa tratar
- Espaço que não parece espaço. Copiar e colar traz espaço no fim, espaço não separável e caracteres de largura zero. Corte antes de validar, e confirme que o corte alcança mais que
U+0020. - Unicidade sem distinção de caixa. Índice único sobre a coluna crua deixa
Dark_Wolfedark_wolfconviverem. Grave a forma normalizada em uma coluna própria e indexe essa — ou use um tipo/collation que ignore caixa — mantendo o valor digitado apenas para exibição. - Corrida entre checar e gravar. O endpoint que responde disponível enquanto o usuário digita é conveniência de interface. Dois cadastros simultâneos passam pela checagem e chegam juntos ao
insert: a unicidade tem de vir da restrição no banco, com a violação tratada e devolvida como erro de campo. - Troca de nome. Se o username antigo volta ao pool no mesmo instante, links, menções e caches passam a apontar para outra pessoa. Decida entre reservar por um período, manter histórico com redirecionamento ou bloquear a liberação — e escreva o teste para a decisão tomada.
- Campo de login que aceita username ou e-mail. A regra costuma ser a presença de
@, o que só funciona enquanto o username não puder contê-lo. Se a regra de formato mudar depois, o login quebra em silêncio. - Exibição. Dezoito caracteres já bastam para estourar um card estreito ou uma coluna de tabela. Trunque na interface com o valor completo acessível, em vez de cortar no banco.
- Saída para HTML, URL e log. Username é entrada de usuário e termina em caminho, cabeçalho e linha de log. Escape na renderização, codifique no endereço e nunca concatene direto em consulta.
const PADRAO = /^[a-z][a-z0-9_]{2,29}$/;
// Rotas do app + contas de sistema. Mantenha perto do roteador.
const RESERVADOS = new Set([
"admin", "root", "api", "www", "login", "conta",
"suporte", "sobre", "ajuda", "null", "undefined",
]);
/** Forma canônica: é ela que vai para o índice único e para a comparação. */
export function normalizarUsername(entrada: string): string {
return entrada.normalize("NFKC").trim().toLowerCase();
}
export function validarUsername(entrada: string): string | null {
const valor = normalizarUsername(entrada);
if (!PADRAO.test(valor)) {
return "Use de 3 a 30 caracteres — letras, números e underscore, começando por letra.";
}
if (valor.includes("__") || valor.endsWith("_")) {
return "Underscore não pode ser repetido nem encerrar o nome.";
}
if (RESERVADOS.has(valor)) {
return "Este nome é reservado pelo sistema.";
}
return null; // null = aprovado; a unicidade ainda é decidida pelo banco
}Para montar o restante da massa — fichas completas, e-mails e documentos coerentes ao lado dos usernames — veja o gerador de pessoas e o guia sobre fixtures, seeds e factories. Os padrões de validação dos demais campos estão em regex para documentos brasileiros, e o que fazer com dados pessoais fora de produção está em LGPD e dados de teste.
Perguntas frequentes
Para que serve um gerador de usernames em testes?
Para popular cadastros que exigem um identificador público único — perfis, contas de demonstração, ambientes de homologação de redes internas. Diferente do nome da pessoa, o username tem regras próprias de tamanho e de caracteres permitidos, e testar isso pede uma massa específica.
Quais estilos estão disponíveis?
Limpo, em que duas palavras são concatenadas com iniciais maiúsculas; com números ao final; leet, com letras substituídas por algarismos parecidos; e com underscore separando as palavras. Cada estilo exercita um conjunto diferente de caracteres na validação.
Por que testar usernames com números e underscore?
Porque as regras variam muito entre plataformas: algumas proíbem underscore no início, outras limitam a quantidade de algarismos, outras recusam nomes só numéricos. Gerar as quatro variações de uma vez cobre os casos que um formulário precisa aceitar ou rejeitar de forma consistente.
O que é o estilo leet?
É uma convenção de escrita surgida em fóruns da internet em que certas letras são trocadas por algarismos visualmente parecidos: A vira 4, E vira 3, I vira 1, O vira 0 e S vira 5. Em testes ele é útil porque produz strings mistas de letras e números com aparência de nome, boas para exercitar validações.
O username gerado está disponível em alguma plataforma?
A ferramenta apenas sugere combinações e não consulta serviço nenhum. Se a intenção for usar o nome de verdade em algum lugar, é preciso conferir a disponibilidade na própria plataforma.