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中使用partial改变方法默认参数实例
Apr 28 Python
python中string模块各属性以及函数的用法介绍
May 30 Python
Python的string模块中的Template类字符串模板用法
Jun 27 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
Dec 12 Python
Python多线程threading和multiprocessing模块实例解析
Jan 29 Python
python+unittest+requests实现接口自动化的方法
Nov 29 Python
python模拟登陆,用session维持回话的实例
Dec 27 Python
Django实现web端tailf日志文件功能及实例详解
Jul 28 Python
python下载库的步骤方法
Oct 12 Python
python使用pip安装SciPy、SymPy、matplotlib教程
Nov 20 Python
在django中自定义字段Field详解
Dec 03 Python
python非标准时间的转换
Jul 25 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
在DC的漫画和电影中,蝙蝠侠的宿敌,小丑的真名是什么?
2020/04/09 欧美动漫
使用PHP实现二分查找算法代码分享
2011/06/24 PHP
关于php 接口问题(php接口主要也就是运用curl,curl函数)
2013/07/01 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
2014/06/25 PHP
php实现建立多层级目录的方法
2014/07/19 PHP
php超快高效率统计大文件行数
2015/07/05 PHP
Yii2使用swiftmailer发送邮件的方法
2016/05/03 PHP
基于PHP生成简单的验证码
2016/06/01 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
2017/03/04 PHP
深入解析PHP底层机制及相关原理
2020/12/11 PHP
JQuery中的ready函数冲突的解决方法
2010/05/17 Javascript
js中判断控件是否存在
2010/08/25 Javascript
IE无法设置短域名下Cookie
2010/09/23 Javascript
cnblogs中在闪存中屏蔽某人的实现代码
2010/11/14 Javascript
23个Javascript弹出窗口特效整理
2011/02/25 Javascript
JavaScript中的undefined学习总结
2013/11/30 Javascript
jQuery队列操作方法实例
2014/06/11 Javascript
基于Jquery+Ajax+Json实现分页显示附效果图
2014/07/30 Javascript
PageSwitch插件实现100种不同图片切换效果
2015/07/28 Javascript
AngularJS基础 ng-mousemove 指令简单示例
2016/08/02 Javascript
angular2 ng2 @input和@output理解及示例
2017/10/10 Javascript
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
微信小程序App生命周期详解
2018/01/31 Javascript
JQuery省市联动效果实现过程详解
2020/05/08 jQuery
微信小程序实现拨打电话功能的示例代码
2020/06/28 Javascript
sqlalchemy对象转dict的示例
2014/04/22 Python
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
Python @property使用方法解析
2019/09/17 Python
Flask项目中实现短信验证码和邮箱验证码功能
2019/12/05 Python
Flask 上传自定义头像的实例详解
2020/01/09 Python
PHP开发工程师面试问题集锦
2012/11/01 面试题
星空联盟C# .net笔试题
2014/12/05 面试题
小学教师个人先进事迹材料
2014/05/17 职场文书
入党积极分子群众意见
2015/06/01 职场文书
2019销售早会主持词
2019/06/27 职场文书
《飘》英文读后感五篇
2019/10/11 职场文书