2026-01-10 13:47:54 +08:00

74 lines
2.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
{
// IPv4123.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
}
}
}