先声明以下代码不是全部原创,网上找了前辈的一些代码,经过自己的部分加工,有了如下的身份证有效性验证代码:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-import reErrors = ['验证通过!', '身份证号码位数不对!', '身份证号码出生日期超出范围或含有非法字符!', '身份证号码校验错误!', '身份证地区非法!', '身份证长度应该是15或18位']
area = {"11": "北京", "12": "天津", "13": "河北", "14": "山西", "15": "内蒙古", "21": "辽宁", "22": "吉林", "23": "黑龙江", "31": "上海","32": "江苏", "33": "浙江", "34": "安徽", "35": "福建", "36": "江西", "37": "山东", "41": "河南", "42": "湖北", "43": "湖南","44": "广东", "45": "广西", "46": "海南", "50": "重庆", "51": "四川", "52": "贵州", "53": "云南", "54": "西藏", "61": "陕西","62": "甘肃", "63": "青海", "64": "宁夏", "65": "新疆", "71": "台湾", "81": "香港", "82": "澳门", "91": "国外"}def checkIdcard(idcard):length = len(idcard)if length!=15 and length!=18:return Errors[5]idcard = str(idcard)idcard = idcard.strip()idcard_list = list(idcard)# 地区校验    key = idcard[0: 2]  # TODO: cc  地区中的键是否存在if key in area.keys():if (not area[(idcard)[0:2]]):return Errors[4]else:return Errors[4]# 15位身份号码检测if (len(idcard) == 15):if ((int(idcard[6:8]) + 1900) % 4 == 0 or ((int(idcard[6:8]) + 1900) % 100 == 0 and (int(idcard[6:8]) + 1900) % 4 == 0)):ereg = re.compile('[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$')  # //测试出生日期的合法性else:ereg = re.compile('[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$')  # //测试出生日期的合法性if (re.match(ereg, idcard)):return Errors[0]else:return Errors[2]# 18位身份号码检测elif (len(idcard) == 18):# 出生日期的合法性检查# 闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))# 平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))if (int(idcard[6:10]) % 4 == 0 or (int(idcard[6:10]) % 100 == 0 and int(idcard[6:10]) % 4 == 0)):ereg = re.compile('[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$')  # //闰年出生日期的合法性正则表达式else:ereg = re.compile('[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$')  # //平年出生日期的合法性正则表达式# //测试出生日期的合法性if (re.match(ereg, idcard)):# //计算校验位S = (int(idcard_list[0]) + int(idcard_list[10])) * 7 + (int(idcard_list[1]) + int(idcard_list[11])) * 9 + (int(idcard_list[2]) + int(idcard_list[12])) * 10 + (int(idcard_list[3]) + int(idcard_list[13])) * 5 + (int(idcard_list[4]) + int(idcard_list[14])) * 8 + (int(idcard_list[5]) + int(idcard_list[15])) * 4 + (int(idcard_list[6]) + int(idcard_list[16])) * 2 + int(idcard_list[7]) * 1 + int(idcard_list[8]) * 6 + int(idcard_list[9]) * 3Y = S % 11M = "F"JYM = "10X98765432"M = JYM[Y]  # 判断校验位if (M == idcard_list[17].upper()):  # 检测ID的校验位return Errors[0]else:return Errors[3]else:return Errors[2]else:return Errors[1]if __name__ == "__main__":print(checkIdcard('1234567890'))pass

python 身份证号码有效性验证相关推荐

  1. Js实现中国公民身份证号码有效性验证

    2019独角兽企业重金招聘Python工程师标准>>> 参考: Java实现中国公民身份证号码有效性验证 Php实现中国公民身份证号码有效性验证 本文将使用JavaScript实现中 ...

  2. JAVA 身份证号码有效性验证

    本文转自:http://www.blogjava.net/zeroline/archive/2011/01/03/342227.html </pre><pre name=" ...

  3. js实现身份证号码有效性验证

    //Js获取日期.月初时的前天.昨天.今天.明天 function getDay(day) {var today = new Date();var targetday_milliseconds = t ...

  4. 身份证号码有效性验证

    结构和形式 号码的结构 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码. 地址码 表示编码对象 ...

  5. python身份证号码真假验证

    公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码. 身份证第18位(校验码)的计算方法 1. ...

  6. 【python】身份证号码有效性校验

    1. 前言 中华人民共和国国家标准GB 11643-1999<公民身份号码>中规定:公民身份号码是特征组合码,由17位数字本体码和1位校验码组成. 18位数字组合的方式是: 其中,最后一位 ...

  7. C++:18位SFZ号码有效性验证

    1.SFZ验证规则 18位SFZ号码由十七位数字本体码和一位数字校验码组成. 排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码. 其校验码(最后一位)计算方法 ...

  8. js身份证号有效性验证

    js身份证号有效性验证 1.简述 最近做的系统有用到实名验证的,起初对于用户身份证号只是简单地使用正则表达式进行验证, 很多无效的身份证号就成了漏网之鱼. 导致后台存表里很多无效的身份证号,随便输入用 ...

  9. 请写代码校验第二代身份证号码有效性。程序接收一个18位的身份证号码和性别,根据以下规则输出号码是有效还是无效。

    请写代码校验第二代身份证号码有效性.程序接收一个18位的身份证号码和性别,根据以下规则输出号码是有效还是无效. 第二代身份证号组成规则: a) 身份证号码(18位)= 地址码(6)+ 出生日期码(8) ...

最新文章

  1. 让PPT声音播放不再“哑口无言”
  2. 【译】Android中的安全数据— Android中的加密(第1部分)
  3. java如何实现多继承
  4. 揭开Java 泛型类型擦除神秘面纱
  5. linux mysql 存储过程乱码,mysql存储过程中 乱码问题解决办法
  6. 传统的世界的中国风吉祥纹样海报这样设计。
  7. jsp___jstl标签
  8. Oracle RAC的五大优势及其劣势
  9. Prism6下的MEF:添加Logger
  10. Eova项目嵌入前端页面介绍
  11. SpringBoot添加FastJson消息转换器(自用)
  12. git rm 和 rm 的区别
  13. 重建同义词+oracle,Oracle中创建,删除同义词 Synonym
  14. CVE-2013-3893 IE浏览器UAF漏洞分析
  15. 一个屌丝程序猿的人生(十五)
  16. 智能家居的春天来临 集成商还会在吗?
  17. v-charts 设置柱状图每个柱子颜色
  18. 漂亮的表格样式(使用CSS样式表控制表格样式)
  19. 软件测试周刊(第75期):唯有平视,才能看见真实的自己。
  20. visit 安装说明

热门文章

  1. Untiy的阿拉伯文本适配
  2. ASO|如何开展工作
  3. 根据csv文件按照标签划分文件夹数据集
  4. 【报名】榜单奖项+产业图谱+行业报告+线下论坛,2021年终金猿策划活动已开启...
  5. 华为手机 从服务器获取安装包信息,华为openGauss 获取并校验安装包
  6. Android之Manifest文件
  7. 详细讲解MOSFET管驱动电路(转)
  8. 第十一章 文件操作_C语言插入、删除、更改文件内容
  9. 一年级前一学期计算机应用题,计算机教学工作计划7篇
  10. 【虚幻引擎UE】UE5 超实用插件推荐