कम से कम एक घटक उत्पन्न करने के लिए मैं इस यादृच्छिक पासवर्ड जनरेटर को कैसे बना सकता हूं? वर्तमान में, ऐसा होता है कि जनरेट किए गए पासवर्ड में कोई संख्या शामिल नहीं होती है, या कोई अन्य प्रकार छूट जाता है। कम से कम प्रकारों को उत्पन्न करने के लिए इसे कैसे बनाया जाए?
$scope.passwordLength = 12;
$scope.addUpper = true;
$scope.addNumbers = true;
$scope.addSymbols = true;
$scope.createPassword = function(){
var lowerCharacters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
var upperCharacters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
var numbers = ['0','1','2','3','4','5','6','7','8','9'];
var symbols = ['!', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~'];
var finalCharacters = lowerCharacters;
if($scope.addUpper){
finalCharacters = finalCharacters.concat(upperCharacters);
}
if($scope.addNumbers){
finalCharacters = finalCharacters.concat(numbers);
}
if($scope.addSymbols){
finalCharacters = finalCharacters.concat(symbols);
}
var passwordArray = [];
for (var i = 1; i < $scope.passwordLength; i++) {
passwordArray.push(finalCharacters[Math.floor(Math.random() * finalCharacters.length)]);
};
$scope.password = passwordArray.join("");
};
4 जवाब
आप जो कर रहे हैं वह सभी संभावित पात्रों (finalCharacters
) की सरणी बना रहा है और इसके 12 वर्ण यादृच्छिक रूप से ले रहा है।
आपको प्रत्येक आवश्यक सरणी (upperCharacters
, numbers
, symbols
) से कम से कम एक यादृच्छिक वर्ण लेने की आवश्यकता है और इसे फेरबदल करें।
एल्गोरिदम उदाहरण:
- निचले वर्णों की संख्या, ऊपरी वर्णों की संख्या, संख्याओं की संख्या और प्रतीकों की संख्या (यानी 3 निचला, 3 ऊपरी, 3 संख्या, 3 प्रतीक) उत्पन्न करना
- प्रत्येक सरणी (
lowerCharacters
,upperCharacters
, ...) से यादृच्छिक वर्णों की उचित संख्या को सरणी में धकेलें (अर्थातpasswordArray
) - फेरबदल
passwordArray
- शामिल हों
passwordArray
पहला कदम हो सकता है:
noOfLowerCharacters = 0
,noOfUpperCharacters = 0
,noOfUpperCharacters = 0
- आवश्यक प्रकारों की संख्या गिनें (
1
,2
या3
)। इसे वेरिएबलnoOfneededTypes
में स्टोर करें। - यादृच्छिक संख्या
1
से लेकर (passwordLength
-noOfneededTypes
) तक लें। इसे वेरिएबलnoOfLowerCharacters
में स्टोर करें। usedTypeCounter
बनाएं। मान को1
पर सेट करें- अगर
addUpper
तो1
से लेकर (passwordLength
-noOfneededTypes
+usedTypeCounter
-noOfLowerCharacters
) तक की रेंज से रैंडम नंबर लें। इसे वेरिएबलnoOfUpperCharacters
में स्टोर करें। बढ़ाएँusedTypeCounter
- अगर
addNumbers
तो1
से लेकर (passwordLength
-noOfneededTypes
+usedTypeCounter
-noOfLowerCharacters
-noOfUpperCharacters
) तक की रेंज से रैंडम नंबर लें। . इसे वेरिएबलnoOfNumbers
में स्टोर करें। - अगर
addSymbols
तोnoOfSymbols
=passwordLength
-noOfLowerCharacters
-noOfUpperCharacters
-noOfNumbers
कार्यान्वयन का उदाहरण:
$scope.passwordLength = 12;
$scope.addUpper = true;
$scope.addNumbers = true;
$scope.addSymbols = true;
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
// shuffle function taken from http://stackoverflow.com/a/12646864/4989081
function shuffleArray(array) {
for (var i = array.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
return array;
}
$scope.createPassword = function() {
var lowerCharacters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
var upperCharacters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
var numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
var symbols = ['!', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~'];
var noOfLowerCharacters = 0,
noOfUpperCharacters = 0,
noOfNumbers = 0,
noOfSymbols = 0;
var noOfneededTypes = $scope.addUpper + $scope.addNumbers + $scope.addSymbols;
var noOfLowerCharacters = getRandomInt(1, $scope.passwordLength - noOfneededTypes);
var usedTypeCounter = 1;
if ($scope.addUpper) {
noOfUpperCharacters = getRandomInt(1, $scope.passwordLength - noOfneededTypes + usedTypeCounter - noOfLowerCharacters);
usedTypeCounter++;
}
if ($scope.addNumbers) {
noOfNumbers = getRandomInt(1, $scope.passwordLength - noOfneededTypes + usedTypeCounter - noOfLowerCharacters - noOfUpperCharacters);
usedTypeCounter++;
}
if ($scope.addSymbols) {
noOfSymbols = $scope.passwordLength - noOfLowerCharacters - noOfUpperCharacters - noOfNumbers;
}
var passwordArray = [];
for (var i = 0; i < noOfLowerCharacters; i++) {
passwordArray.push(lowerCharacters[getRandomInt(1, lowerCharacters.length - 1)]);
}
for (var i = 0; i < noOfUpperCharacters; i++) {
passwordArray.push(upperCharacters[getRandomInt(1, upperCharacters.length - 1)]);
}
for (var i = 0; i < noOfNumbers; i++) {
passwordArray.push(numbers[getRandomInt(1, numbers.length - 1)]);
}
for (var i = 0; i < noOfSymbols; i++) {
passwordArray.push(symbols[getRandomInt(1, symbols.length - 1)]);
}
passwordArray = shuffleArray(passwordArray);
return passwordArray.join("");
};
$scope.password = $scope.createPassword();
काम करते हुए देखें: http://jsfiddle.net/cmoqkkw8/
आप यादृच्छिक पासवर्ड भी बना सकते हैं जब तक कि उनमें से कोई एक आपके मानदंड से मेल नहीं खाता:
function randomPass (length, addUpper, addSymbols, addNums) {
var lower = "abcdefghijklmnopqrstuvwxyz";
var upper = addUpper ? lower.toUpperCase() : "";
var nums = addNums ? "0123456789" : "";
var symbols = addSymbols ? "!#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~" : "";
var all = lower + upper + nums + symbols;
while (true) {
var pass = "";
for (var i=0; i<length; i++) {
pass += all[Math.random() * all.length | 0];
}
// criteria:
if (!/[a-z]/.test(pass)) continue; // lowercase is a must
if (addUpper && !/[A-Z]/.test(pass)) continue; // check uppercase
if (addSymbols && !/\W/.test(pass)) continue; // check symbols
if (addNums && !/\d/.test(pass)) continue; // check nums
return pass; // all good
}
}
कुछ ऐसा ही ओपन सोर्स जेएस उपयोग पर पहले से ही किया जा चुका है - दूसरों की मदद कर सकता है
इसका उपयोग इस साइट पर किया जा रहा है
इस लाइब्रेरी का उपयोग करें https://github.com/fent/randexp.js
इस उत्तर के साथ regex कम से कम एक को अनुमति देने के लिए विशेष वर्ण, एक अपरकेस, एक लोअरकेस (किसी भी क्रम में)