数据脱敏工具类(包含手机号,银行卡号,邮箱,中文名称等)

针对客户一些敏感信息做脱敏特殊处理,直接上代码吧!

/**
 * @author harainye
 * @description 隐藏数据工具类
 * @date 2019年12月05日 11:20:35
 */
public class HideDataUtils {

    /**
     * [卡号] 前4位+********+后4位,其余隐藏为*号
     * <例子:6229**********1115>
     * @param cardNo 身份证号、银行卡号、证件编号
     * @return 小于等于8位的直接返回
     */
    public static String hideCarNo(String cardNo) {
        if (Utils.isEmpty(cardNo)) {
            return "";
        }
        if (cardNo.length() <= 8) {
            return cardNo;
        }
        int length = cardNo.length();
        return cardNo.substring(0, 4).concat(StringUtils.leftPad(cardNo.substring(cardNo.length() - 4), length - 4, "*"));
    }

    /**
     * [中文姓名] 只显示第一个汉字,其余隐藏为*号
     * <例子:何**>
     * @param name 中文姓名
     * @return
     */
    public static String chineseName (String name) {
        if (Utils.isEmpty(name)) {
            return "";
        }
        String showName = StringUtils.left(name, 1);
        return StringUtils.rightPad(showName, StringUtils.length(name), "*");
    }

    /**
     * [地址] 只显示前6个汉字,其余隐藏为*号
     * <例子:上海市浦东新****>
     * @param address 地址
     * @return 地址小于3位,直接返回;地址大于等于2小于等于6.隐藏前2位,其余隐藏为*号
     */
    public static String address (String address) {
        if (Utils.isEmpty(address)) {
            return "";
        }
        int length = address.length();
        if (length <= 2) {
            return address;
        }
        String showName = "";
        if (length >= 2 && length <= 6) {
            showName = StringUtils.left(address, 2);
            return StringUtils.rightPad(showName, StringUtils.length(address), "*");
        }
        showName = StringUtils.left(address, 6);
        return StringUtils.rightPad(showName, StringUtils.length(address), "*");
    }

    /**
     * [账户名称] 只显示前1个汉字,其余隐藏为*号
     * <例子:兴业银行股份有限公司 脱敏后显示为 兴*********>
     * @param acctName 地址
     * @return
     */
    public static String acctName (String acctName) {
        if (Utils.isEmpty(acctName)) {
            return "";
        }
        int length = acctName.length();
        String showName = StringUtils.left(acctName, 1);
        return StringUtils.rightPad(showName, length, "*");
    }

    /**
     * [手机号] 前3位+****+后4位,其余隐藏为*号
     * <例子:150****1115>
     * @param phoneNo 手机号
     * @return 小于等于8位的直接返回
     */
    public static String hidePhoneNo(String phoneNo) {

        if (Utils.isEmpty(phoneNo)) {
            return "";
        }
        if (phoneNo.length() <= 8) {
            return phoneNo;
        }
        int length = phoneNo.length();
        return phoneNo.substring(0, 3).concat(StringUtils.leftPad(phoneNo.substring(phoneNo.length() - 4), length - 4, "*"));
    }

    /**
     * 保留注册商,比如:qq.com
     *
     * @param email 邮箱
     * @return
     */
    public static String hideEmail(String email) {
        if (Utils.isEmpty(email)) {
            return "";
        }
        int index = StringUtils.indexOf(email, "@");
        int length = email.length();
        if (index <= 1) {
            return email;
        } else {
            String showName = StringUtils.left(email.substring(2, index), 0);
            return email.substring(0, 2).concat(StringUtils.rightPad(showName, index - 2, "*")).concat(StringUtils.mid(email, index, length));
        }
    }

    public static void main(String[] args) {
        String carNo = "35082312201111";
        String phoneNo = "1505912354";
        String emailNo = "15059121354@qq.com";
        System.out.println(hideCarNo(carNo));
        System.out.println(hidePhoneNo(phoneNo));
        System.out.println(hideEmail(emailNo));
        System.out.println(chineseName("张三"));
        System.out.println(address("上海市浦东新区来安路"));
        System.out.println(acctName("张三1"));
    }
}

PS:代码中Utils工具包请替换lang3包下的isEmpty方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值