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

纵然是瞬间 提交于 2020-01-19 03:57:44

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

package com.dcorepay.cloudpay.web.tenant.web.utils;

import com.dcorepay.cloudpay.common.util.Utils;
import org.apache.commons.lang3.StringUtils;

/**
 * @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方法。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!