题解 | #密码强度等级#
密码强度等级
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 () {
const secret = await readline();
let res = secret.length>=8?25:secret.length>=5?10:5;//密码长度
const letter = [0,0];
let numberCnt = 0,signCnt = 0;
for(const c of secret){
//字母
if(c>="a"&&c<="z") letter[0] = 10;
else if(c>="A"&&c<="Z") letter[1] = 10;
else if(c>="0"&& c<="9") numberCnt++;
else if((c.charCodeAt()>=0x21&&c.charCodeAt()<=0x2F)||(c.charCodeAt()>=0x3A&&c.charCodeAt()<=0x40)||(c.charCodeAt()>=0x5B&&c.charCodeAt()<=0x60)||(c.charCodeAt()>=0x7B&&c.charCodeAt()<=0x7E))signCnt++;
}
res+=letter.reduce((pre,cur)=>pre+cur);//字母
res+=numberCnt>1?20:numberCnt>0?10:0;//数字
res+=signCnt>1?25:signCnt>0?10:0;//符号
if(signCnt && numberCnt){
if(letter.reduce((pre,cur)=>pre+cur)===20){
res += 5;//5 分: 大小写字母、数字和符号
}else if(letter.reduce((pre,cur)=>pre+cur)===10){
res += 3;//3 分: 字母、数字和符号
}
}else if(numberCnt && letter.reduce((pre,cur)=>pre+cur)>0){
res+=2;//2 分: 字母和数字
}
const rank = [[90,"VERY_SECURE"],[80,"SECURE"],[70,"VERY_STRONG"],[60,"STRONG"],[50,"AVERAGE"],[25,"WEAK"],[0,"VERY_WEAK"]];
for(const [score,output] of rank){
if(res >= score) return console.log(output);
}
}()
华为OD,我昵称“od400” 文章被收录于专栏
华为OD机试刷题历程,因涉及华为权益,牛客不允许更新了。我昵称“od400”,某博客继续更新。
查看17道真题和解析