支付日志里出现 6222 0202 0000 1234 这种带空格的卡号,脱敏规则只匹配连续 16 位数字,扫描工具报了 900 多条。日志里能对上时间点,这种反而好排。

正则写的是 16 位连续数字,中间有空格就断开。日志里卡的格式来自前端展示串,扫码和粘贴两种来源格式还不一样。这一点先确认清楚,后面就不用反复试。

String s = raw.replaceAll("[\\s-]", "");
s = s.replaceAll("(\\d{6})\\d{8}(\\d{4})", "$1********$2");

「卡号脱敏漏匹配」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。

处理上按这个顺序:正则先去掉空格和连字符 再匹配连续数字;匹配后按原分隔符位置回填掩码;把卡号、手机号、身份证拆成三条独立规则;用脱敏后的样本回归 确认原文不落盘。

结果对不对很好判断,带空格和不带空格的卡号都变成掩码 扫描结果清零。

作者 9823189