MaskUtil.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. namespace ZR.Infrastructure.Helper
  2. {
  3. public static class MaskUtil
  4. {
  5. /// <summary>
  6. /// 手机号脱敏
  7. /// </summary>
  8. /// <param name="phone"></param>
  9. /// <returns></returns>
  10. public static string MaskPhone(string phone)
  11. {
  12. if (string.IsNullOrEmpty(phone) || phone.Length < 7) return phone;
  13. return phone[..3] + "****" + phone.Substring(7);
  14. }
  15. /// <summary>
  16. /// 身份证号
  17. /// </summary>
  18. /// <param name="idCard"></param>
  19. /// <returns></returns>
  20. public static string MaskIdCard(string idCard)
  21. {
  22. if (string.IsNullOrEmpty(idCard) || idCard.Length < 8) return idCard;
  23. return idCard.Substring(0, 4) + "********" + idCard.Substring(idCard.Length - 4);
  24. }
  25. /// <summary>
  26. /// 昵称
  27. /// </summary>
  28. /// <param name="name"></param>
  29. /// <returns></returns>
  30. public static string MaskName(string name)
  31. {
  32. if (string.IsNullOrEmpty(name)) return name;
  33. if (name.Length == 2) return name[..1] + "*";
  34. if (name.Length > 2) return name[..1] + new string('*', name.Length - 2) + name.Substring(name.Length - 1);
  35. return "*";
  36. }
  37. /// <summary>
  38. /// 脱敏 IP 地址(支持 IPv4 和 IPv6)
  39. /// </summary>
  40. public static string MaskIp(string ip)
  41. {
  42. if (string.IsNullOrWhiteSpace(ip)) return ip;
  43. if (System.Net.IPAddress.TryParse(ip, out var ipAddress))
  44. {
  45. if (ipAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
  46. {
  47. // IPv4:123.45.67.89 -> 123.45.*.*
  48. var parts = ip.Split('.');
  49. if (parts.Length == 4)
  50. {
  51. return $"{parts[0]}.{parts[1]}.*.*";
  52. }
  53. }
  54. else if (ipAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
  55. {
  56. // IPv6:保留前3段,其他替换为 ****
  57. var parts = ip.Split(':');
  58. for (int i = 3; i < parts.Length; i++)
  59. {
  60. parts[i] = "****";
  61. }
  62. return string.Join(":", parts);
  63. }
  64. }
  65. return "***.***.***.***"; // fallback
  66. }
  67. }
  68. }