【C#】 個資法之個資遮罩

.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;
   });

這一段裡面個人覺得蠻好玩的,呵呵。

 

希望大家有用到。

 

給自己更多的時間去努力找尋答案。