Вот один из способов сделать это.
const PASSWORD_LENGTH = 20;
const uppercase = ["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"];
const lowercase = ["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"];
const numbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
const symbols = ["!", "#", "$", "&", "%", "'", "(", ")", "*", "+", "-", "/", ":", ";", "<", "=", ">", "?", "@", "^", "_", "~", "`", "{", "|", "}", "."];
function generatePassword(useUpper, useLower, useNumbers, useSymbols)
{
return []
.reduce((collection, item) => {
if (useUpper) collection.push(item);
return collection;
}, uppercase)
.reduce((collection, item) => {
if (useLower) collection.push(item);
return collection;
}, lowercase)
.reduce((collection, item) => {
if (useNumbers) collection.push(item);
return collection;
}, numbers)
.reduce((collection, item) => {
if (useSymbols) collection.push(item);
return collection;
}, symbols)
.sort(() => Math.random() - 0.5)
.slice(0, PASSWORD_LENGTH)
.join('');
}
console.log(generatePassword(true, true, true, true));
console.log(generatePassword(true, false, false, true));
Теперь для шагов мы используем индикаторы логического типа (useUpper, useLower, useNumbers, useSymbols)
, чтобы указать нам, какие массивы нам нужно сложить вместе.
Мы l oop над каждым возможным массивом, чтобы разрешить цепочку, и if (use%%%) collection.append
просто добавляет элемент в нашу коллекцию символов. Могло бы быть несколько условных выражений, но для этого потребовалось бы изменить массив.
.reduce((collection, item) => {
if (useUpper) collection.push(item);
return collection;
}, uppercase)
После добавления всех необходимых элементов мы видим вызов метода сортировки массива, .sort(() => Math.random() - 0.5)
это просто перетасовывает массив вокруг, поэтому мы не получаем ту же последовательность символов.
Затем мы slice
выключаем часть массива, начинающуюся с индекса 0 и равную длине PASSWORD_LENGTH
.
Затем мы просто join
массив вместе с пустым разделителем строк, и теперь у нас есть наш пароль.
Обратите внимание, это далеко не самое эффективное решение.