首页 > 代码库 > 隐藏手机号、邮箱等敏感信息

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

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

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         else30         {31             if (basedOnLeft)32             {33                 if (info.Length > left && left > 0)34                 {35                     sbText.Append(info.Substring(0, left) + "****");36                 }37                 else38                 {39                     sbText.Append(info.Substring(0, 1) + "****");40                 }41             }42             else43             {44                 if (info.Length > right && right > 0)45                 {46                     sbText.Append("****" + info.Substring(info.Length - right));47                 }48                 else49                 {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         else26         {27             if (basedOnLeft)28             {29                 if (info.Length > left && left >0)30                 {31                     sbText.Append(info.Substring(0, left) + "****");32                 }33                 else34                 {35                     sbText.Append(info.Substring(0, 1) + "****");36                 }37             }38             else39             {40                 if (info.Length > right && right>0)41                 {42                     sbText.Append("****" + info.Substring(info.Length - right));43                 }44                 else45                 {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         else26         {27             if (basedOnLeft)28             {29                 string prefix = subLength > 0 ? info.Substring(0, subLength) : info.Substring(0, 1);30                 return prefix + "****";31             }32             else33             {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         else19         {20             return HideSensitiveInfo(email);21         }22     }

 

测试结果如下:

技术分享

 

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