C++ 密码强度验证

int CheckPasswordStrength(WCHAR* p_wszpw,WCHAR* p_wszTime)//2011-01-01 16:05:43
{
	int iRet = 1 ;
	struct tm tm1;
	int iScore = 0;
	wstring wstrpw;
	swscanf(p_wszTime, L"%4d-%2d-%2d %2d:%2d:%2d",     
		&tm1.tm_year, 
		&tm1.tm_mon, 
		&tm1.tm_mday, 
		&tm1.tm_hour, 
		&tm1.tm_min,
		&tm1.tm_sec);//tm1.tm_mon
	CTime t1(tm1.tm_year,tm1.tm_mon,tm1.tm_mday,0,0,0);
	SYSTEMTIME sm;
	GetLocalTime((&sm));
	CTime t2(sm);
	int iDiffDays = (t2-t1).GetDays();
	if (iDiffDays > 90 && iDiffDays < 180 )
	{
		iRet = 2;
	}
	if (iDiffDays >= 180)
	{
		iRet = 3;
	}


	wstrpw.assign(p_wszpw);


	bool bAllAlphabet = true;
	bool bHasDigit = false;
	bool bHasSymbol = false;
	bool bHasAlphabet = false;


	bool bHasUpper = false;
	bool bHasLower = false;
	int	 iDigitNum = 0;
	int  iSymbolNum = 0;
	for (int i=0; i<wstrpw.length() && wstrpw.length() >0;i++)
	{
		WCHAR wszVal = wstrpw.data()[i];
		if (i==0)
		{
			iScore =iScore + 5;
		}
		else if (i==4)
		{
			iScore =iScore + 5;
		}
		else if (i==7)
		{
			iScore =iScore + 15;
		}


		if (!isalpha(wszVal))
		{
			bAllAlphabet = false;
		}


		if (isdigit(wszVal))
		{
			bHasDigit=true;
			iDigitNum++;
			if (iDigitNum==1)
			{
				iScore=iScore+10;
			}
			else if (iDigitNum==3)
			{
				iScore=iScore+10;
			}
		}
		else if (isalpha(wszVal))
		{
			bHasAlphabet=true;
			if (isupper(wszVal))
			{
				bHasUpper=true;
			}
			if (islower(wszVal))
			{
				bHasLower=true;
			}
		}
		else
		{
			iSymbolNum++;
			if (iSymbolNum==1)
			{
				iScore=iScore+10;
			}
			else if (iSymbolNum==2)
			{
				iScore=iScore+15;
			}
		}
	}


	if ((bHasLower==true&&bHasUpper==false)||(bHasLower==false&&bHasUpper==true))
	{
		iScore = iScore + 10;
	}
	if ( bHasUpper == true &&  bHasLower == true)
	{
		iScore = iScore + 20;
	}
	
	if (bHasDigit == true && bHasSymbol == true  && bHasAlphabet && bHasUpper == true &&  bHasLower == true )
	{
		iScore = iScore + 5;
	}
	else if (bHasDigit == true && bHasSymbol == true  && bHasAlphabet )
	{
		iScore = iScore + 3;
	}
	else if (bHasDigit && bHasAlphabet )
	{
		iScore = iScore + 2;
	}


	if (iScore >= 80)
	{
		return  iRet + 30;
	}
	
	if (iScore >= 50)
	{
		return iRet + 20;
	}
	if (iScore >= 0)
	{
		return  iRet + 10;
	}
	return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值