t_sh0w

uniquePasswordGenerator

Mar 4th, 2026
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. Generate a password.
  3. Password should have:
  4. 1. At least one lowercase letter. That’s any letter from a to z.
  5. 2. At least one uppercase letter. That any from A to Z.
  6. 3. At least one number. Any number from 0 to 9 will do
  7. 4. And at least one special character. This can be: !, @, # , * , (, ) , % or any other.
  8. 5. And length should be random and between 8-20 characters.
  9. Each new password must be unique.
  10. Test@129 - valid
  11. TestAbc - invalid
  12. */
  13.  
  14. // Plan (MVP):
  15. // /x/ no input
  16. // /x/ initialize arrays with chars
  17. // /x/ use Math.random(range) for:
  18. // // /x/ password length
  19. // // /x/ curr char
  20. // /x/ flags for missing char type
  21. // /x/ while missing char type, keep generating random char on random index, override flags
  22. // /x/ while list of unique passwords inlucludes generated password, keep generating new passwords
  23.  
  24. const generatePassword = () => {
  25.   const result = [];
  26.   const lowercaseLetters = ['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'];
  27.   const uppercaseLetters = ['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'];
  28.   const numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
  29.   const specialChars = ['!', '@', '#', '*', '(', ')', '%'];
  30.   const allChars = [...lowercaseLetters, ...uppercaseLetters, ...numbers, ...specialChars];
  31.   const randomLength = Math.trunc(Math.random() * 13) + 8;
  32.  
  33.   for (let i = 0; i < randomLength; i++) {
  34.     const randomChar = allChars[Math.trunc(Math.random() * 69)];
  35.     result.push(randomChar);
  36.   }
  37.  
  38.   let hasNoLowercaseLetters = lowercaseLetters.some(char => result.includes(char)) === false;
  39.   let hasNoUppercaseLetters = uppercaseLetters.some(char => result.includes(char)) === false;
  40.   let hasNoNumbers = numbers.some(char => result.includes(char)) === false;
  41.   let hasNoSpecialChars = specialChars.some(char => result.includes(char)) === false;
  42.  
  43.   while (hasNoLowercaseLetters || hasNoUppercaseLetters || hasNoNumbers || hasNoSpecialChars) {
  44.     const randomChar = allChars[Math.trunc(Math.random() * 69)];
  45.     const randomIndex = Math.trunc(Math.random() * randomLength);
  46.     result[randomIndex] = randomChar;
  47.     hasNoLowercaseLetters = lowercaseLetters.some(char => result.includes(char)) === false;
  48.     hasNoUppercaseLetters = uppercaseLetters.some(char => result.includes(char)) === false;
  49.     hasNoNumbers = numbers.some(char => result.includes(char)) === false;
  50.     hasNoSpecialChars = specialChars.some(char => result.includes(char)) === false;
  51.   }
  52.  
  53.   return result.join('');
  54. };
  55.  
  56. const uniquePasswords = [];
  57.  
  58. const generateUniquePassword = () => {
  59.   let result = generatePassword();
  60.  
  61.   while (uniquePasswords.includes(result)) {
  62.     result = generatePassword();
  63.   }
  64.  
  65.   uniquePasswords.push(result);
  66.   return result;
  67. };
  68.  
  69. console.log(generateUniquePassword());
  70. console.log(generateUniquePassword());
  71. console.log(generateUniquePassword());
  72. console.log(generateUniquePassword());
  73.  
Advertisement
Add Comment
Please, Sign In to add comment