当前位置: 首页> 最新文章列表> 如何用 mb_eregi_replace 实现一键脱敏处理身份证号、手机号等敏感信息?

如何用 mb_eregi_replace 实现一键脱敏处理身份证号、手机号等敏感信息?

M66 2025-06-29

在实际开发过程中,处理用户的敏感信息(如身份证号、手机号等)是非常重要的隐私保护环节。我们希望在展示这些信息时,能将部分敏感内容进行脱敏处理,避免泄露用户隐私。本文将介绍如何使用 PHP 中的 mb_eregi_replace 函数来实现一键脱敏处理。


什么是 mb_eregi_replace

mb_eregi_replace 是 PHP 的一个多字节字符串函数,用于在字符串中进行不区分大小写的正则表达式替换。它支持 UTF-8 等多字节编码,非常适合处理中文等多字节字符的场景。


脱敏的基本思路

以手机号和身份证号为例,脱敏的常用方法是:

  • 手机号:隐藏中间四位,例如 13812345678 脱敏为 138****5678

  • 身份证号:隐藏中间 10 位,例如 110105199001011234 脱敏为 1101**********1234


示例代码

下面是用 mb_eregi_replace 实现脱敏的 PHP 代码示例:

<?php
// 脱敏手机号
function mask_mobile($mobile) {
    // 匹配手机号格式,替换中间4位为****
    return mb_eregi_replace('(\d{3})\d{4}(\d{4})', '$1****$2', $mobile);
}

// 脱敏身份证号
function mask_idcard($idcard) {
    // 匹配身份证号,替换中间10位为**********
    return mb_eregi_replace('(\d{4})\d{10}(\d{4})', '$1**********$2', $idcard);
}

// 测试
$mobile = '13812345678';
$idcard = '110105199001011234';

echo "原手机号:$mobile\n";
echo "脱敏手机号:" . mask_mobile($mobile) . "\n";

echo "原身份证号:$idcard\n";
echo "脱敏身份证号:" . mask_idcard($idcard) . "\n";
?>

说明

  • 正则表达式中的 (\d{3})(\d{4}) 表示捕获前后的数字分组。

  • 替换部分用 $1$2 来引用捕获组,从而保留首尾数字,中间替换成 *

  • mb_eregi_replace 不区分大小写,且支持多字节字符,适合处理多种编码的文本。


进一步优化

根据业务需求,也可以对邮箱、银行卡号等其他敏感信息进行类似处理,只需调整正则表达式即可。


参考示例链接

更多 PHP 字符串处理技巧,可以访问以下资源:

$url = 'https://m66.net/php-string-functions.html';
echo "详细教程请访问:$url";