C#

用户关键信息隐藏

让代码变得清真

Posted by Trojan on June 19, 2019

用户关键信息隐藏

起因

事情的发生是这样的,在一个月黑风高的夜晚,突然有人跟我说我写的代码有点问题???
然后一看原来是用户信息没有隐藏。
例如:手机号码: 1320000000 应该返回 132****0000
邮箱:[email protected] 返回 ema*************.com

不清真的地方

然后我就在项目的一个角落里看到了其他人写的一个方法。。。

userResponse.Email = userInfo.Email.Substring(0, 3) + "***" + userInfo.Email.Substring(userInfo.Email.IndexOf("@"));

userResponse.Phone = userInfo.Phone.Substring(0, 3) + "***" + userInfo.Phone.Substring(userInfo.Phone.Length - 3);

哇!!!我一下就受不了了

然后:

优化修改

1.新建一个 StringHelper 静态类;
2.一个String的扩展方法;
3.使用正则表达式对其进行替换成 * 号;

namespace Demo.Common
{
    public static class StringHelper
    {
        /// <summary>
        /// 隐藏信息
        /// </summary>
        /// <param name="value"></param>
        /// <param name="startLen">开始长度</param>
        /// <param name="endLen">结尾长度</param>
        /// <param name="c">中间字符</param>
        /// <param name="count">指定长度</param>
        /// <returns></returns>
        public static string InfoHidden(this string value, int startLen = 3, int endLen = 4, char c = '*', int? count = null)
        {
            var length = value.Length - startLen - endLen;
            length = length < 0 ? 0 : length;
            var reStr = $@"(\S{"{"+startLen+"}"})(\S{"{"+length+"}"})(\S{"{"+endLen+"}"})";
            return Regex.Replace(value, reStr, $"$1{"".PadRight(count ?? length, c)}$3");
        }
    }
}

使用方法

using Demo.Common;
namespace ConsoleApp1
{

    class Program
    {
        static void Main(string[] args)
        {
            string phone = "13200000000";
            string email = "[email protected]";
            Console.WriteLine(phone);
            Console.WriteLine(phone.InfoHidden());
            Console.WriteLine(email);
            Console.WriteLine(email.InfoHidden());
        }
    }
}

效果

20190619160414.png