【每日一题】 牛客 密码强度等级

题目链接 点此跳转
题目要求:
在这里插入图片描述

解题思路:
将每个加分项都写成一个方法,思路逻辑清晰,依次完成每一个加分方法,再写一个比较等级的方法,最后再main函数里面输出即可:

代码如下:

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Stack;

public class TestDemo   {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        while (scanner.hasNext()){
            String password=scanner.nextLine();
            System.out.println(getLevel(password));
        }
        scanner.close();
    }
    public static String getLevel(String password){
        int sum=0;
        sum+=lengthAdd(password);
        sum+=zmAdd(password);
        sum+=numAdd(password);
        sum+=symbolAdd(password);
        sum+=rewordAdd(password);

        if (sum>=90){
            return "VERY_SECURE";
        }else if (sum>=80){
            return "SECURE";
        }else if (sum>=70){
            return "VERY_STRONG";
        }else if (sum>=60){
            return "STRONG";
        }else if (sum>=50){
            return "AVERAGE";
        }else if (sum>=25){
            return "WEAK";
        }else {
            return "VERY_WEAK";
        }
    }

    public static int lengthAdd(String password){
        if (password.length()<=4){
            return 5;
        }else if (password.length()>=5 && password.length()<=7){
            return 10;
        }else {
            return 25;
        }
    }

    public static int zmAdd(String password){
        int lower=0;
        int upper=0;
        for (int i = 0; i < password.length(); i++) {
            String ch=String.valueOf(password.charAt(i));
            if (ch.matches("[A-Z]")){
                upper++;
            }else if (ch.matches("[a-z]")){
                lower++;
            }
        }
        if (upper!=0 && lower!=0){
            return 20;
        }else if ((lower!=0 && upper==0) || (lower==0 && upper!=0)){
            return 10;
        }else {
            return 0;
        }
    }

    public static int numAdd(String password){
        int num=0;
        for (int i = 0; i < password.length(); i++) {
            if (password.charAt(i)>='0' && password.charAt(i)<='9'){
                num++;
            }
        }
        if (num==0){
            return 0;
        }else if (num==1){
            return 10;
        }else {
            return 20;
        }
    }

    public static int symbolAdd(String password){
        int numSymbol=0;
        for (int i = 0; i < password.length(); i++) {
            char ch=password.charAt(i);
            if ((ch>=0x21 && ch<=0x2F) || (ch>=0x3A && ch<=0x40) || (ch>=0x5B && ch<=0x60) || (ch>=0x7B && ch<=0x7E)){
                numSymbol++;
            }
        }
        if (numSymbol==0){
            return 0;
        }else if (numSymbol==1){
            return 10;
        }else{
            return 25;
        }
    }

    public static int rewordAdd(String password){
        int numPsd=numAdd(password);
        int zmPsd=zmAdd(password);
        int symbolPsd=symbolAdd(password);
        if (zmPsd!=0 && numPsd!=0 && symbolPsd==0){
            return 2;
        } else if (zmPsd==10 && numPsd!=0 && symbolPsd!=0){
            return 3;
        }else if (zmPsd==20 && numPsd!=0 && symbolPsd!=0){
            return 5;
        }else {
            return 0;
        }
    }
}

  • over
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值