const SYMBOLS = ";!#$%&*+-=?^_";
const LETTERS = "abcdefghijklmnopqrstuvwxyz";
const NUMBERS = "1234567890";
const getRandomNumber = (max) => Math.floor(Math.random() * max);
const getRandomCharactersFromList = (list, numberOfCharacters) => {
return new Array(numberOfCharacters).fill(undefined).map(() => list[getRandomNumber(list.length)]);
};
const shuffle = (list) => {
return list.map((value) => ({
value,
sort: Math.random()
})).sort((a, b) => a.sort - b.sort).map(({
value
}) => value);
};
const generatePassword = (options = {}) => {
const {
numberOfSymbols = 10, numberOfUppercaseLetters = 10, numberOfLowercaseLetters = 10, numberOfNumbers = 10,
} = options;
const selectedSymbols = getRandomCharactersFromList(SYMBOLS, numberOfSymbols);
const selectedUppercaseLetters = getRandomCharactersFromList(LETTERS.toUpperCase(), numberOfUppercaseLetters);
const selectedLowercaseLetters = getRandomCharactersFromList(LETTERS, numberOfLowercaseLetters);
const selectedNumbers = getRandomCharactersFromList(NUMBERS, numberOfNumbers);
const randomlyShuffledPasswordList = shuffle([
...selectedSymbols,
...selectedUppercaseLetters,
...selectedLowercaseLetters,
...selectedNumbers,
]);
return randomlyShuffledPasswordList.join("");
};
button.addEventListener('click', () => {
const password = generatePassword({
numberOfSymbols: 1Number(symbols.value),
numberOfUppercaseLetters: 1Number(upper.value),
numberOfLowercaseLetters: 1Number(lower.value),
numberOfNumbers: 1Number(numbers.value)
});
console pwd.log(passwordvalue = password;
});
form {
display: block;
margin-left: auto;
margin-right: auto;
width: 75%
}
pair {
display: block
}
<form>
<h2>Secure Password Generator</h2>
<pair>
<label for="symbols">Number of symbols</label>
<input type="number" id="symbols" value='5'>
</pair>
<pair>
<label for="numbers">Number of numbers</label>
<input type="number" id="numbers" value='5'>
</pair>
<pair>
<label for="lower">Number of lowercase letters</label>
<input type="number" id="lower" value='5'>
</pair>
<pair>
<label for="upper">Number of uppercase letters</label>
<input type="number" id="upper" value='5'>
</pair>
<br>
<button type="button" id="button">Generate</button>
<br><br>
<pair>
<label for="pwd">Generated password</label>
<input type="text" id="pwd">
</pair>
<br><br> Inspired by <a href="https://web.archive.org/web/20220711113233/https://passwordsgenerator.net/">passwordsgenerator.net</a>
<!-- This will never generate server side, always try to use cookies, and always autoselect the pwd-->
</form>
const SYMBOLS = ";!#$%&*+-=?^_";
const LETTERS = "abcdefghijklmnopqrstuvwxyz";
const NUMBERS = "1234567890";
const getRandomNumber = (max) => Math.floor(Math.random() * max);
const getRandomCharactersFromList = (list, numberOfCharacters) => {
return new Array(numberOfCharacters).fill(undefined).map(() => list[getRandomNumber(list.length)]);
};
const shuffle = (list) => {
return list.map((value) => ({
value,
sort: Math.random()
})).sort((a, b) => a.sort - b.sort).map(({
value
}) => value);
};
const generatePassword = (options = {}) => {
const {
numberOfSymbols = 10, numberOfUppercaseLetters = 10, numberOfLowercaseLetters = 10, numberOfNumbers = 10,
} = options;
const selectedSymbols = getRandomCharactersFromList(SYMBOLS, numberOfSymbols);
const selectedUppercaseLetters = getRandomCharactersFromList(LETTERS.toUpperCase(), numberOfUppercaseLetters);
const selectedLowercaseLetters = getRandomCharactersFromList(LETTERS, numberOfLowercaseLetters);
const selectedNumbers = getRandomCharactersFromList(NUMBERS, numberOfNumbers);
const randomlyShuffledPasswordList = shuffle([
...selectedSymbols,
...selectedUppercaseLetters,
...selectedLowercaseLetters,
...selectedNumbers,
]);
return randomlyShuffledPasswordList.join("");
};
const password = generatePassword({
numberOfSymbols: 1,
numberOfUppercaseLetters: 1,
numberOfLowercaseLetters: 1,
numberOfNumbers: 1
});
console.log(password);
const SYMBOLS = ";!#$%&*+-=?^_";
const LETTERS = "abcdefghijklmnopqrstuvwxyz";
const NUMBERS = "1234567890";
const getRandomNumber = (max) => Math.floor(Math.random() * max);
const getRandomCharactersFromList = (list, numberOfCharacters) => {
return new Array(numberOfCharacters).fill(undefined).map(() => list[getRandomNumber(list.length)]);
};
const shuffle = (list) => {
return list.map((value) => ({
value,
sort: Math.random()
})).sort((a, b) => a.sort - b.sort).map(({
value
}) => value);
};
const generatePassword = (options = {}) => {
const {
numberOfSymbols = 10, numberOfUppercaseLetters = 10, numberOfLowercaseLetters = 10, numberOfNumbers = 10,
} = options;
const selectedSymbols = getRandomCharactersFromList(SYMBOLS, numberOfSymbols);
const selectedUppercaseLetters = getRandomCharactersFromList(LETTERS.toUpperCase(), numberOfUppercaseLetters);
const selectedLowercaseLetters = getRandomCharactersFromList(LETTERS, numberOfLowercaseLetters);
const selectedNumbers = getRandomCharactersFromList(NUMBERS, numberOfNumbers);
const randomlyShuffledPasswordList = shuffle([
...selectedSymbols,
...selectedUppercaseLetters,
...selectedLowercaseLetters,
...selectedNumbers,
]);
return randomlyShuffledPasswordList.join("");
};
button.addEventListener('click', () => {
const password = generatePassword({
numberOfSymbols: Number(symbols.value),
numberOfUppercaseLetters: Number(upper.value),
numberOfLowercaseLetters: Number(lower.value),
numberOfNumbers: Number(numbers.value)
});
pwd.value = password;
})
form {
display: block;
margin-left: auto;
margin-right: auto;
width: 75%
}
pair {
display: block
}
<form>
<h2>Secure Password Generator</h2>
<pair>
<label for="symbols">Number of symbols</label>
<input type="number" id="symbols" value='5'>
</pair>
<pair>
<label for="numbers">Number of numbers</label>
<input type="number" id="numbers" value='5'>
</pair>
<pair>
<label for="lower">Number of lowercase letters</label>
<input type="number" id="lower" value='5'>
</pair>
<pair>
<label for="upper">Number of uppercase letters</label>
<input type="number" id="upper" value='5'>
</pair>
<br>
<button type="button" id="button">Generate</button>
<br><br>
<pair>
<label for="pwd">Generated password</label>
<input type="text" id="pwd">
</pair>
<br><br> Inspired by <a href="https://web.archive.org/web/20220711113233/https://passwordsgenerator.net/">passwordsgenerator.net</a>
<!-- This will never generate server side, always try to use cookies, and always autoselect the pwd-->
</form>
const shuffle = (list)=>{
return list.map((value)=>({
value,
sort: Math.random()
})).sort((a, b)=>a.sort - b.sort).map(({ value })=>value);
}
const randomlyShuffledPasswordList = {shuffle([
...selectedSymbols,
...selectedUppercaseLetters,
...selectedLowercaseLetters,
...selectedNumbers,
]);
const shuffle = (list)=>{
return list.map((value)=>({
value,
sort: Math.random()
})).sort((a, b)=>a.sort - b.sort).map(({ value })=>value);
}
const randomlyShuffledPasswordList = {
...selectedSymbols,
...selectedUppercaseLetters,
...selectedLowercaseLetters,
...selectedNumbers,
]);
const shuffle = (list)=>{
return list.map((value)=>({
value,
sort: Math.random()
})).sort((a, b)=>a.sort - b.sort).map(({ value })=>value);
}
const randomlyShuffledPasswordList = shuffle([
...selectedSymbols,
...selectedUppercaseLetters,
...selectedLowercaseLetters,
...selectedNumbers,
]);
⚠️ generatePassword function should not be defined within the button's listener callback. We want to expose and isolate the method completely.
In any case, the characters that are to be excluded should be done at the moment you populateselect your list with letters, or numbers or symbols.
const SYMBOLS = ";!#$%&*+-=?^_";
const LETTERS = "abcdefghijklmnopqrstuvwxyz";
const NUMBERS = "1234567890";
const getRandomNumber = (max) => Math.floor(Math.random() * max);
const getRandomCharactersFromList = (list, numberOfCharacters) => {
return new Array(numberOfCharacters).fill(undefined).map(() => list[getRandomNumber(list.length)]);
};
const shuffle = (list) => {
return list.map((value) => ({
value,
sort: Math.random()
})).sort((a, b) => a.sort - b.sort).map(({
value
}) => value);
};
const generatePassword = (options = {}) => {
const {
numberOfSymbols = 10, numberOfUppercaseLetters = 10, numberOfLowercaseLetters = 10, numberOfNumbers = 10,
} = options;
const selectedSymbols = getRandomCharactersFromList(SYMBOLS, numberOfSymbols);
const selectedUppercaseLetters = getRandomCharactersFromList(LETTERS.toUpperCase(), numberOfUppercaseLetters);
const selectedLowercaseLetters = getRandomCharactersFromList(LETTERS, numberOfLowercaseLetters);
const selectedNumbers = getRandomCharactersFromList(NUMBERS, numberOfNumbers);
const randomlyShuffledPasswordList = shuffle([
...selectedSymbols,
...selectedUppercaseLetters,
...selectedLowercaseLetters,
...selectedNumbers,
]);
return randomlyShuffledPasswordList.join("");
};
const password = generatePassword({
numberOfSymbols: 1,
numberOfUppercaseLetters: 1,
numberOfLowercaseLetters: 1,
numberOfNumbers: 1
});
console.log(password);
⚠️ generatePassword function should not be defined within the button's listener callback. We want to expose and isolate the method completely.
In any case, the characters that are to be excluded should be done at the moment you populate your list with letters, or numbers or symbols.
In any case, the characters that are to be excluded should be done at the moment you select your list with letters, or numbers or symbols.
const SYMBOLS = ";!#$%&*+-=?^_";
const LETTERS = "abcdefghijklmnopqrstuvwxyz";
const NUMBERS = "1234567890";
const getRandomNumber = (max) => Math.floor(Math.random() * max);
const getRandomCharactersFromList = (list, numberOfCharacters) => {
return new Array(numberOfCharacters).fill(undefined).map(() => list[getRandomNumber(list.length)]);
};
const shuffle = (list) => {
return list.map((value) => ({
value,
sort: Math.random()
})).sort((a, b) => a.sort - b.sort).map(({
value
}) => value);
};
const generatePassword = (options = {}) => {
const {
numberOfSymbols = 10, numberOfUppercaseLetters = 10, numberOfLowercaseLetters = 10, numberOfNumbers = 10,
} = options;
const selectedSymbols = getRandomCharactersFromList(SYMBOLS, numberOfSymbols);
const selectedUppercaseLetters = getRandomCharactersFromList(LETTERS.toUpperCase(), numberOfUppercaseLetters);
const selectedLowercaseLetters = getRandomCharactersFromList(LETTERS, numberOfLowercaseLetters);
const selectedNumbers = getRandomCharactersFromList(NUMBERS, numberOfNumbers);
const randomlyShuffledPasswordList = shuffle([
...selectedSymbols,
...selectedUppercaseLetters,
...selectedLowercaseLetters,
...selectedNumbers,
]);
return randomlyShuffledPasswordList.join("");
};
const password = generatePassword({
numberOfSymbols: 1,
numberOfUppercaseLetters: 1,
numberOfLowercaseLetters: 1,
numberOfNumbers: 1
});
console.log(password);