身份证号码验证(一)——面向对象 身份证号码的验证我们在网上已经能够看到很多的代码了,相关的资料也有很多。但是很多都是用面向过程的方法来编写的,今天我们换一种思路用面向对象的方法来编写这个程序。 在编写一个程序之前我们要首先要学会调研。那么在这个程序中我们要首先了解的是身份证号码校验的条件是什么。因为这是第一版本我们的条件很简单,就是简单的用校验码来校验一个身份证号码是否正确。 身份证号码的编排有一定的规则,身份证号码一共是18位,其中最后一位为校验位。前十七位分别于相对应的加权系数相乘,其中加权系数W = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2],并求出他们的和与11求余数,并将余数与对应的校验码匹配ID_CHECK = [‘1’, ‘0’, ‘X’,‘9’, ‘8’, ‘7’, ‘6’, ‘5’, ‘4’, ‘3’, ‘2’]。如果求得余数为2,则身份证的最后一位就是‘X’,以此类推。通过python中的for循环,将列表id_num的前十七位分别于加权系数中的W中的十七位加权系数相乘,并将结果保存在变量ID_aXw中,将ID_aXw与11求余数,通过余数找出相应的校验码。最后通过if循环判断身份证的最后一位与通过函数求得的校验码是否相同。若不同则终止程序,若相同则继续执行。 当然在显示生活中我们应该考虑的东西有很多比如身份证中的年龄是不能够大于当前日期的等等条件。今天我们就先来一个简单点的,只考虑身份证的校验规则。这也就是调研的重要性,如果说大家在设计程序之前没有考虑到这个问题,那么这个程序就存在很大的漏洞,因此我们强调调研的重要性。 废话不多说我们开始程序的设计。在这个程序中我分成3个模块:1、设计一个函数用于输入18位数字,2、设计一个函数用于判定身份证号是否正确,3、设计一个函数用于提取身份证中的相关信息。输入模块

def __InPut_Id(self):
“”"
该函数用于输入身份证号码,并根据身份证号位数初步判定输入的是否正确
“”"
id_num = input('请输入18位身份证号码: ')
# 对身份证号码的位数进行判定,如果长度不足18为循环调用_InPutID()函数,直到位数为18位
if len(id_num) != 18:
print(“错误:身份证号码的位数不是18位!”)
# 如果该身份证号码是错误的那么直接退出程序
exit()
else:
print(“您输入的身份证号码是:” + id_num)

return id_num

这个程序中会输入一个18位的字符串,如果输入字符串的长度不是18的话程序会直接退出。

判定模块
def __Check_Id(self, ID):
“”"
本函数根据身份证号码的编码规则用于对输入的身份证号码进行判定是否正确

"""
# 将身份证号码的最后一位(校验位)保存在变量ID_check中
ID_check = ID[17]
# 定义一列表W用于存储身份证号码校验的加权系数
W = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
# 定义一个常量列表用于存储相对应的身份证最后一位的数
ID_CHECK = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
# 定义一个变量用于存放身份证的前十七位与其加权系数乘积的和
ID_aXw = 0
# 利用for循环来求和
for i in range(len(W)):ID_aXw = ID_aXw + int(ID[i]) * W[i]
m = ID_aXw % 11
print("余数为:"+str(m))
# 如果由公式求出来的身份证号码和输入的身份证号码不一致则再次调用_InPutID()函数重新输入
if ID_check != ID_CHECK[m]:print("错误:您输入的身份证号码不正确!")# 若输入的身份证号码是错误的那么直接退出程序exit()
else:print("您输入的身份证号码是正确的身份证号码")这个模块中会对身份证号码进行判定如果判定身份证好慢吧不正确则退出程序****信息提取模块****def __Extract_Id(self, ID):
"""
如果输入的身份证号码是正确的那么提取其中的性别,出生日期等信息"""
Id_Birth = ID[6:14]
ID_Sex = ID[16]
year = Id_Birth[0:4]
month = Id_Birth[4:6]
day = Id_Birth[6:8]
print("出生日期:" + year + "年" + month + "月" + day + "日")
if int(ID_Sex) % 2 == 0:print("性别:女")
else:print("性别:男")在这个程序中用索引的方式,将列表中的出生日期和性别提取出来。下面附上整个程序。"""

日期:2019年9月15日
程序名:IdCard.py
功能:输入一个身份证号码,检测是否正确并提取出出生日期和性别信息
算法:
参数:1.id_num -输入的身份证号码
2.ID_check -用于存储输入身份证号码的最后一位
3.W -用于存放加权系数
4.ID_CHECK -用于存放规定的校验码
]
5.ID_aXw -用于存放输入身份证号码与加权系数的乘积

“”"

class CheckIdCard:
“”"
设计一个身份证验证号码验证类主要有四个函数组成
1、_InPutID():输入函数,用于输入一个身份证号码并根据输入的身份证号码位数初步检测是否正确
2、_CheckID():判定函数,根据身份证号规则判断身份证号是否正确
3、_ExtractId():信息提取输出函数,从身份证号码中提取出生日期和性别
4、go():外部接口,通过go()函数实现访问CheckIdCard类中的私有函数
“”"

def __InPut_Id(self):"""该函数用于输入身份证号码,并根据身份证号位数初步判定输入的是否正确"""id_num = input('请输入18位身份证号码: ')# 对身份证号码的位数进行判定,如果长度不足18为循环调用_InPutID()函数,直到位数为18位if len(id_num) != 18:print("错误:身份证号码的位数不是18位!")# 如果该身份证号码是错误的那么直接退出程序exit()else:print("您输入的身份证号码是:" + id_num)return id_numdef __Check_Id(self, ID):"""本函数根据身份证号码的编码规则用于对输入的身份证号码进行判定是否正确"""# 将身份证号码的最后一位(校验位)保存在变量ID_check中ID_check = ID[17]# 定义一列表W用于存储身份证号码校验的加权系数W = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]# 定义一个常量列表用于存储相对应的身份证最后一位的数ID_CHECK = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']# 定义一个变量用于存放身份证的前十七位与其加权系数乘积的和ID_aXw = 0# 利用for循环来求和for i in range(len(W)):ID_aXw = ID_aXw + int(ID[i]) * W[i]m = ID_aXw % 11print("余数为:"+str(m))# 如果由公式求出来的身份证号码和输入的身份证号码不一致则再次调用_InPutID()函数重新输入if ID_check != ID_CHECK[m]:print("错误:您输入的身份证号码不正确!")# 若输入的身份证号码是错误的那么直接退出程序exit()else:print("您输入的身份证号码是正确的身份证号码")def __Extract_Id(self, ID):"""如果输入的身份证号码是正确的那么提取其中的性别,出生日期等信息"""Id_Birth = ID[6:14]ID_Sex = ID[16]year = Id_Birth[0:4]month = Id_Birth[4:6]day = Id_Birth[6:8]print("出生日期:" + year + "年" + month + "月" + day + "日")if int(ID_Sex) % 2 == 0:print("性别:女")else:print("性别:男")def go(self):"""go()函数的作用是用来充当一个外部接口,实例可以通过本函数来访问CheckIdCard类中的私有函数"""ID = self.__InPut_Id()self.__Check_Id(ID)self.__Extract_Id(ID)

# 创建一个实例并调用go()函数
Id = CheckIdCard()
Id.go()

本程序是应用面向对象编写的,所以首先创建一个CheckIdCard:类,然后在类下面定义4个函数。前三个已经介绍过了。最后一个函数是做什么的呢?最后一个函数相当于一个外部接口的作用。因为前三个函数我定义成了私有函数,所以我们用类创建的实例是无法访问到的,因此我们单独创建一个函数用于前三个函数。这样做有什么好处呢,可以防止外部的对象来调用类中的函数,保证了程序的私密性。
后续会陆续更新更详细的版本。

身份证验证程序(一)相关推荐

  1. Python写的一个身份证验证程序

    住院期间闲来无事,学了下比较流行的Python语言,用了一周,学得过于快了.写了个身份证号码验证程序. 一段时间后,发现存在重大问题,所以不辞劳苦又大改了一下.感兴趣的可以试一试,还是有问题的话,请留 ...

  2. 什么学习软件需要身份证验证_什么是两层身份验证,为什么我需要它?

    什么学习软件需要身份证验证 More and more banks, credit card companies, and even social media networks and gaming ...

  3. laravel身份证验证_简单的Laravel登录身份验证

    laravel身份证验证 This article has been upgraded to work with Laravel 4.1.26 本文已升级为可与Laravel 4.1.26一起使用 T ...

  4. php身份证验证_PHP的身份验证和访问控制

    php身份证验证 IBM安全身份和访问管理 在IBM白皮书" 何时需要访问 "中了解有关在Internet规模上管理访问控制的更多信息. 在本文的第一部分中,我向您介绍了Sentr ...

  5. 身份证验证 校验码_用户身份验证最佳做法清单

    身份证验证 校验码 用户身份验证是每个Web应用程序共享的功能. 我们已经实施了很多次了,所以早就应该完善它了. 然而,错误无时无刻不在. 造成这种情况的部分原因是,可能出错的事情列表很长. 您可能会 ...

  6. hdu身份证验证(17新生赛)

    身份证验证                                                                     Time Limit: 2000/1000 MS ( ...

  7. c# 身份证读取 神思第二代居民身份证验证机具接口函数说明__版本 V2.6.2 2017-12-20

    c# 身份证读取 神思第二代居民身份证验证机具接口函数说明__版本 V2.6.2 2017-12-20 /// <summary>/// 神思第二代居民身份证验证机具接口函数说明__版本 ...

  8. 身份证校验程序(上)- 零基础入门学习Delphi48

    身份证校验程序 让编程改变世界 Change the world by program   [caption id="attachment_2699" align="al ...

  9. html编写程序常用的,html编写简洁页面表单验证程序.doc

    html编写简洁页面表单验证程序.doc html编写简洁页面表单验证程序 "-//W3C//DTD XHTML 1.0 Transitional//EN" "1/DTD ...

  10. java简单密码验证程序

    java简单密码验证程序 package demo01;import java.util.Scanner;/*** java模拟密码验证问题* 从键盘上录入6位密码,验证密码是不是6位,如果不是6位提 ...

最新文章

  1. Zynq的AMP开发注意事项之sdk_repo
  2. 创建分辨率自适应的Windows Phone 8应用程序
  3. mysql 全文索引
  4. 计算机的网络技术的普及,计算机网络技术的普及与应用-网络技术论文-计算机论文(7页)-原创力文档...
  5. 高级点的php书,深入理解php:高级技巧、面向对象与核心技术(原书第3版) 中文pdf扫描版[76MB]...
  6. OpenCV---ROI(region of interest)和泛洪填充
  7. React 开发常见报错解决方法
  8. tableau 倒序都倒了_tableau 网络图与弧线图绘制
  9. 计算机绘图自考知识点,全国自考机械制图一试题2004.04
  10. 排序算法之------归并排序
  11. adalm pluto_Apache Pluto Portlet&Struts 2集成示例教程
  12. java开发编写基本的结构_【自学java笔记#第五天#】Java的基本程序设计结构
  13. 【宠物领养系统项目】(附源码)
  14. IP地址(IPv4)
  15. exls表格搜索快捷键_excel表格里搜索快捷键是什么,excel的搜索快捷键是什么?...
  16. kears编写CNN网络,实现对mnist的识别
  17. 64位win7下Android SDK Manager闪退的解决方法
  18. 用计算机算出女儿身高,孩子身高预测计算器准吗
  19. bootstrapTreeTable 树性插件不能够自动展开的问题
  20. 如何播放html文件类型,m3u8格式如何播放

热门文章

  1. js pug 代码_前端开发nodejs+pug——注册登录
  2. 几款百度竞价点击软件测评来一发
  3. 2003iso序列号
  4. 吴章金: 深度剖析 Linux共享库的“位置无关”实现原理
  5. VS.NET(C#)-5.18_IIS6架构模型:工作进程(Worker Process)简介
  6. 投稿经验分享之二:国际EI会议(可检索)
  7. SpringCloud整合Feign和Nacos报错:No Feign Client for loadBalancing defined. Did you forget to include?
  8. matlab的clear函数,[转载]matlab学习笔记(一)之clear,clc,close劝函数
  9. 【戏言、昔言、惜言】谭惜言写了一辈子的戏,真情假意,全在戏言里。
  10. php mysql webim_webim(icomet) 使用