De nombreuses réponses (y compris l'original de celle-ci) ne répondent pas aux exigences de l'OP en matière de nombre de lettres et de chiffres. Voici deux solutions : générale (pas de lettres/chiffres minimums), et avec des règles.
Général :
Je pense que cette solution générale est meilleure que la précédente, car.. :
- c'est plus sûr que la réponse acceptée/la plus votée, et aussi plus polyvalent, car il prend en charge n'importe quel jeu de caractères en respectant la casse
- elle est plus concise que les autres réponses (pour une solution générale, 3 lignes maximum ; peut être une seule ligne)
- il n'utilise que le Javascript natif - aucune installation ou autre librairie n'est requise.
Notez que
- pour que cela fonctionne sur IE, le prototype Array.fill() doit être polyfilled
- si disponible, il vaut mieux utiliser window.crypto.getRandomValues() au lieu de Math.random() (merci à @BenjaminH de l'avoir signalé)
Une ligne de trois :
var pwdChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var pwdLen = 10;
var randPassword = Array(pwdLen).fill(pwdChars).map(function(x) { return x[Math.floor(Math.random() * x.length)] }).join('');
Ou, en guise de remarque :
var randPassword = Array(10).fill("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz").map(function(x) { return x[Math.floor(Math.random() * x.length)] }).join('');
Avec des règles pour les lettres et les chiffres
Maintenant, une variation sur ce qui précède. Cela va générer trois chaînes aléatoires à partir des jeux de caractères donnés (lettre, chiffre, soit) et ensuite brouiller le résultat.
Veuillez noter que l'exemple ci-dessous utilise sort() à des fins d'illustration uniquement. Pour une utilisation en production, remplacez la fonction sort() ci-dessous par une fonction remue-ménage fonction telle que Durstenfeld .
D'abord, en tant que fonction :
function randPassword(letters, numbers, either) {
var chars = [
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", // letters
"0123456789", // numbers
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" // either
];
return [letters, numbers, either].map(function(len, i) {
return Array(len).fill(chars[i]).map(function(x) {
return x[Math.floor(Math.random() * x.length)];
}).join('');
}).concat().join('').split('').sort(function(){
return 0.5-Math.random();
}).join('')
}
// invoke like so: randPassword(5,3,2);
Même chose, en tant que 2-liner (certes, des lignes très longues et laides - et qui ne seront pas une 1-liner si vous utilisez une fonction shuffle appropriée. Ce n'est pas recommandé, mais c'est parfois amusant) :
var chars = ["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz","0123456789", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"];
var randPwd = [5,3,2].map(function(len, i) { return Array(len).fill(chars[i]).map(function(x) { return x[Math.floor(Math.random() * x.length)] }).join('') }).concat().join('').split('').sort(function(){return 0.5-Math.random()}).join('');
7 votes
S'il répond à votre exigence, quelle est la question alors ? En outre, votre exigence de mot de passe forcé est une mauvaise idée.
8 votes
xkcd.com/936
4 votes
new Array(12).fill().map(() => String.fromCharCode(Math.random()*86+40)).join("")
Une solution astucieuse pour produire un mot de passe de 12 caractères avec des caractères spéciaux, des chiffres supérieurs et inférieurs, dans une approche très légère.0 votes
@RobW Pourquoi est-ce une mauvaise idée ? Veuillez vous expliquer !