.net 個資法之個資遮罩
好一陣子沒寫文章了,最近換了新工作,還在努力融入中。
說很適應根本是騙人的....
新工作差不多兩個月了,居然開始在想這份工作真的是我想要的嗎?
至少換心工作,離開舒適圈這個舉動讓我繼續前進中。
今天議題:針對個資的欄位要做遮罩。
例如:
姓名:楊天才 => 楊O才
手機:0912123123 => 0912OOOOO2
Email:a90df@gmail.dfdsf => aOOOf@OmaiO.dfdsf
諸如此類,比較特別Email部分要求Domain第一碼及最後一碼以Prefix顯示。
自然而然寫了了Function來處理。直接見程式碼吧!!
using System.Diagnostics;
using System.Windows.Forms;
using System.Linq;
using System.Text.RegularExpressions;
class Script
{
[STAThread]
static public void Main(string[] args)
{
Console.WriteLine(GetPersonalMask("a90df@yahoo.fdsdfk", "*"));
Console.WriteLine(GetPersonalMask("楊天才", "*"));
Console.WriteLine(GetPersonalMask("0912123123", "*"));
Console.WriteLine(GetPersonalMask("F126123123", "*"));
}
static private string GetPersonalMask(string OriStr, string oPrefix, bool IsDis)
{
string oStr = "";
OriStr = OriStr.Trim();
char[] oStrArry = OriStr.ToCharArray();
int[] oArray = new int[] { 0, OriStr.Trim().Length - 1 };
if (Regex.IsMatch(OriStr.Trim(), @"^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$"))
{
oStr += GetPersonalMask(OriStr.Split('@')[0], oPrefix) + "@";
for (int i = 0; i < OriStr.Split('@')[1].Split('.').Length; i++)
{
string oStrL = OriStr.Split('@')[1].Split('.')[i].ToString();
if (i == 0)
oStr += GetPersonalMask(oStrL, oPrefix, false);
else
oStr += "." + GetPersonalMask(oStrL, oPrefix, false);
}
return oStr;
}
else if (Regex.IsMatch(OriStr.Trim(), "^(09([0-9]){8})$"))
{
oArray = new int[] { 0, 1, 2, 7, 8, 9 };
}
else if (Regex.IsMatch(OriStr.Trim(), "^[a-zA-Z][0-9]{9}$")) {
oArray = new int[] { 0, 1, 2, 3, 9 };
}
for (int i = 0; i < oStrArry.Length; i++)
{
if (IsDis)
oStr += oArray.Contains(i) ? oStrArry[i].ToString() : oPrefix;
else
oStr += oArray.Contains(i) ? oPrefix : oStrArry[i].ToString();
}
return oStr;
}
static public string GetPersonalMask(string OriStr, string oPrefix)
{
return GetPersonalMask(OriStr, oPrefix, true);
}
}
說真實的,我以前不太會寫遞回的程式碼,但這次,居然無意間寫出來了。
講講我的概念吧!!畢竟哪些位置要做遮蔽大部分都是固定的所以就寫在Function內。
我的預期是我只要設定我哪幾個位置要顯示明碼,其餘都改為遮罩就好。
所以,預設沒有特別格式的就是留頭跟尾(Line 22)
判定為手機格式:Line 40
判定為身份證字號:Line 43
判定為Email格式:Line 26-36
Email比較特別@前面用遞回跑一般格式,
@後面改為,頭跟尾是遮罩其餘明碼。
還有特定的格式都可以在擴充這個Function,只要宣告陣列說字串的那個位置要顯示就好。
大家想要跑看看,可以用Notepad++ 搭配CS-Script Plugin
額外推薦這個外掛,因我本來就習慣NotePad++,自從發現這套神外掛我叫不用C# MiniLab了。
這外掛還支援智慧輸入,大優阿!!
最近Jquery持續成長中,所以,順便練習了一下Jquery版本。
想看的可以點http://jsfiddle.net/g8SJ6/ 這邊觀看唷!!
主要我覺得比較關鍵的點在:
if(jQuery.inArray(index , arrMatch) >= 0)
OutPut+= value;
else
OutPut+= oPrefix;
});
這一段裡面個人覺得蠻好玩的,呵呵。
希望大家有用到。
給自己更多的時間去努力找尋答案。