74 lines
2.5 KiB
C#
74 lines
2.5 KiB
C#
namespace RIZO.Infrastructure.Helper
|
||
{
|
||
public static class MaskUtil
|
||
{
|
||
/// <summary>
|
||
/// 手机号脱敏
|
||
/// </summary>
|
||
/// <param name="phone"></param>
|
||
/// <returns></returns>
|
||
public static string MaskPhone(string phone)
|
||
{
|
||
if (string.IsNullOrEmpty(phone) || phone.Length < 7) return phone;
|
||
return phone[..3] + "****" + phone.Substring(7);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 身份证号
|
||
/// </summary>
|
||
/// <param name="idCard"></param>
|
||
/// <returns></returns>
|
||
public static string MaskIdCard(string idCard)
|
||
{
|
||
if (string.IsNullOrEmpty(idCard) || idCard.Length < 8) return idCard;
|
||
return idCard.Substring(0, 4) + "********" + idCard.Substring(idCard.Length - 4);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 昵称
|
||
/// </summary>
|
||
/// <param name="name"></param>
|
||
/// <returns></returns>
|
||
public static string MaskName(string name)
|
||
{
|
||
if (string.IsNullOrEmpty(name)) return name;
|
||
if (name.Length == 2) return name[..1] + "*";
|
||
if (name.Length > 2) return name[..1] + new string('*', name.Length - 2) + name.Substring(name.Length - 1);
|
||
return "*";
|
||
}
|
||
|
||
/// <summary>
|
||
/// 脱敏 IP 地址(支持 IPv4 和 IPv6)
|
||
/// </summary>
|
||
public static string MaskIp(string ip)
|
||
{
|
||
if (string.IsNullOrWhiteSpace(ip)) return ip;
|
||
|
||
if (System.Net.IPAddress.TryParse(ip, out var ipAddress))
|
||
{
|
||
if (ipAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
|
||
{
|
||
// IPv4:123.45.67.89 -> 123.45.*.*
|
||
var parts = ip.Split('.');
|
||
if (parts.Length == 4)
|
||
{
|
||
return $"{parts[0]}.{parts[1]}.*.*";
|
||
}
|
||
}
|
||
else if (ipAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
|
||
{
|
||
// IPv6:保留前3段,其他替换为 ****
|
||
var parts = ip.Split(':');
|
||
for (int i = 3; i < parts.Length; i++)
|
||
{
|
||
parts[i] = "****";
|
||
}
|
||
return string.Join(":", parts);
|
||
}
|
||
}
|
||
|
||
return "***.***.***.***"; // fallback
|
||
}
|
||
}
|
||
}
|