[C#] 實作姓名遮罩 (MaskName)

  • 5898
  • 0
  • 2025-11-18

最近在寫一些東西,把之前寫的程式碼整理一下,之後方便自己之後複製貼上。

其中有一段是我覺得蠻實用的小工具:一個可以幫名字打馬賽克的 function。因為現在很多地方要顧慮到 個資法,不太能直接把全名顯示出來,所以這個方法可以幫助我們在顯示時,留下頭尾幾個字,中間用遮罩取代。


這裡面 一個字就不馬賽克了,兩個字就只馬後面的字,如果是三個字以上,就是馬中間的保留頭尾顯示


        /// <summary>
        /// 遮罩名字
        /// </summary>
        /// <param name="name">原始姓名</param>
        /// <param name="keepStart">保留開頭幾個字</param>
        /// <param name="keepEnd">保留結尾幾個字</param>
        /// <returns>遮罩後的姓名</returns>
        public static string MaskName(string name, int keepStart = 1, int keepEnd = 1)
        {
            if (string.IsNullOrEmpty(name)) return name;

            int length = name.Length;

            // 如果總長度 <= 要保留的字數,不做遮罩
            if (length <= keepStart + keepEnd) return name;

            // 中間需要遮罩的字數
            int maskCount = length - keepStart - keepEnd;
            string mask = new string('●', maskCount);

            // 拼接
            return name.Substring(0, keepStart) + mask + name.Substring(length - keepEnd, keepEnd);
        }
        
        
        //Result:
        //MaskName("許當麻");   // 結果:許●麻
        //MaskName("當麻");     // 結果:當●
        //MaskName("許當麻",2,0) // 結果: 許當●
        //MaskName("當麻", 0, 1) // 結果: ●麻
        
        

處理會員資料或報表輸出的時候,真的超常用到。整理下來,下次就不用重新想一次,直接複製貼上就能用了。

--

本文原文首發於我的個人部落格:實作姓名遮罩 (MaskName)

---

Yesterday I wrote down the code. I bet I could be your hero. I am a mighty little programmer.