#-*- coding: utf-8 -*-

importre#Errors=[‘验证通过!‘,‘身份证号码位数不对!‘,‘身份证号码出生日期超出范围或含有非法字符!‘,‘身份证号码校验错误!‘,‘身份证地区非法!‘]

defcheckIdcard(idcard):

Errors=[‘验证通过!‘,‘身份证号码位数不对!‘,‘身份证号码出生日期超出范围或含有非法字符!‘,‘身份证号码校验错误!‘,‘身份证地区非法!‘]

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":"国外"}

idcard=str(idcard)

idcard=idcard.strip()

idcard_list=list(idcard)#地区校验

if(not area[(idcard)[0:2]]):print 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 )):

erg=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)):printErrors[0]else:print 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[0-9]{2}|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[0-9]{2}|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]):#检测ID的校验位

printErrors[0]else:print Errors[3]else:print Errors[2]else:print Errors[1]if __name__ == "__main__":whileTrue:

cdcard= raw_input(u"请输入你的身份证号:")if cdcard == "exit":print u"程序已结束!"

break

else:

checkIdcard(cdcard)

python身份证验证程序_python 身份证验证相关推荐

  1. 怎么在C语言软件上验证程序,一种验证指针程序的方法

    随着国家.社会和日常生活对软件系统的依赖程度日益增长,安全攸关软件的高可信成为保障国家安全.保持经济可持续发展和维护社会稳定的必要条件. 形式验证是提高软件可信程度的重要方法.粗略地说,软件的形式验证 ...

  2. python编写表白程序_python如何写出表白程序

    用python编表白程序的方法: 1.创建GUI窗口,实现代码的调用. 2.编写点击触发函数,实现表白程序. 具体代码如下: from tkinter import * from tkinter im ...

  3. python判断素数程序_Python程序检查素数

    python判断素数程序 什么是质数? (What is a prime number?) A prime number is a natural number that is greater tha ...

  4. python二分法查找程序_Python程序查找最大EVEN数

    python二分法查找程序 Input N integer numbers and we have to find the maximum even number. 输入N个整数,我们必须找到最大的偶 ...

  5. python二分法查找程序_Python程序查找地板划分

    python二分法查找程序 When we divide a number by another number – division operator (/) return quotient it m ...

  6. python自我复制的程序_Python自我

    python自我复制的程序 In this lesson, we will study about the usage of Python self. It is often a point of d ...

  7. python编写hello程序_python第一个程序“Hello, world”

    python第一个程序 无论通过哪种方式使用Python的交互模式,都应该看到由3个三角括号">>>"组成的提示符.这就是Python的命令行提示符,表示可以键入 ...

  8. python登录验证程序_Python模拟用户登录验证

    本文实例为大家分享了Python模拟用户登录验证的具体代码,供大家参考,具体内容如下 1.功能简介 此程序模拟用户登录验证的过程,实现用户名输入.黑名单检测.用户有效性判别.密码输入及验证等.用户在3 ...

  9. python编写一个登陆验证程序_python项目实战:实现验证码登录网址实例

    前言 相信大家都明白,大多数的网站为了不被恶意访问,往往需要设置验证码登录,避免机器人访问,而造成我服务器瘫痪,崩溃,这里用到Python3,主要用到的包是re urllib.request http ...

  10. python登录验证程序_python – 测试Flask登录和身份验证?

    我正在开发一个Flask应用程序,并使用Flask-security进行用户身份验证(其又使用Flask-login在下面). 我有一个需要身份验证的路由,/ user.我正在尝试编写一个单元测试,测 ...

最新文章

  1. 小知识一、让Swift继续用OC#warning效果
  2. linux下利用openssl来实现证书的颁发(详细步骤)--转载和修改
  3. 区块链BaaS云服务(17)纸贵科技Z-BaaS平台“跨链”
  4. 阿里巴巴资深技术专家雷卷:值得开发者关注的 Java 8 后时代的语言特性
  5. pdf百度云下载 python编程 从数据分析到数据科学_python零基础入门教程,不同方向的,这很重要...
  6. [.NET] 怎样使用 async await 一步步将同步代码转换为异步编程
  7. Xcode 4.2 中的Automatic Reference Counting (ARC) (转)
  8. mysqldump导出数据备份 --set-gtid-purged=OFF(简明!!)
  9. 通俗易懂的YOLO系列(从V1到V5)模型解读!
  10. B-样条曲线——动机 Motivation
  11. 给表空间增加新的数据文件
  12. python中如何控制随机的概率_Python3根据基础概率随机生成选项
  13. 7-2 英文单词排序 (25分)
  14. [4G5G专题-2]:RRU 射频功率放大器PA与低噪声放大器LNA
  15. 红旗linux常用端口,红旗linux使用指南
  16. 30+小哥哥从央企离职,转行软件测试,入职薪资11K
  17. 轧机是用计算机操作的吗,轧机生产操作流程及安全规程
  18. 3D打印塑料钢网全流程介绍(文件输出、PCB刷锡浆、PTC焊接)
  19. 标准差与标准偏差的区别
  20. 我对锤子ROM 功能的看法——功能篇——高效整理桌面图标

热门文章

  1. cad填充图案乱理石_AutoCAD2017怎么填充图案 如何进行图案填充
  2. RSA算法生成2048位公私钥
  3. Linux统计代码行数
  4. YUV420 总结 (YU12、YV12、NV12 和 NV21)
  5. CHIP-SEQ 芯片分析时,对于来自重复实验的数据,怎样进行MACS peaks calling 分析?
  6. 思科与华为设备OSPF配置命令对比
  7. [Render] Unity SRP 概述:可编写脚本的渲染管道
  8. Axure动态面板设置 2020-11-06
  9. ASP.NET车辆管理系统
  10. 计算机课件大学,大学计算机基础应用课件