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标准库之循环器(itertools)介绍
Nov 25 Python
python中列表和元组的区别
Dec 18 Python
python爬取拉勾网职位数据的方法
Jan 24 Python
浅谈python requests 的put, post 请求参数的问题
Jan 02 Python
Python脚本修改阿里云的访问控制列表的方法
Mar 08 Python
django Admin文档生成器使用详解
Jul 22 Python
简单了解Pandas缺失值处理方法
Nov 16 Python
python3 assert 断言的使用详解 (区别于python2)
Nov 27 Python
利用python实现平稳时间序列的建模方式
Jun 03 Python
python对execl 处理操作代码
Jun 22 Python
plt.figure()参数使用详解及运行演示
Jan 08 Python
浅析Django接口版本控制
Jun 26 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类型约束用法示例
2016/09/28 PHP
编写可维护面向对象的JavaScript代码[翻译]
2011/02/12 Javascript
JQuery AJAX 中文乱码问题解决
2013/06/05 Javascript
动态加载dtree.js树treeview(示例代码)
2013/12/17 Javascript
深入分析escape()、encodeURI()、encodeURIComponent()的区别及示例
2014/08/04 Javascript
JavaScript检测弹出窗口是否已经关闭的方法
2015/03/24 Javascript
jQuery实现鼠标点击弹出渐变层的方法
2015/07/09 Javascript
javascript实现手机震动API代码
2015/08/05 Javascript
JS+CSS实现TreeMenu二级树形菜单完整实例
2015/09/18 Javascript
JS实现的文字与图片定时切换效果代码
2015/10/06 Javascript
JSON简介以及用法汇总
2016/02/21 Javascript
Vue2组件tree实现无限级树形菜单
2017/03/29 Javascript
BootStrap数据表格实例代码
2017/09/13 Javascript
可能被忽略的一些JavaScript数组方法细节
2019/02/28 Javascript
JS脚本实现定时到网站上签到/签退功能
2020/04/22 Javascript
react中hook介绍以及使用教程
2020/12/11 Javascript
编写Python脚本来实现最简单的FTP下载的教程
2015/05/04 Python
Python 基础之字符串string详解及实例
2017/04/01 Python
Python加载带有注释的Json文件实例
2018/05/23 Python
Python 调用PIL库失败的解决方法
2019/01/08 Python
python文件及目录操作代码汇总
2020/07/08 Python
全球在线商店:BerryLook
2019/04/14 全球购物
Fanatics官网:运动服装、球衣、运动装备
2020/10/12 全球购物
大队委竞选演讲稿
2014/04/28 职场文书
说明书怎么写
2014/05/06 职场文书
清正廉洁演讲稿
2014/05/22 职场文书
煤矿安全承诺书
2014/05/22 职场文书
关于对大人不礼貌的检讨书
2014/09/29 职场文书
党委班子纠正“四风”问题整改措施
2014/10/28 职场文书
会计工作总结范文2014
2014/12/23 职场文书
优秀大学生事迹材料
2014/12/24 职场文书
《分一些蚊子进来》读后感3篇
2020/01/09 职场文书
python使用pymysql模块操作MySQL
2021/06/16 Python
深入理解java.lang.String类的不可变性
2021/06/27 Java/Android
win10更新失败无限重启解决方法
2022/04/19 数码科技
python和anaconda的区别
2022/05/06 Python