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模拟登录百度代码分享(获取百度贴吧等级)
Dec 27 Python
python调用fortran模块
Apr 08 Python
Python使用logging结合decorator模式实现优化日志输出的方法
Apr 16 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
Jan 18 Python
python覆盖写入,追加写入的实例
Jun 26 Python
Python2和3字符编码的区别知识点整理
Aug 08 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
Mar 28 Python
如何更换python默认编辑器的背景色
Aug 10 Python
Pycharm学生免费专业版安装教程的方法步骤
Sep 24 Python
浅谈Python中的函数(def)及参数传递操作
May 25 Python
Python基础学习之奇异的GUI对话框
May 27 Python
python数字图像处理:图像简单滤波
Jun 28 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
德劲1103二次变频版的打磨
2021/03/02 无线电
PHP新手上路(十四)
2006/10/09 PHP
PHP 多维数组排序(usort,uasort)
2010/06/30 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
2014/01/31 PHP
PHP数组排序之sort、asort与ksort用法实例
2014/09/08 PHP
php 生成加密公钥加密私钥实例详解
2017/06/16 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
2017/08/11 PHP
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
2012/07/31 Javascript
Jquery post传递数组方法实现思路及代码
2013/04/28 Javascript
javascript中怎么做对象的类型判断
2013/11/11 Javascript
基于javascript实现表格的简单操作
2016/05/21 Javascript
jQuery实现的自定义滚动条实例详解
2016/09/20 Javascript
Bootstrap基本组件学习笔记之分页(12)
2016/12/08 Javascript
JavaScript使用ZeroClipboard操作剪切板
2017/05/10 Javascript
基于JavaScript实现无缝滚动效果
2017/07/21 Javascript
在vue中使用css modules替代scroped的方法
2018/03/10 Javascript
基于vue实现探探滑动组件功能
2020/05/29 Javascript
vue-cli4项目开启eslint保存时自动格式问题
2020/07/13 Javascript
Python获取系统默认字符编码的方法
2015/06/04 Python
Vue的el-scrollbar实现自定义滚动
2018/05/29 Python
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
对python csv模块配置分隔符和引用符详解
2018/12/12 Python
Python2和Python3的共存和切换使用
2019/04/12 Python
Pandas库之DataFrame使用的学习笔记
2019/06/21 Python
Python 共享变量加锁、释放详解
2019/08/28 Python
Django实现文件上传下载功能
2019/10/06 Python
Python3自动生成MySQL数据字典的markdown文本的实现
2020/05/07 Python
英国美术用品购物网站:Cass Art
2019/10/08 全球购物
安康杯竞赛活动总结
2014/05/05 职场文书
2014优秀大学生简历自我评价
2014/09/15 职场文书
自查自纠工作总结
2014/10/15 职场文书
2015年中个人总结范文
2015/03/10 职场文书
解决Django transaction进行事务管理踩过的坑
2021/04/24 Python
python分分钟绘制精美地图海报
2022/02/15 Python
分布式Redis Cluster集群搭建与Redis基本用法
2022/02/24 Redis
Python实现抖音热搜定时爬取功能
2022/03/16 Python