
身份证号码的最后一位校验码是怎么计算出来的?
展开全部
先将身份证前面的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数字,或者罗马数字χ表示。
参考资料来源:百度百科-居民身份证号码
展开全部
第十八位数字的计算方法为:
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。所以,这是一个合格的身份证号码。
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。所以,这是一个合格的身份证号码。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用第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)。
加上
第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);
}
#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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
身份证校验码:身份证号码的最后一位
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询