现在很多安全认证机构要求登录时的用户口令中不能包含按键盘排列顺序的字符(一般是3个或3个以上连续字符),避免被轻易破解。那从代码角度如何实现这个判断呢?下面给出C++版本的实现代码:
BOOL IsKeyBoardContinuousChar( LPCTSTR lpStr )
{
if ( lpStr == NULL || _tcslen(lpStr) == 0 )
{
return FALSE;
}
// 注意,下面的键盘字符表都只列出小写字符,判断前会将输入字符中的
// 大写字母都转换成小写字母
// 非shift键盘字符表
TCHAR aaCharTable1[4][13] =
{ '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', '\0',
'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\\',
'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'', '\0', '\0',
'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '/', '\0', '\0', '\0',
};
// 包含shift键盘的字符表
TCHAR aaCharTable2[4][13] =
{ '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '\0',
'q', 'w', 'e', '