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

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

一、密码长度:
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_SECURE,
WEAK,
AVERAGE,
STRONG,
VERY_STRONG,
SECURE,
VERY_WEAK

//关于字符串的密码长度所应该得的分数
int grade_len(string& s)
{
	int len = s.size();
	if (len <= 4)
	{
		return 5;
	}
	else if (len >= 5 && len <= 7)
	{
		return 10;
	}
	else if (len >= 8)
	{
		return 25;
	}
}

//关于字母所得的分数
int grade_alpaha(string& s)
{
	int alpha = 0;
	int small = 0;
	int big = 0;
	for (int i = 0; i < s.size(); i++)
	{
		if (isalpha(s[i]))
		{
			alpha++;
		}
		if (isupper(s[i]))
		{
			big++;
		}
		if (islower(s[i]))
		{
			small++;
		}
	}
	if (alpha == 0)
	{
		return 0;
	}
	if (big == s.size() || small == s.size())
	{
		return 10;
	}
	else if (big > 0 && small > 0)
	{
		return 20;
	}
}

//关于数字得分
int grade_digit(string& s)
{
	int dignum = 0;
	for (int i = 0; i < s.size(); i++)
	{
		if (isdigit(s[i]))
		{
			dignum++;
		}
	}
	if (dignum == 0)
	{
		return 0;
	}
	else if (dignum == 1)
	{
		return 10;
	}
	else if (dignum > 1)
	{
		return 20;
	}
}

//关于符号得分
int grade_symbol(string& s)
{
	//除去字母、数字、其它的都是字符
	int sym = 0;
	for (int i = 0; i < s.size(); i++)
	{
		if (!isalnum(s[i]))
		{
			sym++;
		}
	}
	if (sym == 0)
	{
		return 0;
	}
	else if(sym==1)
	{
		return 10;
	}
	else if (sym > 1)
	{
		return 25;
	}
}

//关于奖励得分
int grade_rewd(string& s)
{
	if (grade_alpaha(s) > 0 && grade_digit(s) > 0)
	{
		if (grade_symbol(s) > 0)
		{
			if (grade_alpaha(s) == 20)
			{
				return 5;
			}
			return 3;
		}
		return 2;
	}
	
}

void passwd_grade_level()
{
	string s;
	while (getline(cin, s))
	{
		//int ret = grade_alpaha(s) + grade_digit(s) + grade_len(s) + grade_symbol(s) + grade_rewd(s);
		int ret1 = grade_len(s);
		int ret2 = grade_alpaha(s);
		int ret3 = grade_digit(s);
		int ret4 = grade_symbol(s);
		int ret5 = grade_rewd(s);

		int ret = ret1 + ret2 + ret3 + ret4 + ret5;

		if (ret >= 90)
		{
			cout << "VERY_SECURE" << endl;
		}
		else if (ret >= 80)
		{
			cout << "WEAK" << endl;
		}
		else if (ret >= 70)
		{
			cout << "AVERAGE" << endl;
		}
		else if (ret >= 60)
		{
			cout << "STRONG" << endl;
		}
		else if (ret >= 50)
		{
			cout << "VERT_STORONG" << endl;
		}
		else if (ret >= 25)
		{
			cout << "SECURE" << endl;
		}
		else if(ret>=0)
		{
			cout << "VERY_WEAK" << endl;
		}
		cin.get();
	}
}

猜你喜欢

转载自blog.csdn.net/lyl194458/article/details/89382318