昨天項目要求將身份證做一次驗證,於是總結了一下C/C++下身份證號碼的實現
身份證號碼的構成
一。六位地址碼
二。出生日期碼(身份證中8位)
8爲的出生日期,分別是 XXXX年XX月XX日
三。順序碼
身份證號的驗證方法
校驗碼,是由前十七位數字碼加權求和取模得到的數字,對應的校驗碼數組元素。
前17位數字碼的權重分別是:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
其中,校驗碼數組爲:1 0 X 9 8 7 6 5 4 3 2
至此,我們只需要將求出的校驗碼和身份證的第18位比較,即可知道該身份證號的正確與否。
MFC實現
bool CMy0121124829Dlg::SFZHValidate(CString sfz)
{
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 (sfz.GetLength()==18)
{
for(int i=0;i<sfz.GetLength()-1;i++){
sum=sum+(sfz[i]-'0')*weight[i];
}
mode=sum%11;
if (validate[mode]==sfz[17])
{
return true;
}
}
return false;
}