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 相关文章推荐
rhythmbox中文名乱码问题解决方法
Sep 06 Python
Python抓取电影天堂电影信息的代码
Apr 07 Python
tornado 多进程模式解析
Jan 15 Python
python实现将excel文件转化成CSV格式
Mar 22 Python
使用Python机器学习降低静态日志噪声
Sep 29 Python
Python获取网段内ping通IP的方法
Jan 31 Python
Python中dict和set的用法讲解
Mar 28 Python
详解pandas中iloc, loc和ix的区别和联系
Mar 09 Python
python 将视频 通过视频帧转换成时间实例
Apr 23 Python
Python基于数列实现购物车程序过程详解
Jun 09 Python
Python实现树莓派摄像头持续录像并传送到主机的步骤
Nov 30 Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 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计算两个路径的相对路径
2013/06/14 PHP
php 修改、增加xml结点属性的实现代码
2013/10/22 PHP
php绘制一条直线的方法
2015/01/24 PHP
使用JavaScript创建新样式表和新样式规则
2016/06/14 PHP
利用php获得flv视频长度的实例代码
2017/10/26 PHP
Laravel相关的一些故障解决
2020/08/19 PHP
jquery中实现简单的tabs插件功能的代码
2011/03/02 Javascript
JavaScript面向对象编程入门教程
2014/04/16 Javascript
node.js中的http.request方法使用说明
2014/12/14 Javascript
JavaScript多图片上传案例
2015/09/28 Javascript
浅谈js在html中的加载执行顺序,多个jquery ready执行顺序
2016/11/26 Javascript
原生javascript移动端滑动banner效果
2017/03/10 Javascript
H5手机端多文件上传预览插件
2017/04/21 Javascript
vue写h5页面的方法总结
2019/02/12 Javascript
微信小程序 image组件遇到的问题
2019/05/28 Javascript
vue3 源码解读之 time slicing的使用方法
2019/10/31 Javascript
编写一个javascript元循环求值器的方法
2020/04/14 Javascript
基于vue 动态菜单 刷新空白问题的解决
2020/08/06 Javascript
jQuery实现简单评论功能
2020/08/19 jQuery
[44:15]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第二局
2016/03/06 DOTA
Python help()函数用法详解
2014/03/11 Python
python中的内置函数getattr()介绍及示例
2014/07/20 Python
python 判断网络连通的实现方法
2018/04/22 Python
Django 模型类(models.py)的定义详解
2019/07/19 Python
Pycharm Git 设置方法
2020/09/15 Python
5分钟实现Canvas鼠标跟随动画背景
2019/11/18 HTML / CSS
全球最大最受欢迎的旅游社区:Tripadvisor
2017/11/03 全球购物
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
英国家居用品和家居装饰品购物网站:Cox & Cox
2019/08/25 全球购物
《最大的“书”》教学反思
2014/02/14 职场文书
鲁冰花观后感
2015/06/10 职场文书
《鲸》教学反思
2016/02/23 职场文书
Python提取PDF指定内容并生成新文件
2021/06/09 Python
Java tomcat手动配置servlet详解
2021/11/27 Java/Android
Node.js实现爬取网站图片的示例代码
2022/04/04 NodeJs
mapstruct的用法之qualifiedByName示例详解
2022/04/06 Java/Android