bateCarimbo.
Identificador público · massa de teste

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

DarkWolf

Adjetivo 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

DarkWolf42

O 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

D4rkW0lf

Parte 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_07

Tudo 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_Wolf e dark_wolf conviverem. 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.
TypeScript
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
}
Normalizar primeiro, validar depois, e deixar a unicidade com o 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.