python验证身份证信息实例代码


Posted in Python onMay 06, 2019

identity-card

验证身份证号码的正确性,不能仅仅通过正则表达式来验证,我们都知道我国的身份证一共是18位,由十七位数字本体码和一位校验码组成。

其排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码。

  1. 地址码 (身份证号码前六位);表示编码对象常住户口所在县(市、旗、区)的行政区域划分代码,按GB/T2260的规定执行。1-2位省、自治区、直辖市代码; 3-4位地级市、盟、自治州代码; 5-6位县、县级市、区代码。
  2. 出生日期码 (身份证号码第七位到第十四位);表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
  3. 顺序码 (身份证号码第十五位到十七位);表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
  4. 校验码(身份证号码最后一位);是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,X是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准。

校验码计算步骤

十七位数字本体码加权求和公式
S = Sum(Ai * Wi), i = 0, … , 16 ,先对前17位数字的权求和

Ai:表示第i位置上的身份证号码数字值(0~9)

Wi:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 (表示第i位置上的加权因子)

计算模
Y = mod(S, 11)

根据模,查找得到对应的校验码
Y: 0 1 2 3 4 5 6 7 8 9 10

校验码: 1 0 X 9 8 7 6 5 4 3 2

对应的代码校验如下:

Java

public class IdentityCard{
  int[] weight={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};  //十七位数字本体码权重
  char[] valid={ '1','0','X','9','8','7','6','5','4','3','2'};  //mod11,对应校验码字符值

  ///card是除去最后一位前17位的号码
  public char getValidateCode(String card){
    int sum=0;
    int mode=0;
    for(int i=0;i<card.length();i++){
      sum=sum+Integer.parseInt(String.valueOf(card.charAt(i)))*weight[i];
    }
    mode=sum%11;
    return valid[mode];
  }
}

python

def get_id_card_verify_number(id_card):
  factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
  check_code_list = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]
  check_sum = sum([a * b for a, b in zip(factor, [int(a) for a in id_card[0:-1]])])
  return check_code_list[check_sum % 11]

python验证身份证信息实例代码

总体代码(代码地址:https://github.com/lucas234/identity-card ):

以上所述是小编给大家介绍的python验证身份证信息的方法详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python使用urlparse分析网址中域名的方法
Apr 15 Python
编写Python脚本批量下载DesktopNexus壁纸的教程
May 06 Python
PyQt5利用QPainter绘制各种图形的实例
Oct 19 Python
Python3简单实例计算同花的概率代码
Dec 06 Python
python3中property使用方法详解
Apr 23 Python
react+django清除浏览器缓存的几种方法小结
Jul 17 Python
pandas的to_datetime时间转换使用及学习心得
Aug 11 Python
python实现的生成word文档功能示例
Aug 23 Python
服务器端jupyter notebook映射到本地浏览器的操作
Apr 14 Python
Python 列表中的修改、添加和删除元素的实现
Jun 11 Python
利用python中的matplotlib打印混淆矩阵实例
Jun 16 Python
使用Python制作一个数据预处理小工具(多种操作一键完成)
Feb 07 Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
May 06 #Python
Python实现的栈、队列、文件目录遍历操作示例
May 06 #Python
Python两台电脑实现TCP通信的方法示例
May 06 #Python
python3利用Socket实现通信的方法示例
May 06 #Python
75条笑死人的知乎神回复,用60行代码就爬完了
May 06 #Python
Python Flask 搭建微信小程序后台详解
May 06 #Python
Python玩转PDF的各种骚操作
May 06 #Python
You might like
PHP nl2br函数 将换行字符转成 &amp;lt;br&amp;gt;
2009/08/21 PHP
利用php下载xls文件(自己动手写的)
2014/04/18 PHP
我整理的PHP 7.0主要新特性
2016/01/07 PHP
PHP预定义变量9大超全局数组用法详解
2016/04/23 PHP
PHP正则判断一个变量是否为正整数的方法
2019/02/27 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
禁止F5等快捷键的JS代码
2007/03/06 Javascript
jQuery getJSON 处理json数据的代码
2010/07/26 Javascript
jQuery新闻滚动插件 jquery.roller.js
2011/06/27 Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
2012/10/11 Javascript
js 判断js函数、变量是否存在的简单示例代码
2014/03/04 Javascript
Js实现网页键盘控制翻页的方法
2014/10/30 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 简史
2015/01/09 Javascript
基于jquery animate操作css样式属性小结
2015/11/27 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
2016/11/03 Javascript
移动端界面的适配
2017/01/11 Javascript
详解Node.js access_token的获取、存储及更新
2017/06/20 Javascript
vue-router路由与页面间导航实例解析
2017/11/07 Javascript
vue中datepicker的使用教程实例代码详解
2019/07/08 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
2019/09/10 Javascript
vue 移动端记录页面浏览位置的方法
2020/03/11 Javascript
Python学习小技巧之列表项的排序
2017/05/20 Python
Python语言生成水仙花数代码示例
2017/12/18 Python
python async with和async for的使用
2019/06/20 Python
Python学习笔记之lambda表达式用法详解
2019/08/08 Python
python实现的发邮件功能示例
2019/09/11 Python
python判断无向图环是否存在的示例
2019/11/22 Python
python如何求圆的面积
2020/07/01 Python
css3动画过渡实现鼠标跟随导航效果
2018/02/08 HTML / CSS
FC-Moto丹麦:欧洲最大的摩托车服装和头盔商店之一
2019/08/20 全球购物
写一个在SQL Server创建表的SQL语句
2012/03/10 面试题
法务专员岗位职责
2014/01/02 职场文书
小学优秀教育工作者事迹材料
2014/05/09 职场文书
日语专业毕业生自荐书
2014/06/18 职场文书
2015年高三教学工作总结
2015/07/21 职场文书