python正则抓取身份证号码

ID_c=r'(?<!\d)(?:(?:([1-9]\d{5}(?:18|19|(?:[23]\d))\d{2}(?:(?:0[1-9])|(?:10|11|12))(?:(?:[0-2][1-9])|10|20|30|31)\d{3}[0-9Xx])(?!\d))|([1-9]\d{5}\d{2}(?:(?:0[1-9])|(?:10|11|12))(?:(?:[0-2][1-9])|10|20|30|31)\d{3}))(?!\d)'
ID = re.findall(ID_c,text)
ID = list(map(lambda x:''.join(x) ,ID))

简要分析:
18位身份证号匹配:

(?:(?:([1-9]\d{5}(?:18|19|(?:[23]\d))\d{2}(?:(?:0[1-9])|(?:10|11|12))(?:(?:[0-2][1-9])|10|20|30|31)\d{3}[0-9Xx])(?!\d))

15位身份证号匹配:

([1-9]\d{5}\d{2}(?:(?:0[1-9])|(?:10|11|12))(?:(?:[0-2][1-9])|10|20|30|31)\d{3})

简单的排除一些错误的匹配:
1,身份证号前面的字符不为数字:

(?<!\d)

2,身份证号后面的字符不为数字:

(?!\d)

验证身份证号码是否正确

代码验证18位号码是否正确

# t代表身份证号码的位数,w表示每一位的加权因子
t = []
w = []
for i in range(0,18):t1 = i + 1t.append(t1)w1 = (2 ** (t1-1)) % 11w.append(w1)
#队列w要做一个反序
w = w[::-1]  #根据前17位的余数,计算第18位校验位的值
def for_check(n):# t = 0for i in range(0,12):if (n + i) % 11 == 1:t = i % 11if t == 10:t = 'X'return t#根据身份证的前17位,求和取余,返回余数
def for_mod(id):sum = 0for i in range(0,17):sum += int(id[i]) * int(w[i])# print(int(id[i]),int(w[i]),sum)sum = sum % 11# print(sum)return sum#验证18位身份证有效性
def check_true(id):# print(for_check(for_mod(id[:-1])))if id[-1] == 'X':if for_check(for_mod(id[:-1])) == 'X':return Trueelse:return Falseelse:if for_check(for_mod(id[:-1])) == int(id[-1]):return Trueelse:return False

提取18位身份证号码并验证:

id_15=[]
id_18=[]
for i in ID:if len(i)==18:id_18.append(i)continueif len(i)==15:id_15.append(i)continueelse:#打印长度非18和15位的身份证号码print(i)
# id_=data['身份证号码']
for i in id_18:if check_true(str(i))==False:# 打印验证错误的身份证号print(i)

验证工具

以上代码只是验证了规则的正确性,但是对于地址位是否是有实际意义没有验证
Python大陆居民身份证、港澳台居民居住证验证工具 :https://github.com/jxlwqq/id-validator.py

jupyter 嵌入网页验证工具

只是为了方便验证一下

from IPython.display import IFrame
IFrame('http://welefen.com/lab/id/index.php', width=800, height=300)

python正则抓取身份证号码,验证18位身份证号码是否正确相关推荐

  1. java中验证18位身份证的正则表达式

    import java.util.regex.Matcher; import java.util.regex.Pattern; /** *只可以验证输入的身份证是否为18位,不可以验证身份证的正确性 ...

  2. .Net验证18位身份证格式

    /// <summary>/// 验证18位号码/// </summary>/// <param name="Id"></param> ...

  3. 比较严谨的java验证18位身份证号码

    /** * 我国公民的身份证号码特点如下* 1.长度18位* 2.第1-17号只能为数字* 3.第18位只能是数字或者x* 4.第7-14位表示特有人的年月日信息* 请实现身份证号码合法性判断的函数, ...

  4. 15位身份证号和18位身份证号截取生日

    CASE WHEN T1.IDTYPE=01 AND LENGTH(TRIM(T1.IDNO))=15 THEN '19'||SUBSTR(T1.IDNO,7,6)WHEN T1.IDTYPE=01 ...

  5. 18位身份证号码规则及js验证

    2019独角兽企业重金招聘Python工程师标准>>> 一.中国居民身份证号码规则 18位身份证号码编码规则:根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份 ...

  6. python爬取新闻网站内容findall函数_Python正则抓取新闻标题和链接的方法示例

    本文实例讲述了Python正则抓取新闻标题和链接的方法.分享给大家供大家参考,具体如下: #-*-coding:utf-8-*- import re from urllib import urlret ...

  7. 15位或18位身份证验证

    c#实现的18位身份证格式验证算法 18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999<公民身份号码>中做了明确的规定. GB11643-1999< ...

  8. 学习正则表达式 - 18位身份证号

    一.身份证号规则 18位身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码.其含义如下: 地址码:表示编码 ...

  9. mysql根据严格校验15位和18位身份证号是否有效的自定义函数

    验证18位身份证有效性的规则: 1.长度: 2.区划编码: 3.出生日期: 4.最后一位验证: 第一步:对身份证做去空处理: 第二步:对15位身份证号进行验证: 第三步:对18位身份证进行验证: 最后 ...

  10. python正则表达式 身份证_15/18位身份证号码验证的正则表达式总结(详细版)

    前言 开发过程中,常常需要对一些输入信息进行有效性验证,使用正则表达式进行校验是最简单.效率最高的方式了,下面就来看看15/18位身份证号码验证的正则表达式吧. 介绍 xxxxxx yyyy MM d ...

最新文章

  1. GeneratorSqlMapCustom(mybatis逆向工程)
  2. 武装机器狗不会自主杀人,监管自主杀伤性武器是政府的事,机器狗公司CEO这样说...
  3. 牛逼!不得不服,第一次有人把Java 反射机制讲解这么透!
  4. 建筑电气工程设计常用图形和文字符号_怎么看懂建筑电气工程图?用最直白方式,教你基础识图!超级详细...
  5. Linux中批量创建空白文件,在Linux中批量创建和修改文件或目录
  6. 宣称“禁用新疆产品”,英特尔紧急道歉:出于表述合规合法初衷
  7. 两万字深入解密 Go 语言接口的那些事儿 | 技术头条
  8. 史玉柱:我是怎么做游戏策划的
  9. [Swift]LeetCode188. 买卖股票的最佳时机 IV | Best Time to Buy and Sell Stock IV
  10. 【渝粤教育】国家开放大学2018年春季 8038-21T实用管理基础 参考试题
  11. 一位中科院计算机女生的读博日记
  12. neo4j ,neo4j-desktop国内下载镜像
  13. python plt 内存_python-创建matplotlib图形后如何释放内存
  14. JS获取当日起止时间时间戳
  15. 【转】FILE *fp fopen 参数
  16. php仿制网站,网站仿制合法吗,仿制别人网站注意事项
  17. 关于——Git命令大全
  18. 跟鸿蒙林雷组件轮回者势力,遮天的势力分划
  19. 一文读懂Docker、K8s
  20. 萌新如何用Python实现人脸替换升级看高级程序员一步一步带你进阶

热门文章

  1. Stata数据处理: 面板数据填充和补漏
  2. 罗振宇2021“时间的朋友·长大以后”跨年演讲全文无删减整理,核心观点、大纲提炼
  3. paoding 中文分词学习
  4. Transition组件
  5. 手机开热点但是电脑一直连接不上_iPhone手机热点明明打开了,可是电脑就是连不上怎么办?...
  6. petalinux 前端包管理器(dnf)
  7. mac tortoisesvn客户端_TortoiseSVN
  8. Unity3D的3D音效的实现
  9. [转帖]谨防(练拳时)膝关节损伤十一要
  10. 【C语言】怎么用C语言来解逻辑推理题 | 运用离散数学+形式逻辑学的思想