namespace ZR.Infrastructure.Helper { public static class MaskUtil { /// /// 手机号脱敏 /// /// /// public static string MaskPhone(string phone) { if (string.IsNullOrEmpty(phone) || phone.Length < 7) return phone; return phone[..3] + "****" + phone.Substring(7); } /// /// 身份证号 /// /// /// 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); } /// /// 昵称 /// /// /// 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 "*"; } /// /// 脱敏 IP 地址(支持 IPv4 和 IPv6) /// 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 } } }