在我们平常开发中,我们有时候需要对用户名、手机号等信息进行一些敏感信息的处理(如:王小五 →王*五),还有银行卡截取后四位等,这里我整理成了一个工具类,分享给大家!
/**
* 敏感信息处理工具类
* @author Zhang
*/
public final class SensitiveInfoUtils {
private SensitiveInfoUtils() {
throw new AssertionError(" 不能产生实例");
}
/**
* 名字脱敏处理
* @param name 名字
* @return 脱敏后的名字
*/
public static String name(String name) {
if (name == null || name.isEmpty()) { return "*"; }
char[] chars = name.toCharArray();
for (int i = 1; i < chars.length; i ++) {
chars[i] = '*';
}
return new String(chars);
}
/**
* 用户姓名脱敏
* @param name 姓名
* @return 脱敏后的姓名
*/
public static String username(String name) {
if (StringUtils.isEmpty(name) || name.length() == 1) { return "*"; }
char[] chars = name.toCharArray();
chars[1] = '*';
for (int i = 2; i < chars.length - 1; i ++) {
chars[i] = '*';
}
return new String(chars);
}
/**
* 银行卡脱敏 (截取后4位)
* @param cardNo 卡号
* @return 脱敏后的卡号
*/
public static String bankCard(String cardNo) {
if (StringUtils.isEmpty(cardNo)) { return ""; }
return cardNo.substring(cardNo.length() - 4);
}
/**
* 手机号脱敏 (中间四位隐藏)
* @param mobile 手机号
* @return 脱敏后的手机号
*/
public static String mobile(String mobile) {
if (StringUtils.isEmpty(mobile)) { return ""; }
char[] chars = mobile.toCharArray();
int i = 3;
chars[i ++] = '*';
chars[i ++] = '*';
chars[i ++] = '*';
chars[i] = '*';
return new String(chars);
}
/**
* 将银行卡号内的空格去除
* @param cardNo 卡号
* @return 卡号
*/
public static String trimCardNo(String cardNo) {
char[] chars = cardNo.toCharArray();
char[] card = new char[chars.length];
int i = 0;
for (char c : chars) {
if (Character.isDigit(c)) {
card[i ++] = c;
}
}
return new String(card, 0, i);
}
/**
* 判断字符串是否是数字
* @param value 字符串
* @return 为数字则返回<code>true</code>
*/
public static boolean isNumber(String value) {
if (value == null || value.isEmpty()) {
return false;
}
int len = value.length();
for (int i = 0; i < len; i ++) {
if (!Character.isDigit(value.charAt(i))) {
return false;
}
}
return true;
}
/**
* 判断该字符串是否为空
* @param value 字符串
* @return 为空则返回<code>true</code>
*/
public static boolean isEmpty(String value) {
return value == null || value.isEmpty();
}
/**
* 1. 0~1之间的BigDecimal小数,格式化后失去前面的0,则前面直接加上0。
* 2.传入的参数等于0,则直接返回字符串"0.00"
* 3.大于1的小数,直接格式化返回字符串
* @param obj传入的小数
* @return
*/
public static String formatToNumber(BigDecimal obj) {
DecimalFormat df = new DecimalFormat("#.00");
if(obj.compareTo(BigDecimal.ZERO)==0) {
return "0.00";
}else if(obj.compareTo(BigDecimal.ZERO)>0&&obj.compareTo(new BigDecimal(1))<0){
return "0"+df.format(obj).toString();
}else {
return df.format(obj).toString();
}
}
}
如有不足之处,希望能够评论回复!