身份證號碼驗證--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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章