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