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; }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。