身份证号码的最后一位校验码是怎么计算出来的?

 我来答
阿离hunnter
高粉答主

2019-04-10 · 一般般嘛哈哈哈哈哈哈
阿离hunnter
采纳数:329 获赞数:194079

向TA提问 私信TA
展开全部

先将身份证前面的17位数分别乘以不同的系数,然后将每一个相乘的结果相加,用所得之和除以11,看余数是多少,余数是0--9尾数就是0-9,如果余数是10,那么身份证的第18位数字就用罗马数字的【χ代替】。

因为是10的话就有19位数字了,与身份证号码十八位数的国家标准不相符合。因为是10的话就有19位数字了,与身份证号码十八位数的国家标准不相符合。

X:英语中第24个字母。X 表示未知、无限,X 还有“目标”和“希望”,X 在社会学界表示“完美”,千言万语都可以用 X 来传递。数学中 X 在方程中通常表示未知数的值。在罗马数字中,X 表示十。

扩展资料:

身份证号码18位数字其表示的含义分别为:

第1、2位, 所在省份的代码;

第3、4位 :所在城市的代码;

第5、6位:所在区县的代码;

第7——14位 :出生年、月、日

(7、8、9、10位是年,11、12位是月,13、14位是日);

第15、16位 :所在地派出所的代码;

第17位 :奇数1、3、5、7、9表示男性,偶数2、4、6、8表示女性;

第18位:校检码:为0——9数字,或者罗马数字χ表示。

参考资料来源:百度百科-居民身份证号码

k618t
推荐于2017-11-24 · TA获得超过5.9万个赞
知道大有可为答主
回答量:9422
采纳率:0%
帮助的人:7244万
展开全部
第十八位数字的计算方法为:
1.将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
2.将这17位数字和系数相乘的结果相加。
3.用加出来和除以11,看余数是多少?
4余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字。其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2。
5.通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2。

例如:某男性的身份证号码是34052419800101001X。我们要看看这个身份证是不是合法的身份证。
首先:我们得出,前17位的乘积和是189
然后:用189除以11得出的结果是17 + 2/11,也就是说余数是2。
最后:通过对应规则就可以知道余数2对应的数字是x。所以,这是一个合格的身份证号码。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
luoyu6401
2013-03-11
知道答主
回答量:21
采纳率:100%
帮助的人:8.6万
展开全部
用第1位数乘以2的16次方(即65536)
加上
第2位数乘以2的15次方(32768)
加上
第3位数乘以2的14次方(16384)
加上
第4位数乘以2的13次方(8192)
加上
第5位数乘以2的12次方(4096)
加上
第6位数乘以2的11次方(2048)
加上
第7位数乘以2的10次方(1024)
加上
第8位数乘以2的9次方(512)
加上
第9位数乘以2的8次方(256)
加上
第10位数乘以2的7次方(128)
加上
第11位数乘以2的6次方(64)
加上
第12位数乘以2的5次方(32)
加上
第13位数乘以2的4次方(16)
加上
第14位数乘以2的3次方(8)
加上
第15位数乘以2的2次方(4)
加上
第16位数乘以2的1次方(2)
加上
第17位数乘以2的0次方(1)
将所得的数乘以9再加上1的和除以11,所得的余数便是18位身份证号的最后一位(余数为10时最后一位是X)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2019-06-15
展开全部
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
int checkid(char * string)
{
int coefficient[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
int checksum=0;
int remainder=0;
int i;
char lastdigit;
for(i=0;i<17;++i)
{
checksum=checksum + (string[i]-'0')* coefficient[i];
}
remainder = checksum % 11;
if(remainder == 1)
{
lastdigit = '0';
}
else if(remainder == 0)
{
lastdigit = '1';
}
else if(remainder ==2)
{
lastdigit ='X';
}
else
{
lastdigit = 12-remainder + '0';
}
return(lastdigit == string[17]);
}
void getbirthday(char * id, int date[])
{
int year;
int month;
int day;
char string[100];
strcpy (string ,&id[6]);
string[4] = '\0';
year = atoi(string);
strcpy (string ,&id[10]);
string[2] = '\0';
month = atoi(string);
strcpy (string ,&id[12]);
string[2] = '\0';
day = atoi(string);
date[0]=year;
date[1]=month;
date[2]=day;
}
int getage(char * string)
{
int birthday[3];
int today[3];
int age;
getbirthday(string,birthday);
printf("请输入今天的年月日\n");
scanf("%d%d%d",&today[0],&today[1],&today[2]);
if(birthday[0] <= today[0])
{
if(birthday[1] > today[1])
{
age = today[0] - birthday[0] ;
}
else if (birthday[1] == today[1])
{
if (birthday[2] > today[2])
{
age = today[0] - birthday[0] - 1;
}
if (birthday[2] <= today[2])
{
age = today[0] - birthday[0];
}
}
else if(birthday[1] < today[1])
{
{
age = today[0] - birthday[0];
}
}
else
{
printf("生日错误!\n");
}
return age;
}
}
int getsex(char * id)
{
return(id[16] - '0')%2;
}
void shengxiao(char * id)
{
int birthday[3];
int result;
getbirthday(id,birthday);
result = ((birthday[0] - 2019)%12 + 12)%12;
switch(result)
{
case 0:printf("您的生肖为猪\n");break;
case 1:printf("您的生肖为鼠\n");break;
case 2:printf("您的生肖为牛\n");break;
case 3:printf("您的生肖为虎\n");break;
case 4:printf("您的生肖为兔\n");break;
case 5:printf("您的生肖为龙\n");break;
case 6:printf("您的生肖为蛇\n");break;
case 7:printf("您的生肖为马\n");break;
case 8:printf("您的生肖为羊\n");break;
case 9:printf("您的生肖为猴\n");break;
case 10:printf("您的生肖为鸡\n");break;
case 11:printf("您的生肖为狗\n");break;
default:printf("错误!");
}
}

void main()
{
char string[20];
char * id =string;

int birthday[3];
int today[3];
printf("请输入您的身份证号:\n");
scanf("%s",string);
if(checkid(string)){
printf("您的身份证号通过了校验\n");
}else{
printf("您的身份证非法!\n");
exit(0);
}
if(getsex(id))
{
printf("您的性别为男\n");
}else
{
printf("您的性别为女\n");
}
getbirthday(id,birthday);
printf("您出生于%d年%d月%d日\n",birthday[0],
birthday[1],birthday[2]);
printf("您今天是%d岁\n",getage(string));
shengxiao(id);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
秒懂百科
2020-11-19 · TA获得超过5.9万个赞
知道大有可为答主
回答量:25.3万
采纳率:88%
帮助的人:1.5亿
展开全部

身份证校验码:身份证号码的最后一位

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式