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})", "*"); } } }
乐享:知识积累,快乐无限。