问题描述:

中华人民共和国居民身份证号码由17 位数字和1位校验码组成。
其中,前6位为所在地编号,第7~14 位为出生年月日,第15~17位为登记流水号,其中第17位偶数为女性,奇数为男性。

校验码的生成规则如下: 将前面的身份证号码17位数分别乘以不同的系数。第1~17位的系数分别为: 7,9,10,5,8 4,2,1,6,3,7,9,10,5,8,4,2,将这17 位数字和系数相乘的结果相加,用相加的结果与11求模,余数结果只可能是0,1,2,3,4,5,6,7,8,9,10这11个数字,它们分别对应的最后一位身份证的号码为1,0,X,9,8,7,6,5,4,3,2。例如,如果余数是2,最后一位数字就是罗马数字x,如果余数是10,则身份证的最后一位就是2。

请设计程序实现输入18位身份证号,辨别其真伪。若为真,则进一步判断性别: 若不是18位或身份证号非法,则提示重新输入。提示:定义如下两个元组,对输入字符串进行遍历。 factor=(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2) last=(“1”,“0”,“x”,“9”,“8”,“7”,“6”,“5”,“4”,“3”,“2”)

代码实现:

factor = (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
last = ("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2")
while True:flag = Trueident = input("请输入你的身份证号:")# 首先判断输入的是否为18位if len(ident) == 18:# 除去字符串中的空格identity = ident.replace(" ", "")if len(identity) == 18:identity_result = []# 判断前17位是否有非法字符for i in identity[0: 17: 1]:try:identity_result.append(int(i))except:flag = False# 使用lambda匿名函数定义乘法规则func = lambda x, y: x * y# map内置函数会根据提供的函数对指定的序列做映射,得到两个列表相乘的列表result_mult = list(map(func, identity_result, factor))# 将相乘的结果相加,用相加的结果与11求模result_add_yu = sum(result_mult) % 11# 根据身份证的第十八位和求得的余数对应的字符判断身份证号是否合法if identity[17] == last[result_add_yu] and flag == True:print("身份证号输入合法。")if identity_result[16] % 2 == 0:print("性别为女性。")else:print("性别为男性。")breakelse:print("身份证号输入不合法!请重新输入!")continueelse:print("身份证号位数不合法!!请重新输入!")continueelse:print("身份证号位数不合法!!!请重新输入!")continue

打印测试结果:

Python之身份证号码的校验相关推荐

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

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

  2. Python编程100例--身份证号码的校验码

    身份证号码的校验码 任务描述: 身份证号码是由17位数字本体码和1位数字校验码组成,具有特定含义: 前6位是省市县行政区划分代码:第7-14位为出生年月日:第15-17位为登记流水号,其中第17位为偶 ...

  3. python身份证号码正则表达式校验(含最后一位的校验值规则)

    这里是java版本的:https://yanwenjing.blog.csdn.net/article/details/76066985 请仔细阅读注释 点击这里下载判断身份证号码的小工具 身份证号码 ...

  4. C语言——实验一:查验身份证(身份证号码的校验码)

    前言 为什么我这个萌新要来写这篇文章?事情还要从上周三说起. 在上周三的程序设计基础课上,我们老师给我们全班同学布置了一项题为<实验一:查验身份证>的实验作业,这也是我第一次接触到实验作业 ...

  5. java身份证号码正则表达式校验(含最后一位的校验值规则)

    这里是python版本的: https://yanwenjing.blog.csdn.net/article/details/108210623 请仔细阅读注释 点击这里下载判断身份证号码的小工具 身 ...

  6. iOS之身份证号码全校验与校验位自动补全

    在项目中进行身份证号码的校验,首先有必要了解一下居民身份证的基本构成: 长度必须是18位,前17位必须是数字,第十八位可以是数字或X: 前两位必须是以下情形中的一种:11.12.13.14.15.21 ...

  7. 如何对身份证号码进行校验?

    每个人的身份证号码都都是一串有特别意义的数字,如代表出生地,出生日,性别等,那么对于行政上的一些工作,核对身份证是不是输入有误,身份证是否造假,也是可以通过身份证上的号码数字进行核对检查. 先看一下原 ...

  8. Python+Opencv身份证号码区域提取及识别实现

    前端时间智能信息处理实训,我选择的课题为身份证号码识别,对中华人民共和国公民身份证进行识别,提取并识别其中的身份证号码,将身份证号码识别为字符串的形式输出.现在实训结束了将代码发布出来供大家参考,识别 ...

  9. Python小白入门- 101 ( 工具篇) Python完成身份证号码校验的算法

    根据国家标准GB 11643-1999<公民身份证号码>的要求: 身份证号码由18位组成,前17位为数字,最后一位是校验码,可能为数字或字母X.其中,前6位是地区代码,接下来8位是出生日期 ...

  10. Python识别身份证号码并检查是否合法(pysseract,dlib,opencv)

    接下来我将讲述如何利用pysseract.dlib以及OpenCV识别身份证号码并检查其是否合法(包括库文件的安装等). 我参照了以下两篇博客的内容(或者说是这两篇博客的整理以及整合): https: ...

最新文章

  1. Proxool配置多数据源动态切换
  2. Nature盘点的这些代码,个个都改变了科学:Fortran、AlexNet还有arXiv等
  3. 白话Elasticsearch64-zen discovery集群发现机制
  4. 开发可以复用的构件和利用可以复用的构件进行开发
  5. 【SPSS】SPSS第五周作业
  6. 如何形象地理解 Python 中的 int 类型是任意精度这一概念?
  7. HTML5 postMessage解决跨域|跨窗口通信
  8. Raki的读paper小记:WaveTransformer: A Novel Architecture for Audio Captioning
  9. 微信机器人,微信聊天机器人搭建教程附源代码
  10. 机械工程师手册 pdf版下载_现代机械零部件设计手册 [于惠力 编]pdf下载0284
  11. 优秀软件测试工程师必读书籍推荐
  12. Java - Timestamp cannot be cast to String
  13. python文字游戏循环3次_Python寻宝游戏中的无限循环
  14. 如何使用ArcGIS计算分区河流(管线)总长度
  15. 在线AI日语视频音频翻译中文字幕
  16. 靶机渗透(一)——bulldog2
  17. 蓝屏 0x00000001 问题怎么解决?
  18. ts给Number类型数据添加自定义方法报错:类型“Number”上不存在属性“divideStr”的解决方案
  19. 前美图技术总裁洪小军入职AfterShip 担当CTO助力全球电商服务平台
  20. c语言之simp _link

热门文章

  1. 移动营业厅前台设备如何安装+新手引导
  2. windows提示“为了对电脑进行保护,已经阻止此应用”的解决方案 mmc.exe
  3. 为了对电脑进行保护,已经阻止此应用 解决办法
  4. centos7安装apache
  5. 统计成绩及格率和优秀率题目
  6. mir2 client: review
  7. 树莓派在身份证件核验领域应用
  8. android6刷机教程,安卓手机刷机步骤
  9. php删除文件还能修复吗,删除文件恢复
  10. allegro中差分对设置