一、任务描述

西普工程师想了解正则表达式,为达到更好的对正则更深入的认知,打算利用正则表达式实现身份证信息的验证的实验,结合Python的基础知识实现并填写工作报告。

二、任务目标

1)熟悉Python的基本操作

2)掌握正则的原理及操作

三、任务环境

Ubuntu16.04、Python2.7.13

四、任务分析

正则表达式是用于处理字符串的强大工具,它并不是Python的一部分。

其他编程语言中也有正则表达式的概念,区别只在于不同的编程语言实现支持的语法数量不同。

它拥有自己独特的语法以及一个独立的处理引擎,在提供了正则表达式的语言里,正则表达式的语法都是一样的。

下图展示了使用正则表达式进行匹配的流程:

正则表达式的大致匹配过程是:

1、依次拿出表达式和文本中的字符比较,

2、如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。

3、如果表达式中有量词或边界,这个过程会稍微有一些不同。

♥ 知识链接

正则表达式  构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。

♥ 温馨提示

正则表达式是re模块

五、任务实施

步骤1、环境准备

右击Ubuntu操作系统桌面,从弹出菜单中选择【Open in Terminal】命令 打开终端。

通过【cd /home】进入home目录下,如图1所示。

图1 home目录下

在home目录下通过【mkdir idcard】创建程序的文件夹,如图2所示。

图2 创建文件夹

通过【cd idcard】进入idcard目录下,在该目录下通过【touch idcard.py】创建Python文件,如图3所示。

图3 创建idcard.py文件

编辑idcard.py文件,使用【vim idcard.py】,回车后进入到idcard的编辑框内,如图4所示。

图4 编辑Python文件

步骤2、Python 程序

在新建的Python文件中,写入如下程序,如图5所示

# coding:utf-8 编码设置为utf-8,必须设置,有多中写法。

importre python正则表达式模块。图5 模块

处理得到的身份证号,分别得到生日等字段,如图6所示。

图6 截取字段

首先对前两位进行验证,是否是合法的,再次对闰年与平年进行验证,分别写不同正则表达式对身份证号码进行验证,(正则表达式本身为一行,由于显示的原因进行换行,正则表达式内本身是没有单引号的,表达式开头与结尾是有单引号)如图7所示。

图7 身份验证

通过re.match测试出生日期的合法性,对身份证信息的每一位进行校验,将结果除以11求余,得到校验码,具体原理可百度身份证的校验原理。如图8所示

图8 校验码

将得到的校验码与身份证最后一位相匹配,正确后并得到出生信息与性别并输出,否则提示报错信息,如图9所示。

图9 检验校验码

python程序中main方法与Java的main方法作用类似,程序的主入口,调用上面所有的检查身份证信息的函数,如图10所示。

图10 main方法

程序源码如下所示

#coding:utf-8

import re #python正则表达式模块数#函数

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转为string类型

idcard=idcard.strip() #默认删除空白符

idcard_list=list(idcard) #将idcard 放入列表中

idcard_brith = idcard[6:14] #生日字段

idcard_sex = idcard[14:17] #性别字段

year = idcard_brith[0:4] #年

month = idcard_brith[4:6] #月

day = idcard_brith[6:8] #日

#地区校验,验证输入的前两位

if(not area[(idcard)[0:2]]):print Errors[4]#18位身份号码检测

elif(len(idcard)==18):#出生日期的合法性检查

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}((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}((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 % 11 #求余

JYM = "10X98765432"M= JYM[Y]#判断校验位

if(M == idcard_list[17]):#检测ID的校验位

printErrors[0]print ('生日:'+year+'年'+ month +'月'+day+'日')if int(idcard_sex)%2 ==0:print ('性别:女')else:print ('性别:男')else:print Errors[3]else:print Errors[2]else:print Errors[1]if __name__ == '__main__':

idcard= raw_input(u'请输入身份证号码:')

checkIdcard(idcard)

六、任务测试

步骤1、运行程序

编辑完成后,按【esc】退出编辑状态【:wq】保存并退出编辑框,执行【python idcard.py】运行Python文件。效果图如11所示

图11 运行程序

步骤2、验证程序

输入身份证号码,正确会提示正确的信息,相反错误会提示相关错误的信息。(为了隐私性,下图身份证后四位不展示)如图12所示。

图12 验证

python正则表达式 身份证_正则表达式实现身份证信息验证相关推荐

  1. python 正则表达式 前瞻_正则表达式 For Python

    Manarola 正则表达式有很多流派,也有很多的特性,不同的语言支持度也是不一样的.本篇文章是写Python中的正则表达式的用法的,介绍了一些可用特性,也指出了某些特性是不支持的. 本篇文章仅为学习 ...

  2. JAVA正则表达式乘号_正则表达式基本语法

    首先,让我们看看两个特别的字符:'^' 和 '$' 他们是分别用来匹配字符串的开始和结束,一下分别举例说明 "^The": 匹配以 "The"开头的字符串; & ...

  3. Python爬虫(八)_正则表达式

    什么是正则表达式 正则表达式,又称规则表达式,通常被用来检索.替换那些符合某个模式(规则)的文本. 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一 ...

  4. python 正则表达式判断_正则表达式教程python | Python如何判断正则表达式是否匹配成功...

    python 正则表达式 关于 和*的问题 正则表达式教程里在python的帮助里有.,仔细的看一次后找一个正则表达式验证工具.其中有一个就是python写的.多试几次. 正则表达式挺难掌握,掌握后又 ...

  5. python爬虫正则表达式实例-3.Python爬虫入门_正则表达式(简单例子)

    1 #2019-11-23 2 importrequests3 importtime4 import re #Python正则表达式库 5 6 if __name__=='__main__':7 #海 ...

  6. python正则表达式试题_正则表达式练习题2

    1.匹配一行文字中的所有开头的字母内容 #coding=utf-8 import re s="i love you not because of who you are,but becaus ...

  7. python 正则表达式 分组_正则表达式之分组的用法

    分组的概念 在一个正则表达式中, 通过英文()包裹的内容, 就对应着一个分组, 如下正则表达式, 就包含了两个分组 /a-z(\d+)a-z(\d+)/ 分组的排序 一般来说, 分组都是从1开始排序的 ...

  8. python re正则_正则表达式+Python re模块详解

    正则表达式(Regluar Expressions)又称规则表达式,在代码中常简写为REs,regexes或regexp(regex patterns).它本质上是一个小巧的.高度专用的编程语言. 通 ...

  9. python 正则表达式生成器_正则表达式生成器

    有生成正则表达式的工具吗? SQLSERVER2017 报表生成器里面怎么用正则表达式语一个字段 NAME 里面的值类似是这样 PB3*5平头螺丝,我想要筛选NAME字段sql server中对字段使 ...

  10. python逗号表达式_正则表达式 - 在第一个逗号前获取所有内容。 - python

    我有我的输入数据utf8编码,并应用它的一些正则表达式来查找逗号,但在下面的字符串,虽然我可以看到逗号可视化,正则表达式返回None,这是什么错误,我测试'''在MyString中,它的工作正常.这是 ...

最新文章

  1. SLAM综述(4)激光与视觉融合SLAM
  2. F5第一个10000台
  3. 书单 | 计算机视觉的修炼秘笈
  4. 麻省理工牛人解说数学体系
  5. Java并发编程系列之Semaphore详解
  6. 实时音视频助力在线教育风口
  7. 支持断线重连、永久watcher、递归操作 ZooKeeper 客户端
  8. 2018年第九届蓝桥杯—C/C++程序设计省赛解题
  9. 印度打车软件Ola将登陆伦敦,或将取代被吊销伦敦执照的Uber
  10. 百度网盘挺住!给非会员限速只是为了活下去
  11. php处理post序列化,使用jQuery POST和php序列化和提交表单
  12. 求ucinet软件下载资源!!!!
  13. beanutils初步
  14. OA系统四级模块编写测试用例(角色模块)
  15. SUCTF2019 EasyWeb
  16. Android深色模式适配
  17. Centos下docker相关文件迁移发生的问题记录
  18. Codeforces 831 A Unimodal Array
  19. 赞美是朵花,赠人玫瑰,手有余香
  20. 用友杨雨春 融合是企业互联网化的下一个主旋律

热门文章

  1. 2017中国商业智能行业研究报告
  2. 关于 linux c 清屏命令
  3. 超级详细:GOG游戏平台白嫖Steam巫师3游戏教程
  4. 计算机软考网络工程师历年真题,2019上半年软考网络工程师考试下午真题
  5. python网上在线编程_在线python编程
  6. Flutter入门学习--(18)添加本地资源图片
  7. 无刷直流电机反电动势过零检测_TI电机库源码
  8. ST电机库 MCSDK-FUL_5.4.4 下载
  9. VisualStudio开发工具中的C#主流控件属性及事件汇总(菜鸟必备)
  10. 永久更改R包的安装目录 #R语言