Class Masking

java.lang.Object
org.miaixz.bus.core.data.Masking

public class Masking extends Object
数据脱敏(Data Masking)工具类,对某些敏感信息(比如,身份证号、手机号、卡号、姓名、地址、邮箱等 )屏蔽敏感数据。

支持以下类型信息的脱敏自动处理:

  • 用户ID
  • 中文名
  • 身份证
  • 座机号
  • 手机号
  • 地址
  • 电子邮件
  • 密码
  • 车牌
  • 银行卡号
  • IPv4
  • IPv6
Since:
Java 17+
Author:
Kimi Liu
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    static String
    address(String address, int sensitiveSize)
    【地址】只显示到地区,不显示详细地址,比如:北京市海淀区****
    static String
    bankCard(String bankCardNo)
    银行卡号脱敏 eg: 1101 **** **** **** 3256
    static String
    carLicense(String carLicense)
    【中国车牌】车牌中间用*代替 eg1:null - "" eg1:"" - "" eg3:苏A60000 - 苏A6***0 eg4:陕A12345D - 陕A1****D eg5:京A123 - 京A123 如果是错误的车牌,不处理
    static String
    chineseName(String fullName)
    【中文姓名】只显示第一个汉字,其他隐藏为2个星号,比如:李**
    static String
    清空为空字符串
    static String
    清空为null
    static String
    email(String email)
    【电子邮箱】邮箱前缀仅显示第一个字母,前缀其他隐藏,用星号代替,@及后面的地址显示,比如:d**@qq.com
    static String
    定义了一个first_mask的规则,只显示第一个字符。 脱敏前:123456789;脱敏后:1********。
    static String
    【固定电话 前四位,后两位
    static String
    idCardNum(String idCardNum, int front, int end)
    【身份证号】前1位 和后2位
    static String
    ipv4(String ipv4)
    IPv4脱敏,如:脱敏前:192.0.2.1;脱敏后:192.*.*.*。
    static String
    ipv6(String ipv6)
    IPv6脱敏,如:脱敏前:2001:0db8:86a3:08d3:1319:8a2e:0370:7344;脱敏后:2001:*:*:*:*:*:*:*
    static String
    脱敏,使用默认的脱敏策略
    static String
    【手机号码】前三位,后4位,其他隐藏,比如135****3966
    static String
    password(String password)
    【密码】密码的全部字符都用*代替,比如:******
    static Long
    【用户id】不对外提供userId

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • Masking

      public Masking()
  • Method Details

    • masking

      public static String masking(CharSequence text, EnumMap.Masking masking)
      脱敏,使用默认的脱敏策略
       Masking.masking("100", Masking.DesensitizedType.USER_ID)) =  "0"
       Masking.masking("王二小", Masking.DesensitizedType.CHINESE_NAME)) = "王**"
       Masking.masking("51363620000320711X", Masking.DesensitizedType.ID_CARD)) = "5***************1X"
       Masking.masking("02167518080", Masking.DesensitizedType.FIXED_PHONE)) = "0216*****80"
       Masking.masking("13929531666", Masking.DesensitizedType.MOBILE_PHONE)) = "139****1666"
       Masking.masking("北京市海淀区马连洼街道289号", Masking.DesensitizedType.ADDRESS)) = "北京市海淀区马********"
       Masking.masking("service@gmail.com", Masking.DesensitizedType.EMAIL)) = "s******@gmail.com"
       Masking.masking("1234567890", Masking.DesensitizedType.PASSWORD)) = "**********"
       Masking.masking("沪A50006", Masking.DesensitizedType.CAR_LICENSE)) = "沪A5***6"
       Masking.masking("11055555000033333350", Masking.DesensitizedType.BANK_CARD)) = "1105 **** **** **** 3350"
       Masking.masking("192.168.1.1", Masking.DesensitizedType.IPV4)) = "192.*.*.*"
       
      Parameters:
      text - 字符串
      masking - 脱敏类型;可以脱敏:用户id、中文名、身份证号、座机号、手机号、地址、电子邮件、密码
      Returns:
      脱敏之后的字符串
    • clear

      public static String clear()
      清空为空字符串
      Returns:
      清空后的值
    • clearToNull

      public static String clearToNull()
      清空为null
      Returns:
      清空后的值(null)
    • userId

      public static Long userId()
      【用户id】不对外提供userId
      Returns:
      脱敏后的主键
    • firstMask

      public static String firstMask(String text)
      定义了一个first_mask的规则,只显示第一个字符。 脱敏前:123456789;脱敏后:1********。
      Parameters:
      text - 字符串
      Returns:
      脱敏后的字符串
    • chineseName

      public static String chineseName(String fullName)
      【中文姓名】只显示第一个汉字,其他隐藏为2个星号,比如:李**
      Parameters:
      fullName - 姓名
      Returns:
      脱敏后的姓名
    • idCardNum

      public static String idCardNum(String idCardNum, int front, int end)
      【身份证号】前1位 和后2位
      Parameters:
      idCardNum - 身份证
      front - 保留:前面的front位数;从1开始
      end - 保留:后面的end位数;从1开始
      Returns:
      脱敏后的身份证
    • fixedPhone

      public static String fixedPhone(String num)
      【固定电话 前四位,后两位
      Parameters:
      num - 固定电话
      Returns:
      脱敏后的固定电话;
    • mobilePhone

      public static String mobilePhone(String num)
      【手机号码】前三位,后4位,其他隐藏,比如135****3966
      Parameters:
      num - 移动电话;
      Returns:
      脱敏后的移动电话;
    • address

      public static String address(String address, int sensitiveSize)
      【地址】只显示到地区,不显示详细地址,比如:北京市海淀区****
      Parameters:
      address - 家庭住址
      sensitiveSize - 敏感信息长度
      Returns:
      脱敏后的家庭地址
    • email

      public static String email(String email)
      【电子邮箱】邮箱前缀仅显示第一个字母,前缀其他隐藏,用星号代替,@及后面的地址显示,比如:d**@qq.com
      Parameters:
      email - 邮箱
      Returns:
      脱敏后的邮箱
    • password

      public static String password(String password)
      【密码】密码的全部字符都用*代替,比如:******
      Parameters:
      password - 密码
      Returns:
      脱敏后的密码
    • carLicense

      public static String carLicense(String carLicense)
      【中国车牌】车牌中间用*代替 eg1:null - "" eg1:"" - "" eg3:苏A60000 - 苏A6***0 eg4:陕A12345D - 陕A1****D eg5:京A123 - 京A123 如果是错误的车牌,不处理
      Parameters:
      carLicense - 完整的车牌号
      Returns:
      脱敏后的车牌
    • bankCard

      public static String bankCard(String bankCardNo)
      银行卡号脱敏 eg: 1101 **** **** **** 3256
      Parameters:
      bankCardNo - 银行卡号
      Returns:
      脱敏之后的银行卡号
    • ipv4

      public static String ipv4(String ipv4)
      IPv4脱敏,如:脱敏前:192.0.2.1;脱敏后:192.*.*.*。
      Parameters:
      ipv4 - IPv4地址
      Returns:
      脱敏后的地址
    • ipv6

      public static String ipv6(String ipv6)
      IPv6脱敏,如:脱敏前:2001:0db8:86a3:08d3:1319:8a2e:0370:7344;脱敏后:2001:*:*:*:*:*:*:*
      Parameters:
      ipv6 - IPv6地址
      Returns:
      脱敏后的地址