身份证号码验证--C/C++ 实现

昨天项目要求将身份证做一次验证,于是总结了一下C/C++下身份证号码的实现

身份证号码的构成

资料显示,现在我国公民使用的18为身份证号码,是由前 17位信息码和最后一位校验码组成。而,前17为信息码,又有各自的含义:六位地址码,八位出生日期码,三位顺序码。地址码(身份证前六位)
       一。六位地址码

            前六位的地址码,是按照GB/T2260的规定,给常住户口所在县(市、旗、区)的行政区域分配的代码。
       二。出生日期码(身份证中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;
}
点赞