题目:密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分。
一、密码长度:
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();
}
}