做項目的時候,頁面上有一些敏感信息,需要用“*”隱藏一些比較重要的信息,於是打算寫一個通用的方法。
Let's do it !
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 }
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 }
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 /// <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 }
測試結果如下:

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 }
測試結果如下:
