#include <stdio.h>
/*
身份证号码是由18位数字组成的,他们分别表示:
1、前1、2位数字表示:所在省份的代码。 2、前3、4位数字表示:所在城市的代码。
3、前5、6位数字表示:所在区县的代码。 4、第7~14位数字表示:出生年、月、日,7、8、9、10位是年,11、12位是月,13、14位是日。
5、第15、16位数字表示:所在地的派出所的代码。 6、第17位数字表示性别:奇数表示男性,偶数表示女性。
7、第18位数字是校检码:校检码可以是0~9的数字,有时也用X表示。
校验码(身份证最后一位)。它是根据前面十七位数字码,按照ISO7064:1983.MOD11-2校验码计算出来的检验码。
计算方法
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。(即余数0对应1,余数1对应0,余数2对应X...)
5、通过上面得知如果余数是3,就会在身份证的第18位数字上出现的是9。如果对应的数字是2,身份证的最后一位号码就是罗马数字x。
*/
//连续输入17个数字(整型)再计算
main()
{
int a[17],b,sum=0;
int c[17]={-7,-9,-10,-5,-8,-4,-2,-1,-6,-3,-7,-9,-10,-5,-8,-4,-2};
int d[11]={0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10};
char e[12]="10X98765432";
printf("请连续输入身份证号前17位\n") ;
for(b=0;b<=16;b++)
{
scanf("%1d",&a[b]);//每次输入1位数分别赋值给数组
sum=sum+a[b]*c[b];
}
sum=sum%11;
for(b=0;b<=10;b++)
{
if(sum==d[b]) break;
}
printf("最后一位是%c",e[b]);
getchar();
}
#include <stdio.h>
/*
身份证号码是由18位数字组成的,他们分别表示:
1、前1、2位数字表示:所在省份的代码。 2、前3、4位数字表示:所在城市的代码。
3、前5、6位数字表示:所在区县的代码。 4、第7~14位数字表示:出生年、月、日,7、8、9、10位是年,11、12位是月,13、14位是日。
5、第15、16位数字表示:所在地的派出所的代码。 6、第17位数字表示性别:奇数表示男性,偶数表示女性。
7、第18位数字是校检码:校检码可以是0~9的数字,有时也用X表示。
校验码(身份证最后一位)。它是根据前面十七位数字码,按照ISO7064:1983.MOD11-2校验码计算出来的检验码。
计算方法
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。(即余数0对应1,余数1对应0,余数2对应X...)
5、通过上面得知如果余数是3,就会在身份证的第18位数字上出现的是9。如果对应的数字是2,身份证的最后一位号码就是罗马数字x。
*/
//连续输入17个数字字符,利用 '9'-'0'=9的方法转成数字再计算
main()
{
int b,sum=0;
char a[18];
int c[17]={-7,-9,-10,-5,-8,-4,-2,-1,-6,-3,-7,-9,-10,-5,-8,-4,-2};
int d[11]={0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10};
char e[12]="10X98765432";
gets(a);
for(b=0;b<=16;b++)
{
sum=sum+(a[b]-'0')*c[b];
}
printf("%d\n",sum);
sum=sum%11;
printf("%d\n",sum);
for(b=0;b<=10;b++)
{
if(sum==d[b]) break;
}
printf("最后一位是%c",e[b]);
getchar();
}
#include <stdio.h>
#include <math.h>
/*
身份证号码是由18位数字组成的,他们分别表示:
1、前1、2位数字表示:所在省份的代码。 2、前3、4位数字表示:所在城市的代码。
3、前5、6位数字表示:所在区县的代码。 4、第7~14位数字表示:出生年、月、日,7、8、9、10位是年,11、12位是月,13、14位是日。
5、第15、16位数字表示:所在地的派出所的代码。 6、第17位数字表示性别:奇数表示男性,偶数表示女性。
7、第18位数字是校检码:校检码可以是0~9的数字,有时也用X表示。
校验码(身份证最后一位)。它是根据前面十七位数字码,按照ISO7064:1983.MOD11-2校验码计算出来的检验码。
计算方法
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。(即余数0对应1,余数1对应0,余数2对应X...)
5、通过上面得知如果余数是3,就会在身份证的第18位数字上出现的是9。如果对应的数字是2,身份证的最后一位号码就是罗马数字x。
*/
//连续输入17个数字字符,利用 '9'-'0'=9的方法转成数字再计算
main()
{
int b,sum=0;
char a[18];
int c[17]={-7,-9,-10,-5,-8,-4,-2,-1,-6,-3,-7,-9,-10,-5,-8,-4,-2};
char e[12]="10X98765432";
gets(a);
for(b=0;b<=16;b++)
{
sum=sum+(a[b]-'0')*c[b];
}
sum=sum%11;
printf("最后一位是%c",e[abs(sum)]);
getchar();
}