C#实现手机号11位中间四位掩码脱敏处理方案

沈知远
沈知远
发布时间:2026-10-13 | 4人浏览过
原创

在涉及用户隐私的数据展示场景中,对手机号进行脱敏处理是标准做法。本文将详述如何在C#中高效实现将11位手机号的中间四位数字隐藏为“****”,并提供基于正则表达式和字符串操作的两种具体代码实现。

需求背景与实现目标

在网页或应用界面展示用户信息时,为了保护用户隐私,通常需要将手机号码的第4至第7位数字隐藏。例如,原始号码 13812345678 应显示为 138****5678。这种处理不仅符合数据安全规范,也是常见的交互设计模式。

准备条件

  • 开发环境:Visual Studio 或其他支持C#的环境
  • 依赖库:系统内置 System.Text.RegularExpressions 命名空间即可满足基本需求
  • 输入数据:格式正确的11位中国内地手机号码字符串

操作顺序:实现手机号脱敏

第1步:使用正则表达式进行替换(推荐)

目的:利用正则模式的灵活性与简洁性,一次性完成分组捕获与替换,代码可读性强且不易出错。

核心逻辑:构建一个匹配11位数字的正则规则,将前3位、中间4位和后4位分为三个组。替换时,保留第一组和第三组,将第二组替换为 ****。

using System;
using System.Text.RegularExpressions;

public class PhoneMaskUtil
{
    /// <summary>
    /// 使用正则表达式将手机号中间四位替换为*
    /// </summary>
    /// <param name="phoneNo">原始手机号码</param>
    /// <returns>脱敏后的手机号码</returns>
    public static string MaskPhoneWithRegex(string phoneNo)
    {
        if (string.IsNullOrEmpty(phoneNo))
            return phoneNo;

        // 定义正则:(前3位)(中4位)(后4位)
        Regex re = new Regex(@"(\d{3})(\d{4})(\d{4})", RegexOptions.None);
        
        // 执行替换:$1代表第一组,$3代表第三组,中间插入****
        return re.Replace(phoneNo, "$1****$3");
    }
}

重要参数说明:

  • 模式 (\d{3})(\d{4})(\d{4}):严格限制输入为11位数字。若输入非11位或不纯数字,该特定模式可能不匹配,需根据实际业务增加异常处理或校验逻辑。
  • 替换串 $1****$3:$1和$3分别引用前3位和后4位。

第2步:使用Substring和Replace组合(备选)

目的:在不引入正则表达式引擎的场景下,通过基础字符串操作实现相同效果。适用于对性能有极端要求或禁用正则的场景。

核心逻辑:截取中间4位字符,生成等长的星号字符串,然后调用替换方法。

/// <summary>
/// 通过截断与替换隐藏中间四位
/// </summary>
public static string MaskPhoneWithStringOp(string phoneNo)
{
    if (string.IsNullOrEmpty(phoneNo) || phoneNo.Length != 11)
        return phoneNo;

    // 从索引3开始截取4个字符(即第4到第7位)
    string subStr = phoneNo.Substring(3, 4);
    
    // 将截取的数字替换为四个星号
    return phoneNo.Replace(subStr, "****");
}

注意风险:此方法依赖于 Replace 的全局替换特性。如果原始手机号本身包含“****”以外的重复子串,且该子串恰好等于中间四位,可能会产生误替换。此外,Replace 默认区分大小写并逐个查找,若中间四位数字在前后部分也有重叠(虽极少见),需注意其行为。相比之下,正则方法的锚定更精准。

完成判断

编写完成后,可通过单元测试验证正确性。输入 "13912345678",预期输出应为 "139****5678"。检查不同边界情况,如10位或12位号码是否返回原值或抛出异常(取决于实现的健壮性),确保在生产环境中能稳定运行。

简要总结

C#中实现手机号脱敏主要依靠字符串操作。正则表达式方法因其明确的分组语义成为首选,而Substring结合Replace则提供了无需额外对象创建的轻量级替代方案。在实际开发中,建议优先选择正则表达式方案以保证代码的清晰度和安全性。

以上就是C#实现手机号11位中间四位掩码脱敏处理的详细内容,更多关于C#数据处理与隐私保护的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表