PHP如何替换字符串中跟在“- ”后的身份证号前5位或后4位
身份证号脱敏实现方案
适配身份证号固定出现在- 之后的场景,用正则匹配实现,不受字符串前置内容格式影响,比substr()方案兼容性更强。
实现代码(PHP)
1. 替换身份证号前5位
function maskIdFront($inputStr) { return preg_replace_callback('/- (.+)/', function($match) { $idCard = $match[1]; $replaceLength = min(5, strlen($idCard)); return '- ' . str_repeat('*', $replaceLength) . substr($idCard, 5); }, $inputStr); } // 测试示例 $string1 = "** GALLARDO SERGIO - 74276932M"; $result1 = maskIdFront($string1); // 输出结果:** GALLARDO SERGIO - *****932M
2. 替换身份证号后4位
function maskIdBack($inputStr) { return preg_replace_callback('/- (.+)/', function($match) { $idCard = $match[1]; $idLength = strlen($idCard); $replaceLength = min(4, $idLength); return '- ' . substr($idCard, 0, $idLength - $replaceLength) . str_repeat('*', $replaceLength); }, $inputStr); } // 测试示例 $string2 = "** MONTOLIA ANTONIO - 74736619E"; $result2 = maskIdBack($string2); // 输出结果:** MONTOLIA ANTONIO - 74736****
优化建议
如果你的身份证号有明确的格式规则(比如仅包含数字和大写字母,长度固定8-10位),可以把正则中的.+替换为[A-Z0-9]{8,10},进一步降低误匹配概率,适配更复杂的字符串场景。
内容的提问来源于stack exchange,提问作者Jesus91
相关产品推荐
相关产品推荐

