def mask_id(v):
return v[:3] + '*' * 11 + v[-4:]
rows = [dict(r, id_card=mask_id(r['id_card'])) for r in rows]
运营从后台导出用户明细,Excel 里身份证号 18 位完整,页面列表上明明显示的是 110***********1234。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,脱敏做在展示层,导出走另一个查询,直接 select 原始字段写进文件。两条链路没有共用一套字段处理逻辑。
「导出文件脱敏」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
改完顺手把文档补一句,省得下次自己重新推一遍。
处理上按这个顺序:导出复用同一套脱敏函数;导出前按用途申请 只给必要字段;文件加水印和下载人标识;导出行为留痕 便于事后追溯。
改完只确认一件事:同一批数据页面和导出文件的掩码结果一致。
