牛骨文教育服务平台(让学习变的简单)
博文笔记

C++ 密码强度验证

创建时间:2011-12-22 投稿人: 浏览次数:1020
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;
}





声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。