投稿  收藏 
分析身份证信息

【问题描述】

给定身份证号码(本题中的身份证号为51362219810927512X),解析其不同位置上的数字所表达的含义。

分析身份证信息输出结果:

51:第1位和第2位代表所在省(直辖市、自治区)的代码

36:第3位和第4位代表所在地级市(自治州)的代码

22:第5位和第6位代表所在区(县、自治县、县级市)的代码

19810927:第7位—第14位代表出生年、月、日

51:第15位和第16位代表所在地的派出所的代码

2:第17位代表性别(注:奇数=>男 偶数=>女)

X:校验码,X表示10

【题前思考】

根据问题描述,填写表10-2-2。

表10-2-2 问题分析

分析身份证信息

【解题思路】

根据身份证号码中不同位置上的数字的含义,应用前面学过的正则表达式的知识可以写出相应的正则表达式。使用( )将需要捕获的数位括起来,使用匹配对象的group( )或groups( )方法输出每个捕获组。

【程序代码】

分析身份证信息

【代码分析】

①:写出了身份证号码的分离样式,如图10-2-3所示。“^”和“$”是断言符号,“^”表示从字符串开始匹配,“$”表示匹配字符串结束位置。如样式^the$只能匹配字符串“the”,不能匹配“clothe”“there”和“northern”等情况。

②:re.match( )方法匹配成功将返回一个匹配对象,其中保存了匹配的完整字符串和捕获组的文本,可以使用匹配对象的group( )或groups( )方法访问各捕获组,访问方法如图10-2-3中第3、4、5行所示。

分析身份证信息

图10-2-3 身份证号码分离样式及分组访问方法

③:groups( )方法返回一个元组,其中每个元素都是一个捕获组文本,通过for循环输出。

【优化提升】

Python中没有switch case语句,除了使用示例提供的多分支方法外,我们还可以通过字典方式实现。下面的代码可实现相同的功能。

分析身份证信息

【技术全貌】

本案例中,正则表达式'^(\d{2})(\d{2})(\d{2})(\d{8})(\d{2})(\d)([0-9X])$'如果改写为'^(\d{2}){3}(\d{8})(\d{2})(\d)([0-9X])$',将不能正确分离前六位号码。正则表达式捕获组的数量是由( )次数决定的,而且要排除掉非捕获组(?:),没有匹配的组是空串。样式'(\d{2}){3}'虽然匹配3次,但只保存一个组,即最后一次匹配的文本。

关 键 词

身份证信息

相关教程

提示声明

  • 免责声明:本站资源均来自网络或者用户投稿,仅供用于学习和交流:如有侵权联系删除!

猜你喜欢