All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.kanejin.commons.util.StringMaskUtils Maven / Gradle / Ivy

The newest version!
package cn.kanejin.commons.util;

import static cn.kanejin.commons.util.StringUtils.isEmpty;

/**
 * 遮蔽敏感字符串相关的方法
 *
 * @author Kane Jin
 */
public class StringMaskUtils {
    /**
     * 遮蔽敏感字符串
     *
     * 遮蔽字符串中间一半长度的字符,例如:
     * "1rwLQAFbHSh9bZ5GrRwUmKSk9cLft8D1b"遮蔽之后为"1rwLQAFb****************9cLft8D1b"
     *
     * @param str 字符串
     * @return 遮蔽后的字符串
     */
    public static String maskString(String str) {
        return maskString(str, false);
    }

    /**
     * 按指定的位置和长度遮蔽敏感字符串
     *
     * 例如:
     * maskString("13901270809", 3, 4)的返回值为"139****0809"
     *
     * @param str 字符串
     * @param start 开始位置坐标
     * @param length 遮蔽长度
     * @return 遮蔽后的字符串
     */
    public static String maskString(String str, int start, int length) {
        return maskString(str, start, length, false);
    }

    /**
     * 遮蔽敏感字符串,并按要求缩短字符串
     *
     * 遮蔽字符串中间一半长度的字符,如果缩短的话,则只保留前后4位字符,例如:
     * "1rwLQAFbHSh9bZ5GrRwUmKSk9cLft8D1b"遮蔽之后为
     * 未缩短:"1rwLQAFb****************9cLft8D1b"
     * 缩短:1rwL**8D1b
     *
     * @param str 字符串
     * @param shorten 是否缩短字符串
     * @return 遮蔽后的字符串
     */
    public static String maskString(String str, boolean shorten) {
        if (isEmpty(str))
            return "";

        int maskLength = 0;

        if (shorten && str.length() > 10) {
            maskLength = Math.max(str.length() - 8, 1);
        } else  {
            maskLength = Math.max(str.length() / 2, 1);
        }

        int startIndex = (str.length() - maskLength) / 2;

        return maskString(str, startIndex, maskLength, shorten);
    }

    /**
     * 按指定的位置和长度遮蔽敏感字符串
     *
     * 如果缩短为true,则遮蔽的部分只用两个**代替,例如:
     * maskString("1rwLQAFbHSh9bZ5GrRwUmKSk9cL", 5, 6, true)
     * 的返回值为"1rwLQ**9bZ5GrRwUmKSk9cL"
     *
     * @param str 字符串
     * @param start 开始位置坐标
     * @param length 遮蔽长度
     * @param shorten 是否缩短字符串
     * @return 遮蔽后的字符串
     */
    public static String maskString(String str, int start, int length, boolean shorten) {
        if (isEmpty(str))
            return "";

        if (start + length >= str.length()) {
            start = 0;
            length = str.length();
        }

        String mask = "";
        if (shorten && length > 2) {
            mask = "**";
        } else {
            for (int i = 0; i < length; i++)
                mask += "*";
        }

        return str.substring(0, start) + mask + str.substring(start + length);
    }

    /**
     * 遮蔽手机号码
     *
     * 等同于maskString(mobile, 3, 4)
     *
     * @param mobile 手机号码
     * @return 遮蔽后的手机号码
     */
    public static String maskMobile(String mobile) {
        return maskString(mobile, 3, 4);

    }

    /**
     * 遮蔽邮箱
     *
     * 邮箱@后面的域名不遮蔽,只遮蔽@之前的用户名,遮蔽用户名中间一半长度的字符,例如:
     * [email protected]遮蔽后为ka*****[email protected]
     *
     * @param email 邮箱
     * @return 遮蔽后的邮箱
     */
    public static String maskEmail(String email) {
        if (isEmpty(email))
            return email;

        if (!email.contains("@"))
            return maskString(email);

        String name = email.substring(0, email.indexOf("@"));

        return maskString(name) + email.substring(email.indexOf("@"));
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy