首页 > 其他分享 >C语言:身份证号校验位计算

C语言:身份证号校验位计算

时间:2023-01-08 10:22:05浏览次数:39  
标签:11 10 校验位 数字 17 身份证号 C语言 身份证 余数

#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();
 }

 

标签:11,10,校验位,数字,17,身份证号,C语言,身份证,余数
From: https://www.cnblogs.com/xkdn/p/17034171.html

相关文章

  • C语言:初识指针
    1.内存认识指针,首先要认识内存内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的,所以为了有效的使用内存,就把内存分成一个个小的内存单元,每个内存单元的大......
  • 自定义数据类型:结构体(C语言进阶)
    结构体类型的声明结构体的自引用结构体内存对齐结构体传参自学b站“鹏哥C语言”笔记。一、结构体类型的声明详见文章【初识结构体】第一部分。补充说明:匿名结构体类型:省略结......
  • 数据的存储(C语言进阶)
    数据类型介绍内置数据类型的归类整型在内存中的存储:①原码、反码、补码②大小端字节序③char的存储内容浮点型在内存中的存储自学b站“鹏哥C语言”笔记。一、数据类型介绍......
  • 指针详解(C语言进阶)
    字符指针指针数组自学b站“鹏哥C语言”笔记。本章笔记不全。回顾:在文章【初识指针】中,我们已经了解到的指针概念有指针是一种变量,用来存放地址,地址唯一标识一块内存空间。指......
  • 【C语言 数据结构】二叉树
    文章目录​​二叉树​​​​一、二叉树的概念​​​​二、二叉树的基本形态​​​​三、二叉树的性质​​​​四、特殊的二叉树​​​​五、二叉树的存储结构​​​​5.1......
  • C语言校园跳蚤市场信息交流平台
    C语言校园跳蚤市场信息交流平台[任务描述]设计一个校园跳蚤市场信息交流平台,为同学们交换二手物品提供便利。[功能要求](1)管理员功能:管理员对待销或求购的二手物品......
  • C语言程序设计课程设计[2023-01-07]
    C语言程序设计课程设计[2023-01-07]C语言程序设计课程设计要求一、课程设计目的1.进一步掌握和利用C语言进行程设计的能力;2.进一步理解和运用结构化程设计的思想和......
  • c语言的主要用途是什么?
    C语言的用途可以概括如下: 1)系统编程C语言可移植性好,性能高,能够直接访问硬件地址,而且到达某个地址的时间非常短,这使得C语言天生适合开发操作系统或者嵌入式应用程序。在......
  • 【数据结构】C语言实现的AVL树操作集
    看到网上完整的AVL树操作集较少,索性自己写了一个,望大佬指教!不多废话,上代码:AVLTREE.h头文件1#pragmaonce2#include<stdio.h>3#include<stdlib.h>4#inclu......
  • C语言百日刷题第一天
    猜名次5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每......