隱藏手機號、郵箱等敏感信息 Intro 做項目的時候,頁面上有一些敏感信息,需要用“*”隱藏一些比較重要的信息,於是打算寫一個通用的方法。 Let's do it ! Method 1:指定左右字元數量 Method 1.1 中間的*的個數和實際長度有關 Method 1.2 : 中間的*的個數固定 ...
隱藏手機號、郵箱等敏感信息
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 }
測試結果如下: