身份證驗證程序原理
將身份證前17位數字依次和以下17個數字相乘
(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2)
然後將所有的乘積相加對11取餘,根據餘數從以下11個數字中找到校驗碼
(1,0,X,9,8,7,6,5,4,3,2,1)
把校驗碼和身份證第18位比較,相同身份證爲真,否則爲假
#include<stdio.h>
int main()
{
long long ID; //定義一個變量存儲身份證號碼
int i,temp,arr[18];
int sum=0,a[]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
char b[]={'1','0','X','9','8','7','6','5','4','3','2'};
printf("請輸入您的身份證號碼:");
scanf("%lld",&ID);
//將身份證逐位取出放在數組arr中
for(i=0;i<18;i++)
{
arr[17-i] = ID%10;
ID/=10;
}
for(i=0;i<17;i++)
{
sum+=arr[i]*a[i];
}
sum%=11;
temp = b[sum]-'0'; //將字符轉換成數字存在temp中
if(temp==arr[17])
printf("身份確認成功!\n");
else
printf("身份確認失敗!\n");
return 0;
}
以上代碼存在一個問題,當身份證最後一位爲X時程序就會出錯,至於怎麼改,讀者可自行思考一下