隱藏手機號、郵箱等敏感信息

来源:http://www.cnblogs.com/ben121011/archive/2016/09/14/hideSensitiveInfoViaCSharp.html
-Advertisement-
Play Games

隱藏手機號、郵箱等敏感信息 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     }

 

測試結果如下:

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 查看svn 的用戶名,密碼: 找到用戶名,密碼文件,都是明文的,你可以看到 例:linux hjj@hjj-ubuntu:~/.subversion/auth/svn.simple$ ls 9aad7e9f713353a655cf4365926120c7 hjj@hjj-ubuntu:~/.s ...
  • 先上一張鳥哥LVM的圖.感覺這張最清楚了. 這裡到此就結束的.整合一下相關的一些步驟: ...
  • 前言 公司開發使用docker,每次登陸自己開發機總要輸入 ssh user_name@ip_string,然後再確認輸入password,手快了還經常會輸錯。作為一個懶人,肯定要找一個取巧的方式,查看了下ssh命令,由於它要進行一次跟伺服器的加密交互,所以沒有直接附帶密碼登陸的選項,只好作罷。 前 ...
  • 本文版權歸博客園和作者吳雙共同所有,歡迎轉載,轉載和爬蟲請註明博客園蝸牛原文地址 http://www.cnblogs.com/tdws/p/5874212.html。 最近打算分享一系列.NET Core實用後臺架構,所以首先介紹EF Core。目前國內各大論壇,各位大牛的分享,是按照Micros ...
  • 這幾天一直在研究TX Text Control的使用,由於這方面的資料相對比較少,主要靠下載版本的案例代碼進行研究,以及官方的一些博客案例進行學習,使用總結了一些心得,特將其總結出來,供大家分享學習。本篇隨筆主要介紹TX Text Control V20的相關使用心得。 ...
  • 表示層框架結構 /Views/Shared/_Root.Head.cshtml /Views/Shared/_Root.cshtml /Views/Shared/_ColumnsOne.cshtml /Views/_ViewStart.cshtml 最外層: /Views/Shared/_Root.... ...
  • 命名空間:Windows.Data.Json在Windows Runtime中,可以使用Json類對獲取的Json字元串進行操作,相比DataContractJsonSerializer類操作更加直觀。例如獲取一個繞口令API返回的Json中的對象: //返回的Json字元串: { "code":2 ...
  • 關於Net Core 多平臺程式的Framework問題: (本文只是推測,歡迎大家指正) 最近在研究NetCore的多平臺問題,起因是有一個Winform的項目,由於跨平臺的要求,想改為NetCore的MVC6項目,但是同時也想保留原來的Winform項目。 所以,一些DLL必須要做到即可以在Wi ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...