题解 | #密码强度等级#
密码强度等级
https://www.nowcoder.com/practice/52d382c2a7164767bca2064c1c9d5361
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
// Write your code here
while ((line = await readline())) {
console.log(getResult(line))
}
})();
function getResult(data) {
let score = 0;
let isHasUpperLower = false;
let isHasUpperOrLower = false;
let isHasNumber = false;
let isHasChar = false;
if (data.length <= 4) {
score += 5
} else if (data.length >= 5 && data.length <= 7) {
score += 10
} else if (data.length >= 8) {
score += 25
}
let str1 = data.replace(new RegExp(/[a-zA-Z]/g), "*");
let str2 = data.replace(new RegExp(/[a-z]/g), "*");
let str3 = data.replace(new RegExp(/[A-Z]/g), "*");
if (str1 == str2 || str1 == str3) {
isHasUpperOrLower = true
score += 10
} else if (str1 != str2 && str1 != str3) {
isHasUpperLower = true;
score += 20
}
let str4 = data.replace(/[0-9]/g, " ");
let numberNum = str4.split(" ").length - 1
if (numberNum == 1) {
isHasNumber = true
score += 10
}
if (numberNum > 1) {
isHasNumber = true
score += 20
}
let str5 = data.replace(/[^0-9a-zA-z]/g, "*")
let charNum = str5.split("*").length - 1
if (charNum == 1) {
isHasChar = true
score += 10
}
if (charNum > 1) {
isHasChar = true
score += 25
}
if (isHasUpperLower) {
if (isHasNumber && isHasChar) {
score += 5
}
} else {
if (isHasUpperOrLower) {
if (isHasChar && isHasNumber) {
score += 3
} else if (isHasNumber) {
score += 2
}
}
}
if (score >= 90) {
return "VERY_SECURE";
} else if (score >= 80) {
return "SECURE";
} else if (score >= 70) {
return "VERY_STRONG";
} else if (score >= 60) {
return "STRONG";
} else if (score >= 50) {
return "AVERAGE";
} else if (score >= 25) {
return "WEAK";
} else {
return "VERY_WEAK";
}
}
