身份证验证程序原理
将身份证前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时程序就会出错,至于怎么改,读者可自行思考一下