华为OJ——密码强度等级

来源:互联网 发布:莫知我哀的莫的用法 编辑:程序博客网 时间:2024/05/15 05:04

题目描述

  密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分。

  • 一、密码长度:

    5 分: 小于等于4 个字符
    10 分: 5 到7 字符
    25 分: 大于等于8 个字符

  • 二、字母:

    0 分: 没有字母
    10 分: 全都是小(大)写字母
    20 分: 大小写混合字母

  • 三、数字:

    0 分: 没有数字
    10 分: 1 个数字
    20 分: 大于1 个数字

  • 四、符号:

    0 分: 没有符号
    10 分: 1 个符号
    25 分: 大于1 个符号

  • 五、奖励:

    2 分: 字母和数字
    3 分: 字母、数字和符号
    5 分: 大小写字母、数字和符号

  • 最后的评分标准:

    = 90: 非常安全
    = 80: 安全(Secure)
    = 70: 非常强
    = 60: 强(Strong)
    = 50: 一般(Average)
    = 25: 弱(Weak)
    = 0: 非常弱
    对应输出为:
    VERY_WEAK,
    WEAK,
    AVERAGE,
    STRONG,
    VERY_STRONG,
    SECURE,
    VERY_SECURE

    请根据输入的密码字符串,进行安全评定。
    注:
    字母:a-z, A-Z
    数字:-9
    符号包含如下: (ASCII码表可以在UltraEdit的菜单view->ASCII Table查看)
    !”#$%&’()*+,-./ (ASCII码:x21~0x2F)
    :;<=>?@ (ASCII<=><=><=><=><=>码:x3A~0x40)
    []^_` (ASCII码:x5B~0x60)
    {|}~ (ASCII码:x7B~0x7E)

  • 输入描述:
    输入一个string的密码

  • 输出描述:
    输出密码等级

  • 示例1
    输入
      38$@NoNoNo
    输出
      VERY_SECURE

实现代码:

package cn.c_shuang.demo82;import java.util.Scanner;/** * 密码强度等级 * @author Cshuang * */public class Main {    public static void main(String[] args){        Scanner in=new Scanner(System.in);        while(in.hasNext()){            String pwd=in.next();            int score=getScore(pwd);            if(score>=90){                System.out.println("VERY_SECURE");            }else if(score>=80){                System.out.println("SECURE");            }else if(score>=70){                System.out.println("VERY_STRONG");            }else if(score>=60){                System.out.println("STRONG");            }else if(score>=50){                System.out.println("AVERAGE");            }else if(score>=25){                System.out.println("WEAK");            }else if(score>=0){                System.out.println("VERY_WEAK");            }        }        in.close();    }    public static int getScore(String pwd){        char[] chs=pwd.toCharArray();        int a=0;//数字个数        int b=0;//符号个数        int c=0;//大写字母个数        int d=0;//小写字母个数        int sum=0;        for(int i=0;i<chs.length;i++){            if(Character.isDigit(chs[i])){                a++;            }else if(Character.isUpperCase(chs[i])){                c++;            }else if(Character.isLowerCase(chs[i])){                d++;            }else{                b++;            }        }        if(chs.length<=4){            sum+=5;        }else if(chs.length>=5&&chs.length<=7){            sum+=10;        }else if(chs.length>=8){            sum+=25;        }        if((c>0&&d==0)||(c==0&&d>0)){            sum+=10;        }else if(c>0&&d>0){            sum+=20;        }        if(a==1){            sum+=10;        }else if(a>1){            sum+=20;        }        if(b==1){            sum+=10;        }else if(b>1){            sum+=25;        }        if((c+d>0)&&(a>0)&&(b==0)){            sum+=2;        }else if((c+d>0)&&(a>0)&&(b>0)){            sum+=3;        }else if((c>0)&&(d>0)&&(a>0)&&(b>0)){            sum+=5;        }        return sum;    }}
原创粉丝点击