/* * 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; }