Gerador de Usernames à partir de lista de nomes

Esses dias vi um pedido na Lista Debian Users Portuguese (DUP) solicitando ajuda com um script que recebesse um arquivo com uma lista de nomes e gerasse uma lista de usernames. O email era esse:


Olá pessoal da lista, tudo bem?

Precisava de um auxilio de vocês ma geração (ou otimização) de um script.

Tenho uma rede com samba como PDC em uma escola e agora na volta as aulas preciso gerar usuários e senhas para todos. Eu tenho um script que utilizo a tempos que pega uma lista com nome, username e senha e gera tudo pra mim. Mas eu preciso gerar esta lista.

O que eu queria era conseguir com a lista de nomes, gerar os usernames de forma que o username seja o primeiro e o ultimo nomes juntos (sem espaço) com letras minusculas e a senha seria de 6 digitos, todos numéricos. Caso o username fosse repetido, o sistema me avisaria (Andre Silva e Andre pereira rodrigues silva por exemplo seria repetido). Eu (ainda) não tenho experiencia com programação, apenas um pouco de bash.

Fico grato por qualquer ajuda

Abraço a todos

Daniel
 Após meditar um pouco no problema do Daniel, criei este programa em PHP.

Preparação:
O programa utiliza a versão de linha de comando do PHP, então é necessária a instalação do mesmo. Testei o programa apenas com o PHP5, mas teoricamente deve funcionar com o PHP4 sem problemas. No Debian, instale o pacote php5-cli (ou php4-cli).
aptitude install php5-cli
Baixe o programa (disponível aqui , via GoogleDocs. Copie e cole em um arquivo de texto, com o nome de geraUsername.php), dê permissão de execução (chmod +x geraUsername.php) e execute o programa da seguinte maneira:
./geraUsername.php lista.txt > lista2.txt
Exemplo de uso:
Suponha uma lista de nomes como essa abaixo (os nomes são fictícios, quaisquer semelhanças com nomes reais são meras coincidências):

José da Silva
José Saramago da Silva
Juca Pirama
Daniel de Andrade
Daniel Souza
Odorico Paraguaçú
Alcebíades Nogueira
A saída do programa (o arquivo gerado em lista2.txt) seria essa:

alcebiadesnogueira,Alcebíades Nogueira
danielandrade,Daniel de Andrade
danielsouza,Daniel Souza
josesilva,José Saramago da Silva
josesilva,José da Silva
jucapirama,Juca Pirama
odoricoparaguacu,Odorico Paraguaçú

Lista de Usernames duplicados

josesilva => 2
O que o programa faz:

  • Faz a conversão de letras: Ç vira C, vogais acentuadas (com til, trema, crase, acentos agudos e/ou circunflexos) viram as mesmas vogais porém sem nenhum acento (ã vira a, ï vira i, ù vira u, etc)
  • Converte todo o texto para minusculas;
  • Insere o separador, caso haja algum configurado (veja mais abaixo)

Perceba que existem duas ocorrências do username josesilva. O programa alerta para isso na lista de usernames duplicados, no final da listagem. Cabe a você corrigir isso manualmente, o que é facilitado por causa da listagem ser ordenada pelos usernames, fazendo com que usernames iguais fiquem juntos.

O programa permite ainda uma personalização do modo como os usernames são criados: você pode definir um separador a ser inserido entre o nome e o sobrenome. Normalmente utiliza-se ponto (.), hífen (-) ou underscore (_) como elemento separador. Assim, o username josesilva ficaria jose.silva, jose-silva ou jose_silva, dependendo do separador utilizado. Não utilize vírgula como separador, pois vai "quebrar" a formatação do arquivo de saída, já que o mesmo utiliza vírgulas para separar o username do nome do usuário. Para realizar essa configuração, procure pelo texto $separadorUsername = ""; e substitua pelo valor desejado (por exemplo $separadorUsername = ".";).


Bom, é isso. Espero que seja útil para mais alguém. Caso você precise de uma ajudinha com um script, faça um comentário ou mande-me um email que terei prazer em ajudar na medida do possível.

Nenhum comentário: