脱敏
public static final String DEFAULT_PAD_STR = "*"; //替换字符
/**
* 数据脱敏
* 当字符创为空串或字符串长度小于等于 2 时,直接返回
* 当【字符串总长度】减 {@code leftLen} 减 {@code rightLen} 小于等于 【字符串总长度】的三分之一时,则左右各展示【字符串总长度】的三分之一
*
* @param data 需要脱敏的数据
* @param leftLen 左边展示几位
* @param rightLen 右边展示几位
* @param padStr 填充字符串,如果长度为 1, 则按位填充;否则否则直接填充,可用于颜文字填充场景
* @return
*/
public static String desensitization(String data, Integer leftLen, Integer rightLen, String padStr) {
int length = StringUtils.length(data);
if (StringUtils.isBlank(data) || length <= 2) {
return data;
}
int oneThird = length / 3;
// 设置默认值
leftLen = Objects.isNull(leftLen) ? oneThird : leftLen;
rightLen = Objects.isNull(rightLen) ? oneThird : rightLen;
padStr = StringUtils.isBlank(padStr) ? DEFAULT_PAD_STR : padStr;
if (length - leftLen - rightLen <= oneThird) {
leftLen = oneThird;
rightLen = oneThird;
}
String left = StringUtils.left(data, leftLen);
String right = StringUtils.right(data, rightLen);
if (StringUtils.length(padStr) == 1) {
return StringUtils.rightPad(left, data.length() - rightLen, padStr).concat(right);
}
return left + padStr + right;
}