Java练习题第二十期:密码强度等级

欢迎来到小猪的博客
希望这期博客能帮到你

前言

如果哪里解析错误或者你不太理解的都可私聊我哈!

一,题目

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

一、密码长度:
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)

对应输出为:

VERY_SECURE
SECURE
VERY_STRONG
STRONG
AVERAGE
WEAK
VERY_WEAK

请根据输入的密码字符串,进行安全评定。

注:
字母:a-z, A-Z
数字:0-9
符号包含如下: (ASCII码表可以在UltraEdit的菜单view->ASCII Table查看)
!"#$%&'()*+,-./ (ASCII码:0x21~0x2F)
:;<=>?@ (ASCII码:0x3A~0x40)
[]^_` (ASCII码:0x5B~0x60)
{|}~ (ASCII码:0x7B~0x7E)

提示:
1 <= 字符串的长度<= 300
输入描述:
输入一个string的密码

输出描述:
输出密码等级
在这里插入图片描述

二,解析

这里对于不同种类的字符得分不同,我们可以现对每一个维度进行单独判断,即对于长度,字母,数字,符号单独判断,最后把所有的单项值根据题目要求相加,输出对应的安全级别。

三,代码

import java.util.Scanner;

public class Main1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
            String s = scanner.nextLine();
            int sum1 = getLen(s);
            int sum2 = getChar(s);
            int sum3 = getNum(s);
            int sum4 = getSym(s);
            int sum =0 ;
            if (sum2==20&&sum3>=1&&sum4>=1){
                sum = sum1+sum2+sum3+sum4+5;
            }else if (sum2==10&&sum3>=1&&sum4>=1){
                sum = sum1 + sum2 + sum3 + sum4+3;
            }else if (sum2==10&&sum3>=1&&sum4==0){
                sum = sum1+sum2+sum3+sum4+2;
            }else {
                sum = sum1+sum2+sum3+sum4;
            }

            if (sum>=90){
                System.out.println("VERY_SECURE");
            }else if (sum>=80){
                System.out.println("SECURE");
            }else if (sum>=70){
                System.out.println("VERY_STRONG");
            }else if (sum>=60){
                System.out.println("STRONG");
            }else if (sum>=50){
                System.out.println("AVERAGE");
            }else if (sum>=25){
                System.out.println("WEAK");
            }else if (sum>=0){
                System.out.println("VERY_WEAK");
            }
        }
    }
    public static int getLen(String s){
        if (s.length()>=8){
            return 25;
        }else if (s.length()>=5&&s.length()<=7){
            return 10;
        }else if (s.length()<=4){
            return 5;
        }else {
            return 0;
        }
    }
    public static int getChar(String s){
        int big=0;
        int small=0;
        for (int i = 0; i<s.length();i++){
            if (s.charAt(i)>=65&&s.charAt(i)<=90){
                big++;
            }else if (s.charAt(i)>=97&&s.charAt(i)<=122){
                small++;
            }
        }
        if (small>0&&big>0){
            return 20;
        }else if (small>0||big>0){
            return 10;
        }else {
            return 0;
        }
    }
    public static int getNum(String s ){
        int num = 0;
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i)-'0'>=0&&s.charAt(i)-'0'<=9){
                num++;
            }
        }
        if (num>1){
            return 20;
        }else if (num==1){
            return 10;
        }else {
            return 0;
        }
    }
    public static int getSym(String s ){
        int num = 0;
        for (int i = 0; i <s.length() ; i++) {
            if (!(s.charAt(i)-'0'>=0&&s.charAt(i)-'0'<=9)&&
            !(s.charAt(i)>=65&&s.charAt(i)<=90)&&
                    !(s.charAt(i)>=97&&s.charAt(i)<=122)){
                num++;
            }
        }
        if (num>1){
            return 25;
        }else if (num==1){
            return 10;
        }else {
            return 0;
        }
    }
}

以上就是这期博客的全部内容,希望对你有帮助!
别忘了关注小猪哦!小猪带你一起学习~
咱们下期再见啦!
请添加图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱撸猫的程序媛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值