0
点赞
收藏
分享

微信扫一扫

数据脱敏工具类

1.数据类型枚举

包括姓名,手机号,身份证号,银行卡号,邮箱,居住地址,IP地址

/**
 * 脱敏类型枚举
 *
 * @author gltqe
 * @date 2023/6/17 20:22
 */
public enum MaskType {
    NAME,
    PHONE,
    ID_CARD,
    BANK_CARD,
    EMAIL,
    ADDRESS,
    IP_ADDRESS,
    DEFAULT
}

2.脱敏工具类

package com.gltqe.mask;

import java.util.Collections;

/**
 * 脱敏工具类
 *
 * @author gltqe
 * @date 2023/6/17 19:32
 */
public class DataMaskUtil {

    /**
     * 脱敏姓名,只保留姓氏
     *
     * @param name 姓名
     * @return 脱敏后的姓名
     */
    public static String maskName(String name) {
        if (name == null || name.isEmpty()) {
            return "";
        }
        return name.substring(0, 1) + String.join("", Collections.nCopies(name.length() - 1, "*"));
    }

    /**
     * 脱敏手机号,保留前三位和后四位
     *
     * @param phone 手机号
     * @return 脱敏后的手机号
     */
    public static String maskPhone(String phone) {
        if (phone == null || phone.isEmpty()) {
            return "";
        }
        return phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
    }

    /**
     * 脱敏身份证号码,保留前四位和后四位
     *
     * @param idCard 身份证号码
     * @return 脱敏后的身份证号码
     */
    public static String maskIdCard(String idCard) {
        if (idCard == null || idCard.isEmpty()) {
            return "";
        }
        return idCard.replaceAll("(\\d{4})\\d+(\\w{4})", "$1**********$2");
    }

    /**
     * 脱敏银行卡号,保留前四位和后四位
     *
     * @param bankCard 银行卡号
     * @return 脱敏后的银行卡号
     */
    public static String maskBankCard(String bankCard) {
        if (bankCard == null || bankCard.isEmpty()) {
            return "";
        }
        return bankCard.replaceAll("(\\d{4})\\d+(\\d{4})", "$1**********$2");
    }

    /**
     * 脱敏电子邮箱,保留@前面的第一个字符和@后面的域名
     *
     * @param email 电子邮箱
     * @return 脱敏后的电子邮箱
     */
    public static String maskEmail(String email) {
        Integer partsLength = 2;
        if (email == null || email.isEmpty()) {
            return "";
        }
        String[] parts = email.split("@");
        if (parts.length != partsLength) {
            return email;
        }
        return parts[0].substring(0, 1) + "****@" + parts[1];
    }

    /**
     * 脱敏地址信息,保留前三个字符和后两个字符
     *
     * @param address 地址信息
     * @return 脱敏后的地址信息
     */
    public static String maskAddress(String address) {
        Integer addressLength = 5;
        if (address == null || address.isEmpty()) {
            return "";
        }
        if (address.length() <= addressLength) {
            return address;
        }
        return address.substring(0, 3) + "**" + address.substring(address.length() - 2);
    }

    /**
     * 脱敏IP地址,保留前三位和后一位
     *
     * @param ipAddress IP地址
     * @return 脱敏后的IP地址
     */
    public static String maskIpAddress(String ipAddress) {
        Integer partsLength = 4;
        if (ipAddress == null || ipAddress.isEmpty()) {
            return "";
        }
        String[] parts = ipAddress.split("\\.");
        if (parts.length != partsLength) {
            return ipAddress;
        }
        return parts[0] + "." + parts[1] + "." + parts[2] + ".*";
    }

    /**
     * 默认脱敏
     *
     * @return String
     * @author gltqe
     * @date 2023/6/18 1:58
     */
    public static String defaultMask(String data) {
        if (data == null || data.isEmpty()) {
            return "";
        }

        if (data.length() == 1) {
            return data.charAt(0) + "*";
        } else {
            return data.charAt(0) + "******";
        }
    }
}

举报

相关推荐

0 条评论