【工具】- MaskUtils篇

  • 打码工具类
public class MaskUtils {

    public static final String SENSITIVEINFORMATION_HIDDENSTR = "*";

    private MaskUtils() {

    }

    /**
     * 用户名模糊化,个人姓名保留第1位,企业名保留前2后2
     *
     * @param debtor 用户名
     * @return 模糊化后的用户名
     */
    public static String maskDebtor(String debtor) {
        if (debtor == null || "".equals(debtor)) {
            return debtor;
        }
        if (debtor.length() > 4) {
            // 企业名
            return mask(debtor, 2, 2, SENSITIVEINFORMATION_HIDDENSTR);
        } else {
            // 个人姓名
            if (debtor.length() > 2) {
                return mask(debtor, 1, 1, SENSITIVEINFORMATION_HIDDENSTR);
            } else {
                return mask(debtor, 1, 0, SENSITIVEINFORMATION_HIDDENSTR);
            }
        }
    }

    /**
     * 手机号模糊化,保留前3后4
     *
     * @param mobile 手机号码
     * @return 模糊化后的手机号码
     */
    public static String maskMobile(String mobile) {
        if (mobile == null || "".equals(mobile)) {
            return mobile;
        }
        return mask(mobile, 3, 4, SENSITIVEINFORMATION_HIDDENSTR);
    }

    /**
     * 身份证号模糊化,保留前3后4
     *
     * @param idCard 身份证号
     * @return 模糊化后的身份证号
     */
    public static String maskIdCard(String idCard) {
        if (idCard == null || "".equals(idCard)) {
            return idCard;
        }
        return mask(idCard, 3, 4, SENSITIVEINFORMATION_HIDDENSTR);
    }

    /**
     * 企业注册号模糊化,保留前3后3
     *
     * @param companyCode 企业注册号
     * @return 模糊化后的身份证号
     */
    public static String maskCompanyCode(String companyCode) {
        if (companyCode == null || "".equals(companyCode)) {
            return companyCode;
        }
        return mask(companyCode, 3, 4, SENSITIVEINFORMATION_HIDDENSTR);
    }

    /**
     * 模糊化银行卡号,只保留显示后四位
     * @param bankCardNo
     * @return
     */
    public static String maskBankCardNo(String bankCardNo) {
        if (bankCardNo == null || "".equals(bankCardNo)) {
            return bankCardNo;
        }
        return mask(bankCardNo, 0, 4, SENSITIVEINFORMATION_HIDDENSTR);
    }

    /**
     * 模糊化姓名只保留显示一位
     * @param debtor
     * @return
     */
    public static String maskDebtorExceptFirst(String debtor) {
        if (debtor == null || "".equals(debtor)) {
            return debtor;
        }
        if (debtor.length() > 4) {
            // 企业名
            return mask(debtor, 2, 2, SENSITIVEINFORMATION_HIDDENSTR);
        } else {
            // 个人姓名
            return mask(debtor, 1, 0, SENSITIVEINFORMATION_HIDDENSTR);
        }
    }

    /**
     * 敏感信息模糊化,将源字符串中指定位置的字符进行替换,模糊化前后字符串长度保持不变
     *
     * @param source        需要处理的源字符串
     * @param startDigit    从字符串开始保留的位数
     * @param backwardDigit 倒数保留的位数
     * @param hiddenStr
     * @return
     */
    public static String mask(String source, int startDigit, int backwardDigit, String hiddenStr) {

        if (source == null || (source.length() < (startDigit + backwardDigit))) {
            return source;
        }
        StringBuilder result = new StringBuilder(source.length());
        char[] chars = source.toCharArray();
        for (int i = 0; i < source.length(); i++) {
            if (i < startDigit) {
                result.append(chars[i]);
            } else if (i >= (chars.length - backwardDigit)) {
                result.append(chars[i]);
            } else {
                result.append(hiddenStr);
            }
        }
        return result.toString();
    }
posted @ 2020-08-13 11:05  双木l之林  阅读(513)  评论(0编辑  收藏  举报