一直以为身份证最后几位是随机生成的,今日与人交谈,发现自己太天真了,现在让我们来研究一下身份证最后一位校验码

根据《中华人民共和国国家标准GB 11643-1999》中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。顺序码的奇数分给男性,偶数分给女性。校验码是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。

身份证最后一位是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位,而19位的号码违反了国家标准,并且我国的计算机应用系统也不承认19位的身份证号码。Ⅹ是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准。

那么具体是怎么实现的呢?

  • 将前面的身份证号码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这11个数字。其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2;
  • 通过上面得知如果余数是10,就会在身份证的第18位数字上出现罗马数字的X。

C++ 算法实现

#include <iostream>
#include<bits/stdc++.h>
using namespace std;int main()
{int ans=0,arr[]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};string ID,map="10X98765432";cout<<"身份证号:(前十七位)";cin>>ID;if(ID.length()!=17)cout<<"输入错误";else{for(int i=0;i<17;i++)ans+=(ID[i]-'0')*arr[i];cout<<"身份证第18位:"<<map[ans%11];}return 0;
}

算法不足:没有对输入的每一个字符进行检验,如需应用到实际中,需要稍作修改

算法实现身份证最后一位校验码相关推荐

  1. 身份证最后一位校验码

    原文:身份证最后一位校验码 源代码下载地址:http://www.zuidaima.com/share/1734424679222272.htm 18 位身份证最末位是校验码,是按一定的规则产生的,用 ...

  2. Python计算身份证第18位(校验码)来判断身份证是否输入正确

    Python计算身份证第18位(校验码)来判断身份证是否输入正确 前言 身份证编码规则如下:根据[中华人民共和国国家标准GB11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由 ...

  3. Java身份证号码严格验证(第18位校验码算法实现)

    /*** 身份证号码的格式:610821-20061222-612-X 由18位数字组成:前6位为地址码,第7至14位为出生日期码,第15至17位为顺序码,* 第18位为校验码.检验码分别是0-10共 ...

  4. 【SQLServer】验证身份证号第18位校验码是否合法

    目录 1.业务场景 2.知识前提 3.实现方案 4.测试 5.参考链接 1.业务场景 参考国家标准GB 11643-1999,居民身份证号组成:6位数字地址码+8位数字出生日期码+3位数字顺序码+1位 ...

  5. JS验证身份证号地区码及最后一位校验码

    /* 参数为身份证号 返回正确校验码 */ function getjy(id) {     var arr = new Array();//分别取出身份证的前17位加入到这个数组     var a ...

  6. 18位身份证号码最后一位校验码的计算方法

    介绍18位身份证号码最后一位校验码的计算方法 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码. ...

  7. 身份证最后一位校验算法-(ISO 7064:1983.MOD 11-2)

    根据<中华人民共和国国家标准GB 11643-1999>中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码, ...

  8. 身份证最后一位校验算法(ISO 7064:1983.MOD 11-2)

    很多游戏账号申请,或者某些网站注册时需要填身份证号,当输入错误的身份证号时会提示出错,感觉好像真能识别身份证信息一样,其实不然. 实质上由于其没有权限接入公安系统,它只能根据最后一位校验位来判断该身份 ...

  9. JAVA代码实现身份证18位校验码合法性校验

    身份证第18位(校验码)的计算方法 1.将前面的身份证号码17位数分别乘以不同的系数.从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2. 2.将这 ...

最新文章

  1. apache公司主要是做什么的
  2. 【转】QT中使用MYSQL中文乱码解决方法
  3. Java中对象的比较 == 和 equals()
  4. 大赛评委共论技术趋势,大咖观点干货满满!
  5. PicoDet的学习笔记
  6. Keras(六)Autoencoder 自编码 原理及实例 Savereload 模型的保存和提取
  7. android安卓字体下载,安卓手机字体29款打包下载
  8. WordPress 点击图片放大效果代码
  9. html隐藏safari地址栏,怎么隐藏 iOS Safari 打开网页时的地址栏和工具栏探索
  10. BOY LONDON 2019秋季 武装集结
  11. 简单几招破解Windows管理员密码
  12. docker 访问宿主机网络
  13. mas6a801 sw tree disp
  14. java分词器加词库_Elasticsearch配置IK分词器的远程词库
  15. Maven server structure problem
  16. SRC漏洞提交平台和应急响应中心
  17. 电脑云便签怎么在桌面日历月视图上新增便签记录事情?
  18. catia相合约束怎么反向_朝花夕拾—CATIA联盟一周技术聊天回顾
  19. 计算机图形图像的领域应用论文,计算机图形与图像处理论文2000字
  20. 叽歪课堂 - Flutter 移动应用开发实战

热门文章

  1. scud的jvalidation
  2. 陈志武:教育不转型,国家只能卖苦力
  3. 电脑主机装机教程(全网最详细)
  4. 宁南高考成绩查询2021,宁南中学2021年统招分数线是多少?
  5. CS中如何去处鼠标加速度及鼠标的相关设置
  6. cf聊天室,cf聊天室下载
  7. html 百度搜索图片,百度搜索结果显示图片
  8. python keys模块_python自动化常用模块
  9. Android实现音乐播放器(包含窗口小组件)
  10. oracle中修改字段类型,字段值不为空