密码强度等级

题目:

#include <iostream>
#include <string>
 
using namespace std;
 
int GetLen(string& s)
{
	int len = s.size();
	if (len <= 4)
		return 5;
	else if (len >= 5 && len <= 7)
		return 10;
	else
		return 25;
}
 
 
int GetGraph(string& s)
{
	int len = s.size();
	int count = 0;
	int big = 0;
	int small = 0;
	int i = 0;
	int alp = 0;
	while (i<len)
	{
		count++;
		if (isupper(s[i]))
			big++;
		else if (islower(s[i]))
			small++;
 
		if (isalpha(s[i]))
			alp++;
 
		i++;
	}
 
	if (alp == 0)
		return 0;
	else if (small == count || big == count)
		return 10;
 
	if (small > 0 && big > 0)
		return 20;
 
	return 0;
}
 
int GetDig(string& s)
{
	int dig = 0;
	int len = s.size();
	int i = 0;
 
	while (i < len)
	{
		if (isdigit(s[i]))
			dig++;
		i++;
	}
 
	if (dig == 0)
		return 0;
	else if (dig == 1)
		return 10;
	else
		return 20;
}
 
int GetSignal(string& s)
{
	int sig = 0;
	int i = 0;
	int len = s.size();
	while (i < len)
	{
		if (!isdigit(s[i]) && !isalpha(s[i]))
			sig++;
 
		i++;
	}
 
	if (sig == 0)
		return 0;
	else if (sig == 1)
		return 10;
	else
		return 25;
}
 
int GetAward(string& s)
{
	if (GetGraph(s) > 0 && GetDig(s) > 0)
	{
		if (GetSignal(s) > 0)
		{
			if (GetGraph(s) == 20) // 大小写字母  有数字,有符号
				return 5;
 
			return 3; //字母、数字、符号
		}
		return 2; // 字母和数字
	}
	return 0;
}
 
void GetPwdSecurityLevel(string& pPasswordStr)
{
 
	int res1 = GetLen(pPasswordStr);
	int res2 = GetGraph(pPasswordStr);
	int res3 = GetDig(pPasswordStr);
	int res4 = GetSignal(pPasswordStr);
	int res5 = GetAward(pPasswordStr);
 
	int res = res1 + res2 + res3 + res4 + res5;
	if (res >= 90)
		cout << "VERY_SECURE" << endl;
	else if (res >= 80)
		cout << "SECURE" << endl;
	else if (res >= 70)
		cout << "VERY_STRONG" << endl;
	else if (res >= 60)
		cout << "STRONG" << endl;
	else if (res >= 50)
		cout << "AVERAGE" << endl;
	else if (res >= 25)
		cout << "WEAK" << endl;
	else if (res >= 0)
		cout << "VERY_WEAK" << endl;
}
 
int main()
{
	string s;
	while (getline(cin, s))
	{
		GetPwdSecurityLevel(s);
	}
	return 0;
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

全部评论

相关推荐

04-28 11:34
西北大学 运营
牛客4396号:不好意思,这个照片猛一看像丁真
点赞 评论 收藏
分享
05-12 11:09
已编辑
门头沟学院 后端
已注销:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务