身份证的最后一位数的方法为:
身份证前十七位数分别乘以系数:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2。
然后把得出的十七个数字相加后对11取余数。
余数0 1 2 3 4 5 6 7 8 9 10分别对应1 0 X 9 8 7 6 5 4 3 2.
例如
3 | 5 | 0 | 1 | 8 | 1 | 2 | 0 | 1 | 0 | 0 | 5 | 2 | 5 | 1 | 3 | 6 | 5 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
* | * | * | * | * | * | * | * | * | * | * | * | * | * | * | * | * | |
7 | 9 | 10 | 5 | 8 | 4 | 2 | 1 | 6 | 3 | 7 | 9 | 10 | 5 | 8 | 4 | 2 | |
= | = | = | = | = | = | = | = | = | = | = | = | = | = | = | = | = | |
21 | 15 | 0 | 5 | 64 | 4 | 4 | 0 | 6 | 0 | 0 | 45 | 20 | 25 | 8 | 12 | 18 |
得出的十七位数字相加:21+15+0+50+64+4+4+0+6+0+0+45+20+25+8+12+18=247.
用得出来的这个数247÷11==22……5,余数就是5.
所以该身份证最后一位数就是5。
用C语言输出最后一位数
#include<stdio.h>
int main()
{
int id[17],sum=0,last=0;//制定数组输入身份证号前17位
int xishu[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};//规定的系数
printf("输入身份证号的前17位:");
for(int i=0;i<17;i++){
id[i]=getchar()-'0';
sum+=id[i]*xishu[i];//位数与系数相乘后相加
}
last=sum%11;//得出的数字对11求余
char w[11]={'1','0','X','9','8','7','6','5','4','3','2'};
printf("last=%c",w[last]);
return 0;
}