当前位置: 首页 > news >正文

影刀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,方便回溯和修复。


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


作者:林焱

http://www.jsqmd.com/news/1192807/

相关文章:

  • AI视频情感分析与符号解读:从微表情到道具叙事的影视内容分析
  • 车载测试技术栈全解析:从CAN总线到HIL测试实战指南
  • TASO与TensorFlow/PyTorch集成指南:无缝提升现有模型推理速度
  • 卖黄金避坑指南,口碑回收老店推荐,实时金价结算无折旧提纯费 - 衡金阁
  • 历史影像数字修复与分析技术:从梵蒂冈档案到反重力现象验证
  • REEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE:编程社区中最具创意的多语言项目
  • FES2014潮汐模型:从数据下载到中国沿海精度验证的实践指南
  • C++与AutoHotkey深度集成:进程通信、DLL调用与脚本嵌入实战指南
  • 深入解析IWR1443毫米波雷达的JTAG调试与引导模式配置
  • AI TreasureBox开发者手册:如何贡献和维护这个AI资源聚合平台
  • DN-Splatter高级技巧:深度平滑损失与法线监督的优化配置指南
  • Java ThreadLocal 内存泄漏:原理、复现与正确姿势
  • 如何在openEuler集群部署sionlib?超详细步骤图解
  • 高中学习干预系统:知识图谱+学情诊断+自适应闭环
  • TradingView Webhooks Bot Docker部署完全指南:云端与本地部署最佳实践
  • 婺源卖金踩坑实录!5 家门店真实测评,全域上门回收认准清月知语 - 行行星
  • CANN/cannbot-skills CP4性能验收标准
  • DS90UB964-Q1行拼接模式配置实战:多路传感器数据融合与I2C控制详解
  • 【时序陷阱】DHT11单总线通信的微秒级时序调试与超时处理实战
  • NeatCSS深度解析:为什么这个极简框架值得你关注
  • 从零实现C++线程池:深入理解多线程编程核心原理与实践
  • wastebin扩展开发终极指南:如何快速添加新的语法高亮语言支持
  • CANN交付件模板索引
  • Spring Boot实战:基于JWT与拦截器构建无状态Token认证系统
  • 2026实测!广东佛山写真摄影避坑指南,透明无套路 - 热点速览
  • PentAGI:基于多模型AI智能体的自动化安全测试平台详解
  • 2026佛山断金旧饰回收|不挑品相全域覆盖,高价回收无套路 - 小蝶回收测评
  • ngx-ui部署与发布完全手册:从开发到生产的完整流程
  • 计算机网络【IP数据包分片与重组:标识、标志与片偏移实战解析】
  • 双指针算法详解:从快慢指针到滑动窗口的实战应用