C语言编写身份证确认程序,Linux版

身份证验证程序原理

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

猜你喜欢

转载自blog.csdn.net/RwinR/article/details/82805188