/ / JavaScript zufälliges Passwort mit einem bestimmten Format - Javascript, node.js, random, Passwörter

JavaScript zufälliges Passwort mit bestimmten Format - Javascript, node.js, zufällig, Passwörter

Ich möchte ein zufälliges Passwort generieren, das das folgende Format berücksichtigt:

  • mindestens ein Großbuchstabe
  • mindestens ein Kleinbuchstabe
  • mindestens eine Ziffer
  • Die Länge sollte mindestens 6 Zeichen betragen

Ich dachte darüber nach und das einzige, woran ich denken konnte, ist eine Funktion, die ziemlich lang und hässlich ist. Könnten Sie mir eine einfachere und effizientere Methode anbieten?

PS: Ich verwende diese Funktion nicht auf der Clientseite, sondern auf der Serverseite in meiner Node.js-Webanwendung.

Antworten:

1 für die Antwort № 1

Hier ist meine Lösung:

/**
* sets of charachters
*/
var upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var lower = "abcdefghijklmnopqrstuvwxyz"
var digit = "0123456789"
var all = upper + lower + digit

/**
* generate random integer not greater than `max`
*/

function rand (max) {
return Math.floor(Math.random() * max)
}

/**
* generate random character of the given `set`
*/

function random (set) {
return set[rand(set.length - 1)]
}

/**
* generate an array with the given `length`
* of characters of the given `set`
*/

function generate (length, set) {
var result = []
while (length--) result.push(random(set))
return result
}

/**
* shuffle an array randomly
*/
function shuffle (arr) {
var result = []

while (arr.length) {
result = result.concat(arr.splice(rand[arr.length - 1]))
}

return result
}
/**
* do the job
*/
function password (length) {
var result = [] // we need to ensure we have some characters

result = result.concat(generate(1, upper)) // 1 upper case
result = result.concat(generate(1, lower)) // 1 lower case
result = result.concat(generate(1, digit)) // 1 digit
result = result.concat(generate(length - 3, all)) // remaining - whatever

return shuffle(result).join("") // shuffle and make a string
}

console.log(password(6))

-1 für die Antwort № 2

Wie wäre es, wenn wir die Formate in Strings platzieren und in ein Array platzieren können, dann eines auswählen und zufällig ein Element in diesem Sub-Array-Element auswählen:

var uppers = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var lowers = "abcdefghijklmnopqrstuvwxyz";
var digits = "01234567890";
var all = uppers + lowers + digits;
var choices = [uppers,lowers,digits];
var checks = [];

var password = "";
var ranLength = Math.ceil(Math.random()*10)+3;
for(var i=0; i<ranLength; i++){
var choice = choices[Math.ceil(Math.random()*3)-1];
var choiceItem = choice[Math.ceil(Math.random()*(choice.length))-1]
password += choiceItem;
}

for(var i=0; i<3; i++){ // Append needed values to end
var choice = choices[i];
var choiceItem = choice[Math.ceil(Math.random()*(choice.length))-1]
password += choiceItem;
}

password = password.split("").sort(function(){
return 0.5 - Math.random();
}).join("");

alert(password);

Editiert: Entschuldigung, ich habe einen kleinen Fehler gemacht. Fest.


-2 für die Antwort № 3

Versuche dies...

var randomstring = Math.random().toString(36).slice(-8);