飞奔的炮台 发表于 2021-12-9 14:30:25

ISO 7064:1983.MOD11-2校验码计算法

/*使用【ISO 7064:1983.MOD 11-2】计算【身份证效验码】将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2将这17位数字和系数相乘的结果相加用加出来和除以11,看余数是多少?余数只能为:       0-1-2-3-4-5-6-7-8-9-10余数所对应的效验码:1-0-X -9-8-7-6-5-4-3-2【列如】余数为7,则对应的效验码为5【例子】系数x身份证前17位(单个分开相乘)的和=SS/11 = S除于11=T...3 (和除于11所得的余数)3==9(余数对于的效验码)【公式】某男性的身份证号码为【53010219200508011?】仅有前17位数字,则不知道最后一位效验码可以这样公式解答:身份证:5    3    0   1    0    2    1    9    2    0    0    5   0   8    0    1   1                                                    ||相乘||系数:7    9    10    5    8    4    2    1    6    3    7    9    10   5    8    4   2       ⇓    ⇓   ⇓    ⇓    ⇓    ⇓    ⇓    ⇓    ⇓    ⇓    ⇓    ⇓   ⇓   ⇓    ⇓    ⇓   ⇓    积:   35   27    0   5    0    8    2    9   12    0    0   45    0   40    0    4   2            把积数相加所得:189得出的结果除于11所得:17....2(得17余2)余数:            0-1-【2】-3-4-5-6-7-8-9-10余数所对应的效验码:1-0-【X】-9-8-7-6-5-4-3- 2余数2所对应的效验码为:X身份证则为【53010219200508011X】可前往【http://ad.0453.com/adxx/shenfenzheng/index.asp】效验身份证是否合法!!身份证号码由18位数字组成:前6位为行政区划分代码,第7位至14位为出生日期码,第15位至17位为顺序码,第18位为校验码。地址码包含(省、市、区)也可通过省、市、区查出地址码!按GB/T2260的规定执行顺序码(男为奇数、女为偶数)前1、2位数字表示:所在省份的代码;第3、4位数字表示:所在城市的代码;第5、6位数字表示:所在区县的代码;第7~14位数字表示:出生年、月、日;第15、16位数字表示:所在地的派出所的代码;第17位数字表示性别:奇数表示男性,偶数表示女性;第18位数字是校检码:用来检验身份证的正确性。*/ #include <stdio.h>#include <string.h> int main(void){    char InNum;    char CheckNum = {'1', '0', 'X' , '9', '8', '7', '6', '5', '4', '3', '2'};    int i = 0;    int Sum = 0;      memset(InNum, 0, 18);    printf("\n请输入身份证前17位数字,按回车键结束:\n\t");    fflush(stdin);      scanf("%s",InNum);      printf("\n输入的前17位数字为: \n\t");    for(i = 0;i < 17;i++)    {    // 将ASCII码值 转化为数字    InNum -= 0x30;    printf("%d",InNum);    }      Sum = InNum*7 + InNum*9 + InNum*10 + InNum*5 + InNum*8 +InNum*4 + InNum*2 + InNum*1 + InNum*6      + InNum*3 + InNum*7 + InNum*9 + InNum*10 + InNum*5 + InNum*8 + InNum*4 + InNum*2;   printf("\n生成的身份证号码为: \n\t");    for(i = 0;i < 17;i++)    printf("%d",InNum);    printf("%c", CheckNum);    printf("\nOK\n");    return 0;}

https://blog.51cto.com/u_15449377/4773382
页: [1]
查看完整版本: ISO 7064:1983.MOD11-2校验码计算法