1、数字含义

中国大陆第二代身份证号码由18位数据或字母组成,每位数据都有特定的含义,结果如下:

每组数字都有不同的含义:

1) 第1至2位数字代表所在省(直辖市、自治区)的代码;

2) 第3至4位数字代表所在地级市(自治州)的代码;

3) 第5至6位数字代表所在区(县、自治县、县级市)的代码;

4) 第7-14位数字代表出生年、月、日;

5) 第15-16位数字代表所在的派出所代码;

6) 第17位数字表示性别,奇数表示男性,偶数表示女性;

7) 第18位是校验码,及个人信息码,由前17位数字计算得到。

也就是说身份证号码不是随便产生的,它是用来检验身份的正确性。在没有全国个人身份证信息库时。可以通过检验码来校验身份证的正确性。校验码由0-9的数据和字母X组成,其实X表示10(这并不是英文字母X,而是希腊数字10的缩写)。是由号码编制单位按统一的计算公式计算出来的,校验身份证号码正确性也是通过这个公式实现。

2、算法介绍

首先,对前17位信息数字按照特定的方式加权,公式如下:

即各位置的数字和权重的乘积之和,权重计算公式说明:例如位置18(即第一位数字)的权重应该是2的17次方的结果对11取余。

计算出S后再用S对11取余,根据余数确定校验位数字,对照表如下:

比如例子中的身份证号计算出来的S为189,对11取余结果为2,查表2对应的校验码为X,所以该身份证号最后一位应该为X。

3、Python代码

def checkIDNumber(num_str):str_to_int = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5,'6': 6, '7': 7, '8': 8, '9': 9, 'X': 10}check_dict = {0: '1', 1: '0', 2: 'X', 3: '9', 4: '8', 5: '7',6: '6', 7: '5', 8: '4', 9: '3', 10: '2'}if len(num_str) != 18:raise TypeError(u'请输入标准的第二代身份证号码')check_num = 0for index, num in enumerate(num_str):if index == 17:right_code = check_dict.get(check_num % 11)if num == right_code:print(u"身份证号: %s 校验通过" % num_str)else:print(u"身份证号: %s 校验不通过, 正确尾号应该为:%s" % (num_str, right_code))check_num += str_to_int.get(num) * (2 ** (17 - index) % 11)
if __name__ == '__main__':num_str1 = '34052419800101001X'num_str2 = '340524198001010011'checkIDNumber(num_str1)checkIDNumber(num_str2)

参考:

http://jingyan.baidu.com/article/72ee561abd962fe16038df48.html

转载请注明来源:https://my.oschina.net/jhao104/blog/756241

转载于:https://my.oschina.net/jhao104/blog/756241

身份证号码校验算法(附Python代码)相关推荐

  1. 数据清洗:真值发现TruthFinder算法(附Python代码)

      本篇博客主要介绍数据清洗中的真值发现问题及其经典求解算法TruthFinder的原理及Python实现. 1 真值发现   Web已经成为大多数人信息获取的重要来源,但由于信息时效性.传播性.信息 ...

  2. [程序设计]前端Web页面使用原生JavaScript实现校验身份证号码在算法层面是否合法

    中国大陆居民身份证号码第18位为校验码,用来验证本体码的准确性. 校验码采用ISO 7064:1983,MOD 11-2校验码系统. 因此可以对身份证号码第18位进行校验,来验证身份证号码在算法层面是 ...

  3. 基于TextRank算法的文本摘要(附Python代码)

    基于TextRank算法的文本摘要(附Python代码): https://www.jiqizhixin.com/articles/2018-12-28-18

  4. 身份证号码及统一社会信用代码校验

    /** * 身份证号码验证 * rule为form表单当前验证的filed对应的验证rule规则 * value为当前输入框返回值 * callback为回调函数,验证成功直接回调,验证失败回调函数返 ...

  5. python重点知识归纳_一文了解机器学习知识点及其算法(附python代码)

    一文了解机器学习知识点及其算法(附python代码) 来源:数据城堡 时间:2016-09-09 14:05:50 作者: 机器学习发展到现在,已经形成较为完善的知识体系,同时大量的数据科学家的研究成 ...

  6. 使用Java编写Hive的UDF实现身份证号码校验及15位升级18位

    使用Java编写Hive的UDF实现身份证号码校验及15位升级18位 背景 在数仓项目中,有时候会根据身份证信息做一些取数filter或者条件判断的相关运算进而获取到所需的信息.古人是用Oracle做 ...

  7. 基于可视化结构的身份证号码校验系统-树莓派实现

    基于可视化结构的身份证号码校验系统 摘要: 本作品是一个通用的身份证号码校验系统,目前已经尝试在Linux和Windows系统下运行,结果均可达到理想效果.系统通过运用基础GUI库tkinter创建系 ...

  8. 教程 | 理解和实现自然语言处理终极指南(附Python代码)

     教程 | 理解和实现自然语言处理终极指南(附Python代码) 时间 2017-02-16 14:41:39 机器之心 原文  http://www.jiqizhixin.com/article ...

  9. XGBoost参数调优完全指南(附Python代码)

    XGBoost参数调优完全指南(附Python代码) 译注:文内提供的代码和运行结果有一定差异,可以从这里下载完整代码对照参考.另外,我自己跟着教程做的时候,发现我的库无法解析字符串类型的特征,所以只 ...

  10. python随机森林变量重要性_推荐 :一文读懂随机森林的解释和实现(附python代码)...

    原标题:推荐 :一文读懂随机森林的解释和实现(附python代码) 作者:WilliamKoehrsen:翻译:和中华:校对:李润嘉 本文约6000字,建议阅读15分钟. 本文从单棵决策树讲起,然后逐 ...

最新文章

  1. 四、卫星定位《苹果iOS实例编程入门教程》
  2. python自增_Python 为什么不支持 i++ 自增语法,不提供 ++ 操作符?
  3. 软件架构自学笔记---架构分析
  4. opa847方波放大电路_比例阀伺服放大器设计(一)
  5. android开发app初始化,Android 的 Application 初始化
  6. IPv4地址何去何从 IPv6不向下兼容的尴尬
  7. 大数据分析技术架构的通用模块
  8. 移动、复制、新增工作表
  9. 张宇真题全解(纯题目)
  10. 基础算法(三)---二分排序(Java)
  11. python毕业设计作品基于django框架 校园二手书籍交易系统毕设成品(6)开题答辩PPT
  12. EasyNLP发布融合语言学和事实知识的中文预训练模型CKBERT
  13. 老DOS游戏-殖民计划
  14. 爬虫爬取安居客二手房和新房信息,你是买新房还是二手的呢?
  15. 怎么保护地球生物多样性
  16. 不能装载文档控件。请在检查浏览器的选项中检查浏览器的安全设置_Windows 7 怎么修复 Windows 中的 Wi-Fi 连接问题,我教你(六)...
  17. unity 点击UI显示3D爆炸特效
  18. SpringAOP所支持的AspectJ切点指示器
  19. javascript最常用的技巧
  20. mac下/usr/local/bin No such file or directory问题解决

热门文章

  1. ThinkPad笔记本电脑网络重置之后wifi没有了
  2. html5 video js 播放,H5播放HLS之videojs播放视频
  3. 2017前端开发手册三-前端职位描述
  4. SH-SSS丨CUSIDE:分块、模拟未来、解码的流式语音识别新框架
  5. 红米手机如何抓取蓝牙log。
  6. [Codeforces266E]More Queries to Array...——线段树
  7. F280049C 输出三相互补对称SPWM波
  8. 徙步藏东南不是江南胜似江南
  9. 《the TRUMAN show》 观后感:不寒而栗
  10. 持久层框架常用关键字 NE GE LE GT LT EQ 等等