AlipayMosaicUtil


import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
/**
 * @author zkl
 * @date 2022/7/7
 */
public class AlipayMosaicUtil {
    private static final Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
    /**
     * 中文姓名只展示最后一个字,前面补充 *;空格保留;长姓名注意展示换行。
     * 中文姓名只有一个字的,展示一个
     * *明
     * **堂
     * ***儿
     *
     * 英文姓名按照段数,2 段或者以上的,脱敏第一段。
     */
    public static String hideName(String name) {
        if (StringUtils.isBlank(name)) {
            return name;
        }
        Matcher m = p.matcher(name);
        if (m.find()) {
            //中文姓名
            if (name.length() >= 2) {
                return StringUtils.leftPad(name.substring(name.length() - 1), name.length(), '*');
            } else {
                return "*";
            }
        } else {
            String englishName = "";
            //英文姓名
            String[] englishNameArr = name.split(" ");
            if (englishNameArr.length > 1) {
                for (int i = 0; i < englishNameArr.length; i++) {
                    if (i == 0) {
                        englishName = englishName + "*";
                    } else {
                        englishName = englishName + " " + englishNameArr[i];
                    }
                }
            } else {
                englishName = englishNameArr[0];
            }
            return englishName;
        }
    }
    /**
     * 只显示最后 4 位,其余 * 显示。
     * 适用于信用卡和储蓄卡。
     * ************2631
     */
    public static String hideBankCard(String bankCard) {
        if (!StringUtils.isEmpty(bankCard) && bankCard.length() >= 4) {
            return StringUtils.leftPad(bankCard.substring(bankCard.length() - 4), bankCard.length(), '*');
        } else {
            return bankCard;
        }
    }
    /**
     * 显示前 1 位和后 1 位,其余 * 显示。
     * 适用于 15 位和 18 位身份证。
     * 5*************4
     */
    public static String hideIdCardNo(String idCardNo) {
        if (StringUtils.isBlank(idCardNo)) {
            return null;
        } else {
            return idCardNo.length() <= 2 ? idCardNo : idCardNo.replaceAll("(?<=\\w{1})\\w(?=\\w{1})", "*");
        }
    }
    /**
     * 显示前 3 位和后 2 位,其余 * 显示。
     * 适用于大陆手机号
     * 181******24
     */
    public static String hideMobile(String mobilePhone) {
        if (StringUtils.isBlank(mobilePhone)) {
            return null;
        } else {
            return mobilePhone.length() <= 5 ? mobilePhone : mobilePhone.replaceAll("(?<=\\w{3})\\w(?=\\w{2})", "*");
        }
    }
}


乐享:知识积累,快乐无限。