Gerador de senhas flexível com Javascript
3 years ago by Jaime NetoHoje em dia é comum vermos cada site com regras bem diferentes pra a criação de senhas, e boa parte deles são opção de gerar automaticamente as senhas. Então, eis aqui uma sugestão de como criar, com Javascript, um gerador de senhas flexível o bastante para se adaptar às regras de cada site.
A ideia é que possamos definir grupos de caracteres, e para cada grupo, o número mínimo de caracteres requeridos para nossas senhas. Também podemos definir o tamanho da senha a ser gerada. Se a soma das quantidades mínimas para cada grupo de caractere não for menor que o tamanho da senha, novos caracteres, dentre os dos grupos, serão adicionados para completá-la:
function generatePassword(length, rules) {
if (!length || length == undefined) {
// default length
length = 8;
}
if (!rules || rules == undefined) {
// default rules
rules = [
{chars: "abcdefghijklmnopqrstuvwxyz", min: 3},
{chars: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", min: 2},
{chars: "0123456789", min: 2},
{chars: "!@#$&*?|%+-_./:;=()[]{}", min: 1}
];
}
var allChars = "", allMin = 0;
rules.forEach(function(rule) {
allChars += rule.chars;
allMin += rule.min;
});
if (length < allMin) {
length = allMin;
}
rules.push({chars: allChars, min: length - allMin});
var pswd = "";
rules.forEach(function(rule) {
if (rule.min > 0) {
pswd += shuffleString(rule.chars, rule.min);
}
});
return shuffleString(pswd);
}
Veja que utilizamos uma função para embaralhar os caracteres do string. Precisamos criá-la também:
function shuffleString(str, maxlength) {
var shuffledString = str.split('').sort(function(){return 0.5-Math.random()}).join('');
if (maxlength > 0) {
shuffledString = shuffledString.substr(0, maxlength);
}
return shuffledString;
}
Agora vamos testar nossa função, adicionando nossas próprias regras. Para cada grupo de caracteres, podemos definir o número mínimo requerido em nossa senha. Se desejarmos, podemos simplesmente excluir um desses grupos, caso, por exemplo, não queiramos que se use caracteres especiais nas senhas, ou podemos excluir e acrescentar apenas alguns caracteres nos grupos, ou mesmo criar novos grupos:
var rules = [
{chars: "abcdefghijklmnopqrstuvwxyz", min: 4},
{chars: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", min: 1},
{chars: "0123456789", min: 3},
{chars: "!@#$&*", min: 2}
];
var pswd = generatePassword(15, rules);
alert(pswd);
Temos agora uma função bastante flexível para se adaptar as regras de senha de cada caso.