自定义注解实现数据脱敏

自定义注解实现数据脱敏

描述

需要实现用户的身份证显示 但敏感数据需要隐藏 如:41148xxxxxxxxxxx9

代码

代码如下(示例):

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.apache.commons.lang3.StringUtils;

import java.io.IOException;

/**
 * @program: chargingpile
 * @description: 数据脱敏
 * @author: Mr.ch
 * @create: 2020-08-07
 **/
public class EncryptSerializer extends JsonSerializer<String> {
    @Override
    public void serialize(String value, JsonGenerator generator, SerializerProvider serializer) throws IOException {
        if (StringUtils.isNotBlank(value)) {
            generator.writeString(IdEncryptUtil.numberEncrypt(value));
        } else {
            generator.writeNull();
        }
    }

}

import org.apache.commons.lang3.StringUtils;

public class IdEncryptUtil {
    public static final Integer PHONE_NUM_LENGTH = 11;
    public static final Integer PERSON_NUM_LENGTH = 18;
    public static final Integer BANK_CARD_ID_MIN_LENGTH = 15;
    public static final Integer BANK_CARD_ID_MAX_LENGTH = 19;

    public IdEncryptUtil() {
    }
	/**
     * 手机号脱敏
     */
    public static String phoneNumEncrypt(String phoneNum) {
        return !StringUtils.isEmpty(phoneNum) && phoneNum.length() >= PHONE_NUM_LENGTH ? phoneNum.replaceAll("(?<=\\w{3})\\w(?=\\w{4})", "*") : phoneNum;
    }
	/**
     * 手机号脱敏
     */
    public static String personIdEncrypt(String personId) {
        return !StringUtils.isEmpty(personId) && personId.length() >= PERSON_NUM_LENGTH ? personId.replaceAll("(?<=\\w{3})\\w(?=\\w{4})", "*") : personId;
    }
	/**
     * 银行卡脱敏
     */
    public static String bankCardNumEncrypt(String bankCarNo) {
        return !StringUtils.isEmpty(bankCarNo) && bankCarNo.length() >= BANK_CARD_ID_MIN_LENGTH && bankCarNo.length() <= BANK_CARD_ID_MAX_LENGTH ? bankCarNo.replaceAll("(?<=\\w{4})\\w(?=\\w{4})", "*") : bankCarNo;
    }
	/**
     * 数字脱敏
     */
    public static String numberEncrypt(String bankCarNo) {
        return StringUtils.isEmpty(bankCarNo) ? bankCarNo : bankCarNo.replaceAll("(?<=\\w{4})\\w(?=\\w{4})", "*");
    }
}

使用

@Data
public class CpUserVo {

    private static final long serialVersionUID = 1L;
    
    /**
     * 身份证号 脱敏
     */
    @JsonSerialize(using = EncryptSerializer.class)
    private String idCard;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值