用户关键信息隐藏
起因
事情的发生是这样的,在一个月黑风高的夜晚,突然有人跟我说我写的代码有点问题???
然后一看原来是用户信息没有隐藏。
例如:手机号码: 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());
}
}
}
效果
