python用正则表达式给身份证打码

对身份证号码中的日期用*代替

import pandas as pd
import re

fileName = '打码数据.xlsx'
df = pd.read_excel(fileName,dtype=object,keep_default_na=False)

p = re.compile(r'(.{6})(.*)(.{4})')
p1 = re.compile(r'^[1-8].*')
#对日期进行打码
def mask(code):
    if p1.search(code):
        y = lambda x:'{}{}{}'.format(x.group(1),'********' ,x.group(3))
        return p.sub( y ,code)
    else:
        return code

df['身份证号'] = df['身份证号'].apply(mask)

writer = pd.ExcelWriter('打码后数据.xlsx')
df.to_excel(writer,index=False)
writer.save()
writer.close()

打码前
在这里插入图片描述
打码后:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Python中的re模块来实现正则表达式匹配身份证号码。下面是一个示例代码: ```python import re # 身份证号码的正则表达式 pattern = r'^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|30|31)\d{3}[0-9Xx]$' # 要匹配的身份证号码 id_card = '340524199312121234' # 进行正则表达式匹配 if re.match(pattern, id_card): print('身份证号码合法') else: print('身份证号码不合法') ``` 其中,正则表达式pattern表示身份证号码的格式,对应的含义如下: - ^:匹配字符串的开始 - [1-9]:匹配第一位数字,不能为0 - \d{5}:匹配地区码,5个数字 - (19|20):匹配年份的前两位,必须是19或20 - \d{2}:匹配月份,2个数字 - (0[1-9]|1[0-2]):匹配日期,01-09或10-12 - (0[1-9]|[1-2]\d|30|31):匹配日期,01-09或10-29或30或31 - \d{3}:匹配顺序码,3个数字 - [0-9Xx]:匹配校验码,可以是数字或字母X(大小写均可) - $:匹配字符串的结束 如果要匹配多个身份证号码,可以使用re.findall()方法。例如: ```python import re # 身份证号码的正则表达式 pattern = r'\d{17}[\dXx]' # 要匹配的文本 text = '张三的身份证号码是340524199312121234,李四的身份证号码是320102198806151234' # 进行正则表达式匹配 id_cards = re.findall(pattern, text) # 输出匹配到的身份证号码列表 print(id_cards) ``` 以上代码输出: ``` ['340524199312121234', '320102198806151234'] ``` 注意,这里的正则表达式pattern与前面示例中的不同,它只匹配了17位数字加一位校验码的身份证号码。如果要匹配其他格式的身份证号码,需要根据实际情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值