题解 | #密码强度等级#

密码强度等级

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”,某博客继续更新。

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务