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写的一个文本编辑器
Jan 23 Python
Python中用sleep()方法操作时间的教程
May 22 Python
Python标准库笔记struct模块的使用
Feb 22 Python
python根据url地址下载小文件的实例
Dec 18 Python
Python动态赋值的陷阱知识点总结
Mar 17 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
May 31 Python
python队列原理及实现方法示例
Nov 27 Python
python 定义类时,实现内部方法的互相调用
Dec 25 Python
python将图片转base64,实现前端显示
Jan 09 Python
Python3自定义json逐层解析器代码
May 11 Python
如何基于Python Matplotlib实现网格动画
Jul 20 Python
Python入门基础之数字字符串与列表
Feb 01 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开发文件系统实例讲解
2006/10/09 PHP
PHP cron中的批处理
2008/09/16 PHP
PHP中ini_set和ini_get函数的用法小结
2014/02/18 PHP
symfony2.4的twig中date用法分析
2016/03/18 PHP
Yii2框架BootStrap样式的深入理解
2016/11/07 PHP
PHP实现的方程求解示例分析
2016/11/11 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
2018/06/19 PHP
laravel 解决多库下的DB::transaction()事务失效问题
2019/10/21 PHP
javascript的事件描述
2006/09/08 Javascript
jquery Firefox3.5中操作select的问题
2009/07/10 Javascript
JSON 学习之JSON in JavaScript详细使用说明
2010/02/23 Javascript
基于JQUERY的多级联动代码
2012/01/24 Javascript
纯css+js写的一个简单的tab标签页带样式
2014/01/28 Javascript
详解JavaScript模块化开发
2016/12/04 Javascript
JS产生随机数的用法小结
2016/12/10 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
2018/09/07 Javascript
Bootstrap-table自定义可编辑每页显示记录数
2018/09/07 Javascript
世界上最短的数字判断js代码
2019/09/09 Javascript
JS实现随机抽取三人
2019/11/06 Javascript
纯js实现无缝滚动功能代码实例
2020/02/21 Javascript
JavaScript中的this/call/apply/bind的使用及区别
2020/03/06 Javascript
Python 第一步 hello world
2009/09/25 Python
Python Learning 列表的更多操作及示例代码
2018/08/22 Python
澳大利亚在线时尚精品店:Hello Molly
2018/02/26 全球购物
一道Delphi面试题
2016/10/28 面试题
初入社会应届生求职信
2013/11/18 职场文书
初中三好学生事迹材料
2014/01/13 职场文书
关于诚信的活动方案
2014/08/18 职场文书
暑期培训班招生方案
2014/08/26 职场文书
汽车转让协议书范本
2014/12/07 职场文书
放弃遗产继承公证书
2015/01/26 职场文书
公诉意见书范文
2015/06/05 职场文书
2015年小学实验室工作总结
2015/07/28 职场文书
文明和谐家庭事迹材料(2016精选版)
2016/02/29 职场文书
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
2022/04/24 Vue.js
Win10多屏显示如何设置?Win10电脑多屏显示设置操作方法
2022/07/07 数码科技