• 隐藏手机号、邮箱等敏感信息


    隐藏手机号、邮箱等敏感信息

    Intro

    做项目的时候,页面上有一些敏感信息,需要用“*”隐藏一些比较重要的信息,于是打算写一个通用的方法。

    Let's do it !

    Method 1:指定左右字符数量

    Method 1.1 中间的*的个数和实际长度有关

     1     /// <summary>
     2     /// 隐藏敏感信息
     3     /// </summary>
     4     /// <param name="info">信息实体</param>
     5     /// <param name="left">左边保留的字符数</param>
     6     /// <param name="right">右边保留的字符数</param>
     7     /// <param name="basedOnLeft">当长度异常时,是否显示左边 
     8     /// <code>true</code>显示左边,<code>false</code>显示右边
     9     /// </param>
    10     /// <returns></returns>
    11     public static string HideSensitiveInfo(string info, int left, int right, bool basedOnLeft=true)
    12     {
    13         if (String.IsNullOrEmpty(info))
    14         {
    15             return "";
    16         }
    17         StringBuilder sbText = new StringBuilder();
    18         int hiddenCharCount = info.Length - left - right;
    19         if (hiddenCharCount > 0)
    20         {
    21             string prefix = info.Substring(0, left), suffix = info.Substring(info.Length - right);
    22             sbText.Append(prefix);
    23             for (int i = 0; i < hiddenCharCount; i++)
    24             {
    25                 sbText.Append("*");
    26             }
    27             sbText.Append(suffix);
    28         }
    29         else
    30         {
    31             if (basedOnLeft)
    32             {
    33                 if (info.Length > left && left > 0)
    34                 {
    35                     sbText.Append(info.Substring(0, left) + "****");
    36                 }
    37                 else
    38                 {
    39                     sbText.Append(info.Substring(0, 1) + "****");
    40                 }
    41             }
    42             else
    43             {
    44                 if (info.Length > right && right > 0)
    45                 {
    46                     sbText.Append("****" + info.Substring(info.Length - right));
    47                 }
    48                 else
    49                 {
    50                     sbText.Append("****" + info.Substring(info.Length - 1));
    51                 }
    52             }
    53         }
    54         return sbText.ToString();
    55     }
     

    Method 1.2 : 中间的*的个数固定

     1     /// <summary>
     2     /// 隐藏敏感信息
     3     /// </summary>
     4     /// <param name="info">信息实体</param>
     5     /// <param name="left">左边保留的字符数</param>
     6     /// <param name="right">右边保留的字符数</param>
     7     /// <param name="basedOnLeft">当长度异常时,是否显示左边 
     8     /// <code>true</code>显示左边,<code>false</code>显示右边
     9     /// <returns></returns>
    10     public static string HideSensitiveInfo1(string info, int left, int right, bool basedOnLeft = true)
    11     {
    12         if (String.IsNullOrEmpty(info))
    13         {
    14             return "";
    15         }
    16         StringBuilder sbText = new StringBuilder();
    17         int hiddenCharCount = info.Length - left - right;
    18         if (hiddenCharCount > 0)
    19         {
    20             string prefix = info.Substring(0, left), suffix = info.Substring(info.Length - right);
    21             sbText.Append(prefix);
    22             sbText.Append("****");
    23             sbText.Append(suffix);
    24         }
    25         else
    26         {
    27             if (basedOnLeft)
    28             {
    29                 if (info.Length > left && left >0)
    30                 {
    31                     sbText.Append(info.Substring(0, left) + "****");
    32                 }
    33                 else
    34                 {
    35                     sbText.Append(info.Substring(0, 1) + "****");
    36                 }
    37             }
    38             else
    39             {
    40                 if (info.Length > right && right>0)
    41                 {
    42                     sbText.Append("****" + info.Substring(info.Length - right));
    43                 }
    44                 else
    45                 {
    46                     sbText.Append("****" + info.Substring(info.Length - 1));
    47                 }
    48             }
    49         }
    50         return sbText.ToString();
    51     }

    Method 2 : “*”数量一定,设置为4个,按信息总长度的比例来取,默认左右各取1/3

     1     /// <summary>
     2     /// 隐藏敏感信息
     3     /// </summary>
     4     /// <param name="info">信息</param>
     5     /// <param name="sublen">信息总长与左子串(或右子串)的比例</param>
     6     /// <param name="basedOnLeft">当长度异常时,是否显示左边,默认true,默认显示左边
     7     /// <code>true</code>显示左边,<code>false</code>显示右边
     8     /// <returns></returns>
     9     public static string HideSensitiveInfo(string info,int sublen = 3,bool basedOnLeft = true)
    10     {
    11         if (String.IsNullOrEmpty(info))
    12         {
    13             return "";
    14         }
    15         if (sublen<=1)
    16         {
    17             sublen = 3;
    18         }
    19         int subLength = info.Length / sublen;
    20         if (subLength > 0 && info.Length > (subLength*2) )
    21         {
    22             string prefix = info.Substring(0, subLength), suffix = info.Substring(info.Length - subLength);
    23             return prefix + "****" + suffix;
    24         }
    25         else
    26         {
    27             if (basedOnLeft)
    28             {
    29                 string prefix = subLength > 0 ? info.Substring(0, subLength) : info.Substring(0, 1);
    30                 return prefix + "****";
    31             }
    32             else
    33             {
    34                 string suffix = subLength > 0 ? info.Substring(info.Length-subLength) : info.Substring(info.Length-1);
    35                 return "****"+suffix;
    36             }
    37         }
    38     }

    扩展

    手机号 1

     1     /// <summary>
     2     /// 隐藏手机号详情
     3     /// </summary>
     4     /// <param name="phone">手机号</param>
     5     /// <param name="left">左边保留字符数</param>
     6     /// <param name="right">右边保留字符数</param>
     7     /// <returns></returns>
     8     public static string HideTelDetails(string phone, int left = 3, int right = 4)
     9     {
    10         return HideSensitiveInfo(phone, left, right);
    11     }

    测试结果如下:

    手机号 2

     1     /// <summary>
     2     /// 隐藏手机号详情
     3     /// </summary>
     4     /// <param name="phone">手机号</param>
     5     /// <param name="left">左边保留字符数</param>
     6     /// <param name="right">右边保留字符数</param>
     7     /// <returns></returns>
     8     public static string HideTelDetails(string phone, int left = 3, int right = 4)
     9     {
    10         return HideSensitiveInfo1(phone, left, right);
    11     }

    测试结果如下:

    邮件地址

     1     /// <summary>
     2     /// 隐藏右键详情
     3     /// </summary>
     4     /// <param name="email">邮件地址</param>
     5     /// <param name="left">邮件头保留字符个数,默认值设置为3</param>
     6     /// <returns></returns>
     7     public static string HideEmailDetails(string email, int left = 3)
     8     {
     9         if (String.IsNullOrEmpty(email))
    10         {
    11             return "";
    12         }
    13         if (System.Text.RegularExpressions.Regex.IsMatch(email, @"w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*"))//如果是邮件地址
    14         {
    15             int suffixLen =email.Length - email.LastIndexOf('@');
    16             return HideSensitiveInfo(email, left, suffixLen,false);
    17         }
    18         else
    19         {
    20             return HideSensitiveInfo(email);
    21         }
    22     }

    测试结果如下:

  • 相关阅读:
    高德地图API1.4.15较1.4.12的marker属性取值发生变化
    Cesium加载地图提示RangeError:Invalid of array List
    layui分页功能使用——点页码再查询
    设置layui的自定义样式
    页面引入layui.js后提示layui未定义
    SQL语句出现sql关键字
    vs2017 vs2019配置sqlite3连接引擎(驱动)指南(二)vs2019续集
    vs2017 vs2019配置sqlite3连接引擎(驱动)指南(一)vs2019篇
    Qt C++ QDataStream和QBuffer
    Qt C++不规则窗口
  • 原文地址:https://www.cnblogs.com/weihanli/p/hideSensitiveInfoViaCSharp.html
Copyright © 2020-2023  润新知