infoalloggi-monorepo/apps/infoalloggi/src/lib/basicPwGenerator.ts

31 lines
1 KiB
TypeScript
Raw Normal View History

2025-08-04 17:45:44 +02:00
export const generatePassword = (length = 10) => {
const upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const lower = "abcdefghijklmnopqrstuvwxyz";
const numbers = "0123456789";
const special = "!@#$%^&*()_+[]{}<>?/|";
// Ensure at least one from each required set
const required = [
upper[Math.floor(Math.random() * upper.length)],
lower[Math.floor(Math.random() * lower.length)],
numbers[Math.floor(Math.random() * numbers.length)],
special[Math.floor(Math.random() * special.length)],
];
const allChars = upper + lower + numbers + special;
const remainingLength = length - required.length;
const passwordArr = [...required];
for (let i = 0; i < remainingLength; i++) {
passwordArr.push(allChars[Math.floor(Math.random() * allChars.length)]);
}
// Fisher-Yates shuffle
for (let i = passwordArr.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[passwordArr[i], passwordArr[j]] = [passwordArr[j], passwordArr[i]];
}
return passwordArr.join("");
};