news 2026/7/15 9:10:46

影刀RPA 常见数据格式校验:身份证、手机号、邮箱、URL的验证套路

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
影刀RPA 常见数据格式校验:身份证、手机号、邮箱、URL的验证套路

影刀RPA 常见数据格式校验:身份证、手机号、邮箱、URL的验证套路

数据采集完了不等于数据就是对的。用户填的表单数据、网页上采集的信息、API返回的字段——这些数据里混着大量格式错误的内容。如果不校验就写入数据库或发给下游系统,后果可能是整批数据被拒收。

这篇文章给出四种最常见的数据格式校验方案,附带正则表达式模板,拿来就能用。


校验的目的分层

不是所有校验都要做到100%准确。先想清楚你的场景:

第一层:格式校验。手机号是不是11位数字、邮箱里有没有@符号。这一层只管"长得像不像",不管"是不是真的"。适合数据清洗的第一步——先把明显不对的过滤掉。

第二层:业务逻辑校验。日期不能是未来的、金额不能是负数、订单号必须符合公司编码规则。这一层是在格式正确的基础上,检查数据是否合理。

第三层:真实性校验。手机号能不能打通、邮箱是否存在、身份证号码的校验位对不对。这一层需要外部系统配合,最高成本也最高。

拼多多店群自动化上架方案

大部分RPA场景做到第一层+第二层就够了。第三层除非业务强需求,否则投入产出比不高。


手机号校验

importredefvalidate_phone(phone):"""校验中国大陆手机号格式"""ifnotphone:returnFalse,'手机号为空'phone=str(phone).strip()# 去掉可能存在的+86前缀ifphone.startswith('+86'):phone=phone[3:]# 1开头,第二位3-9,总共11位pattern=r'^1[3-9]\d{9}$'ifre.match(pattern,phone):returnTrue,phoneelse:returnFalse,f'手机号格式不正确:{phone}'

注意:号段在不断更新(比如广电的192号段),上面这个正则用[3-9]覆盖了目前所有号段。


身份证号校验

身份证校验分两步:格式校验 + 校验位计算。

importrefromdatetimeimportdatetimedefvalidate_id_card(id_number):"""校验中国大陆18位身份证号"""ifnotid_number:returnFalse,'身份证号为空'id_str=str(id_number).strip().upper()# 1. 格式:17位数字 + 1位数字或Xifnotre.match(r'^\d{17}[\dX]$',id_str):returnFalse,'格式不正确(需18位)'# 2. 出生日期校验try:birth=datetime.strptime(id_str[6:14],'%Y%m%d')ifbirth.year<1900orbirth>datetime.now():returnFalse,'出生日期不合理'except:returnFalse,'出生日期无效'# 3. 校验位计算weights=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]check_chars='10X98765432'total=sum(int(id_str[i])*weights[i]foriinrange(17))expected_check=check_chars[total%11]ifid_str[-1]!=expected_check:returnFalse,f'校验位不正确(期望{expected_check})'# 4. 提取信息info={'地区码':id_str[:6],'出生日期':birth.strftime('%Y-%m-%d'),'性别':'男'ifint(id_str[16])%2==1else'女',}returnTrue,info

第17位(索引16)奇数为男性,偶数为女性。


邮箱校验

importredefvalidate_email(email):"""校验邮箱格式"""ifnotemail:returnFalse,'邮箱为空'email=str(email).strip()# 基本格式校验pattern=r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'ifnotre.match(pattern,email):returnFalse,'邮箱格式不正确'# 额外检查if'..'inemail:returnFalse,'邮箱包含连续的点'ifemail.count('@')!=1:returnFalse,'邮箱@符号数量不正确'returnTrue,email

注意:这个正则覆盖了99%的合法邮箱格式。但RFC 5322定义的合法邮箱格式远比这个复杂(比如可以用引号包裹、支持特殊字符)。对于RPA场景,上述正则够用了——你采集回来的数据里很少出现那种极端格式的邮箱。


URL校验

importrefromurllib.parseimporturlparsedefvalidate_url(url):"""校验URL格式"""ifnoturl:returnFalse,'URL为空'url=str(url).strip()# 补全协议(如果没有的话)ifnoturl.startswith(('http://','https://')):url='https://'+url[video(video-hqtqq1SJ-1784060314069)(type-csdn)(url-https://live.csdn.net/v/embed/524993)(image-https://v-blog.csdnimg.cn/asset/a547123d88ad712dccba346c9217e237/cover/Cover0.jpg)(title-TEMU店群如何管理运营?)]try:result=urlparse(url)# 必须有scheme和netlocifall([result.scheme,result.netloc]):# netloc必须有至少一个点(域名)if'.'inresult.netloc:returnTrue,urlreturnFalse,'URL格式不完整'except:returnFalse,'URL解析失败'

把校验串成数据清洗流程

# === 完整的数据记录校验 ===defvalidate_record(record,rules):""" record: 字典 {'phone': '13800138000', 'email': 'test@example.com', ...} rules: 字典 {'phone': validate_phone, 'email': validate_email, ...} 返回: (is_valid, errors) """errors=[]forfield,validatorinrules.items():value=record.get(field)valid,result=validator(value)ifnotvalid:errors.append({'field':field,'value':value,'error':result})returnlen(errors)==0,errors# 使用示例rules={'phone':validate_phone,'email':validate_email,'id_card':validate_id_card,}data=[{'phone':'13800138000','email':'zhang@example.com','id_card':'110101199001011234'},{'phone':'12345','email':'bad-email','id_card':'123456789012345678'},]valid_records=[]invalid_records=[]forrecordindata:is_valid,errors=validate_record(record,rules)ifis_valid:valid_records.append(record)else:record['_errors']=errors invalid_records.append(record)print(f'有效数据:{len(valid_records)}条')print(f'无效数据:{len(invalid_records)}条')forrininvalid_records:print(f' 原始数据:{r}')foreinr['_errors']:print(f'{e["field"]}:{e["error"]}')

在影刀流程中集成

采集流程中的校验步骤: 1. 【读取Excel】→ 读取采集到的数据 2. Python节点 → 对每条数据执行validate_record 3. 校验结果: - valid_records → 【写入Excel】→ 有效数据文件 - ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d0cebab2108b4daeb08d71500d693cb0.png#pic_center) - invalid_records → 【写入Excel】→ 无效数据文件(附错误原因) 4. 【IF】无效数据数量 > 0: 【日志输出】→ f"本次采集有 {invalid_count} 条数据格式异常" 【发送邮件】→ 通知相关负责人人工复核

把无效数据单独保存一份带错误原因的Excel,方便回溯和修复。


总结:数据校验是采集后写入前的防线。格式校验用正则,业务逻辑校验加规则,真实性校验按需上。校验不过的数据不要直接丢弃,单独存一份带错误原因的日志,方便后续排查。


作者:林焱

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/15 9:09:19

wastebin未来路线图:即将推出的功能与社区发展计划

wastebin未来路线图&#xff1a;即将推出的功能与社区发展计划 【免费下载链接】wastebin wastebin is a pastebin &#x1f4dd; 项目地址: https://gitcode.com/gh_mirrors/wa/wastebin wastebin 是一个基于Rust开发的轻量级代码片段分享工具&#xff0c;专注于提供简…

作者头像 李华
网站建设 2026/7/15 9:06:28

Kontigo招聘安全主管,薪资12万 - 22万美元,还提供签证赞助!

1. Y Combinator导航信息这里展示了Y Combinator的相关导航&#xff0c;有关于它的介绍、在Y Combinator会发生什么、申请入口、YC面试指南、常见问题解答、人员信息、YC博客等内容。同时还有公司相关信息&#xff0c;像初创公司目录、创始人目录、启动YC等&#xff0c;以及图书…

作者头像 李华
网站建设 2026/7/15 9:01:45

深入解析FPD-Link III SerDes:线速率计算、错误检测与多摄像头同步实战

1. 项目概述与核心价值 在汽车摄像头、工业视觉和安防监控这些领域&#xff0c;工程师们经常面临一个共同的挑战&#xff1a;如何把高清摄像头传感器产生的海量并行数据&#xff0c;稳定、可靠地传输到几米甚至十几米外的中央处理单元。传统的并行传输方案需要几十根线缆&#…

作者头像 李华
网站建设 2026/7/15 9:01:34

PSTAlertController实战:构建现代化iOS弹窗系统的10个最佳实践

PSTAlertController实战&#xff1a;构建现代化iOS弹窗系统的10个最佳实践 【免费下载链接】PSTAlertController API similar to UIAlertController, backwards compatible to iOS 7. Will use the new shiny API when you run iOS 8. 项目地址: https://gitcode.com/gh_mirr…

作者头像 李华
网站建设 2026/7/15 9:00:45

DM505处理器DCAN、MCAN与RGMII接口时序解析与硬件设计实战

1. 项目概述与核心价值在工业机器视觉、边缘计算和高端工业控制设备的设计中&#xff0c;通信接口的稳定性和可靠性是决定系统成败的关键。无论是连接各类传感器、执行器的控制器局域网&#xff08;CAN&#xff09;&#xff0c;还是负责高速数据回传的千兆以太网&#xff0c;其…

作者头像 李华