由于之前项目的需要,需要对身份证的有效性进行判断,我在网上找到一个方法,进行了一定的改进,可同时对最后一位字母大小写进行判断
BOOL JudgeID()
{
int weight[] = { 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 };
char validate[] = { '1','0','X','9','8','7','6','5','4','3','2' };
int sum = 0;
int mode = 0;
if (m_IDNum.GetLength() == 18)
{
if (m_IDNum.GetAt(m_IDNum.GetLength()-1)=='x')
{
m_IDNum = m_IDNum.Left(m_IDNum.GetLength() - 1) + _T("X");
}
for (int i=0;i<m_IDNum.GetLength()-1;i++)
{
sum = sum + (m_IDNum[i] - '0')*weight[i];
}
mode = sum % 11;
if (validate[mode] == m_IDNum[17])
{
return TRUE;
}
}
return FALSE;
}