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计算圆周长、面积、球体体积并画出圆
Apr 08 Python
用Python中的__slots__缓存资源以节省内存开销的方法
Apr 02 Python
在Python的struct模块中进行数据格式转换的方法
Jun 17 Python
Python多线程经典问题之乘客做公交车算法实例
Mar 22 Python
Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)
Jul 06 Python
django限制匿名用户访问及重定向的方法实例
Feb 07 Python
对Python3中的input函数详解
Apr 22 Python
Python如何计算语句执行时间
Nov 22 Python
节日快乐! Python画一棵圣诞树送给你
Dec 24 Python
python时间日期操作方法实例小结
Feb 06 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
Mar 06 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
Jun 03 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 无限级数据JSON格式及JS解析
2010/07/17 PHP
PHP与MYSQL中UTF8 中文排序示例代码
2014/10/23 PHP
PHP调试函数和日志记录函数分享
2015/01/31 PHP
PHP通过引用传递参数用法分析
2016/12/01 PHP
PHP实现的数组和XML文件相互转换功能示例
2018/03/15 PHP
自适应高度框架 ----属个人收藏内容
2007/01/22 Javascript
建议大家看下JavaScript重要知识更新
2007/07/08 Javascript
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
2010/04/25 Javascript
关于微信上网页图片点击全屏放大效果
2016/12/19 Javascript
JavaScript ES6中export、import与export default的用法和区别
2017/03/14 Javascript
Node+Express+MongoDB实现登录注册功能实例
2017/04/23 Javascript
inner join 内联与left join 左联的实例代码
2017/09/18 Javascript
ionic选择多张图片上传的示例代码
2017/10/10 Javascript
Vue子组件向父组件通信与父组件调用子组件中的方法
2018/06/22 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
2018/09/25 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
2018/10/30 Javascript
Vue项目引进ElementUI组件的方法
2018/11/11 Javascript
Nuxt默认模板、默认布局和自定义错误页面的实现
2020/05/11 Javascript
解决vue单页面应用进入页面加载所有 js 的问题
2020/08/12 Javascript
Django在Win7下的安装及创建项目hello word简明教程
2014/07/14 Python
Python实现的摇骰子猜大小功能小游戏示例
2017/12/18 Python
Python判断是否json是否包含一个key的方法
2018/12/31 Python
对python 判断数字是否小于0的方法详解
2019/01/26 Python
使用pandas把某一列的字符值转换为数字的实例
2019/01/29 Python
python 计算积分图和haar特征的实例代码
2019/11/20 Python
python操作yaml说明
2020/04/08 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
Expected conditions模块使用方法汇总代码解析
2020/08/13 Python
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
个人收入证明范本
2014/01/12 职场文书
2014年党员整改措施范文
2014/09/21 职场文书
国王的演讲观后感
2015/06/03 职场文书
警示教育观后感
2015/06/17 职场文书
酒店厨房管理制度
2015/08/06 职场文书
python绘制简单直方图(质量分布图)的方法
2022/04/21 Python
Nginx利用Logrotate实现日志分割
2022/05/20 Servers