/*
* Générateur de mot de passe.
* Daniel Hagnoul
*
* motdepasse(seed, nombre, taille, charString)
*
* Code v1.1.0 2010-06-24
* Texte v1.1.0 2010-06-24
*
* motdepasse() utilise le générateur de nombre aléatoire
* Alea de Johannes Baagøe -- baagoe@baagoe.com, 2010
* https://baagoe.com/en/RandomMusings/javascript/
* Le paramètre seed est un texte ou un nombre,
* choisi au hasard, comportant au minimum 8 caractères,
* qui doit être modifié à chaque appel de la fonction
* motdepasse. Il sert à l'initialisation de l'objet Alea.
*
* Le paramètre nombre fixe la quantité de mots de
* passe qui seront générés.
*
* Le paramètre taille fixe la longueur du mot de passe.
*
* Le paramètre charString est un String contenant
* les caractères qui peuvent figurer dans le mot
* de passe.
*
* taille minimum = 8, c'est la longueur minimale
* recommandée pour un mot de passe.
*
* charString.length > 2 * taille
* charString.length minimum > 2 * taille minimum
*
* Si charString n'est pas valide, il contiendra par
* défaut l'ensemble des caractères ci-dessous :
* "azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN"
* "1234567890"
* "&é@#§^è!çà-_âêûîôäëïöü$*%£µùùáíóúàìòù"
*
* motdepasse() retourne un array de String.
*/
function motdepasse(seed, nombre, taille, charString){
if ((seed === null) || (seed === undefined) || (seed.length < 8)){
return "Erreur ! Le paramètre seed n'est pas défini ou il comporte moins de 8 caractères !";
}
var random = new Alea(seed);
// retourne X tel que : min <= X <= max
function intRandom(min, max){
return Math.floor(random() * (max - min + 1) + min);
}
// retourne un array dans un ordre pseudo-aléatoire
function brouille(tab){
var pos, temp;
for (var j = tab.length - 1; j > 0; j--){
pos = intRandom(0, j + 1);
temp = tab[j];
tab[j] = tab[pos];
tab[pos] = temp;
}
return tab;
}
var nMin = 1; // minimum 1 mot de passe
var tMin = 8; // minimum 8 charactères
var n = parseInt(nombre) || nMin;
if ((typeof n === "number") && (n < nMin)) {
n = nMin;
}
var t = parseInt(taille) || tMin;
if ((typeof t === "number") && (t < tMin)) {
t = tMin;
}
var s = "";
var strs = [];
var chars = [];
if ((charString != null) && (charString != undefined) && (charString.length > 2 * t)){
chars = charString.split('');
} else {
chars = "azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN1234567890&é@#§^è!çà-_âêûîôäëïöü$*%£µùùáíóúàìòù~=+".split('');
}
var charslong = chars.length - 1;
/*
* Une couche d'aléatoire
*
* La distribution des caractères est différente
* à chaque appel de la méthode motdepasse.
*/
chars = brouille(chars);
for (var i = 0; i < n; i++){
s = "";
/*
* Une couche d'aléatoire
*
* On choisit t-1 caractères au hasard.
*/
for (var j = 0 ; j < t ; j++){
s += chars[intRandom(0, charslong)];
}
strs.push(s);
}
return strs;
}