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 相关文章推荐
用PyQt进行Python图形界面的程序的开发的入门指引
Apr 14 Python
全面理解Python中self的用法
Jun 04 Python
Python3学习urllib的使用方法示例
Nov 29 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
May 24 Python
根据DataFrame某一列的值来选择具体的某一行方法
Jul 03 Python
python得到qq句柄,并显示在前台的方法
Oct 14 Python
对pandas中时间窗函数rolling的使用详解
Nov 28 Python
python图像和办公文档处理总结
May 28 Python
快速解决docker-py api版本不兼容的问题
Aug 30 Python
Python JSON编解码方式原理详解
Jan 20 Python
Python调用.net动态库实现过程解析
Jun 05 Python
Django中和时区相关的安全问题详解
Oct 12 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
珊瑚虫IP库浅析
2007/02/15 PHP
DedeCms模板安装/制作概述
2007/03/11 PHP
一个图片地址分解程序(用于PHP小偷程序)
2014/08/23 PHP
php微信开发之百度天气预报
2016/11/18 PHP
浅谈PHP实现大流量下抢购方案
2017/12/15 PHP
ext监听事件方法[初级篇]
2008/04/27 Javascript
JS 动态加载脚本的4种方法
2009/05/05 Javascript
JS判断是否为数字,是否为整数,是否为浮点数的代码
2010/04/24 Javascript
使用jQuery内容过滤选择器选择元素实例讲解
2013/04/18 Javascript
JavaScript动态改变表格单元格内容的方法
2015/03/30 Javascript
JavaScript 常见安全漏洞和自动化检测技术
2015/08/21 Javascript
bootstrap实现弹窗和拖动效果
2016/01/03 Javascript
JavaScript基础知识及常用方法总结
2016/01/10 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
2017/01/04 Javascript
深入理解angular2启动项目步骤
2017/07/15 Javascript
nodejs实现套接字服务功能详解
2018/06/21 NodeJs
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
2018/08/12 Javascript
vue 框架下自定义滚动条(easyscroll)实现方法
2019/08/29 Javascript
[00:55]2015国际邀请赛中国区预选赛5月23日——28日约战上海
2015/05/25 DOTA
10种检测Python程序运行时间、CPU和内存占用的方法
2015/04/01 Python
python Pandas 读取txt表格的实例
2018/04/29 Python
python之验证码生成(gvcode与captcha)
2019/01/02 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
2019/07/25 Python
解决Python中回文数和质数的问题
2019/11/24 Python
Python3中的f-Strings增强版字符串格式化方法
2020/03/04 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
浅谈html5增强的页面元素
2016/06/14 HTML / CSS
俄罗斯最大的香水和化妆品网上商店:Randewoo
2020/11/05 全球购物
介绍一下Linux内核的排队自旋锁
2014/08/27 面试题
教师党员先进性教育自我剖析材料思想汇报
2014/09/24 职场文书
2015年计生工作总结范文
2015/04/24 职场文书
闪闪的红星观后感
2015/06/08 职场文书
公司致全体员工的感谢信
2019/06/24 职场文书
Golang 正则匹配效率详解
2021/04/25 Golang
Vue router配置与使用分析讲解
2022/12/24 Vue.js