在日常工作,你是否经常遇见同一个东西用过很多次,每次都需要去做同样的事情,代码冗余,而且很无聊,都说同样的东西可以抽象出工具类来,每次直接调用就行。所以直接上代码💪
目录
tip:通篇代码都是基于java语言的,jdk版本是1.8,其他情况不保证可运行。
脱敏工具类
手机号脱敏,保留前3位后4位
身份证号脱敏,保留后4位
银行卡号脱敏,保留后4位
保留前prefix位后suffix位
对指定位置序列进行脱敏
/**
* 脱敏工具类
*/
public class MaskUtil {
/**
* 手机号脱敏,保留前3后4
* ps:只处理长度为11的数字字符串
*
* @param phone 待脱敏手机号
* @return 脱敏结果
*/
public static String maskPhone(String phone) {
if (Objects.isNull(phone) || phone.length() != 11 || NumberUtil.isNumStr(phone)) {
return phone;
}
return mask(phone, 3, 4);
}
/**
* 身份证号码脱敏,保留后4位
* ps:身份证号是长度为18的字符串
*
* @param idNumber 待脱敏身份证号
* @return 脱敏结果
*/
public static String maskIdNumber(String idNumber) {
if (Objects.isNull(idNumber) || idNumber.length() != 18) {
return idNumber;
}
return mask(idNumber, 0, 4);
}
/**
* 银行卡号脱敏,保留后4位
* ps:银行卡号是长度大于4的字符串
*
* @param bankNum 待脱敏银行卡号
* @return 脱敏结果
*/
public static String maskBankNum(String bankNum) {
if (Objects.isNull(bankNum) || bankNum.length() <= 4) {
return bankNum;
}
return mask(bankNum, 0, 4);
}
/**
* 字符串脱敏,保留前prefix位后suffix
* ps:只处非空字符串 且保留的数字合法
*
* @param var 待脱敏字符串
* @param prefix 保留前prefix位 非负整数
* @param suffix 保留后suffix位 非负整数
* @return 脱敏结果
*/
public static String mask(String var, int prefix, int suffix) {
// 待处理处理字符串为空
if (Objects.isNull(var) || var.isEmpty()
// 非法数字
|| prefix < 0 || suffix < 0
// 不保留整个字符串
|| prefix + suffix == 0
// 保留超过整个字符串
|| prefix + suffix >= var.length()) {
return var;
}
char[] toDeal = var.toCharArray();
// 需要脱敏的长度
int len = var.length() - suffix;
for (int i = 0; i < var.length(); i++) {
if (i < prefix) {
continue;
}
if (i >= len) {
break;
}
toDeal[i] = '*';
}
return new String(toDeal);
}
/**
* 对字符串指定位置序列进行脱敏
* ps:只处理非空字符串 且序列位置合法
*
* @param var 待脱敏字符串
* @param index 指定序列
* @return 脱敏结果
*/
public static String maskIndex(String var, int index) {
if (Objects.isNull(var) || var.isEmpty() || var.length() < index) {
return var;
}
char[] toDeal = var.toCharArray();
toDeal[index - 1] = '*';
return new String(toDeal);
}
}
数字工具类
数字字符串判断呢
分转元 保留两位小数 四舍五入
元转分 保留两位小数 四舍五入
归零
数字字符串转数字,会做归零处理
public class NumberUtil {
/**
* 数字字符串判断
*
* @param var 待判断字符串
* @return 是数字字符串,则返回true;否则,返回false
*/
public static boolean isNumStr(String var) {
if (Objects.isNull(var) || var.isEmpty()) {
return false;
}
return var.matches("\\d{" + var.length() + "}");
}
/**
* 分转元 保留两位小数 四舍五入
* ps:空不处理
*
* @param var 待转字符串
* @return 转换结果
*/
public static BigDecimal f2Y(BigDecimal var) {
if (Objects.isNull(var)) {
return null;
}
return var.divide(new BigDecimal("100.00"), 2, RoundingMode.HALF_UP);
}
/**
* 元转分 保留两位小数 四舍五入
* ps:空不处理
*
* @param var 待转字符串
* @return 转换结果
*/
public static BigDecimal y2F(BigDecimal var) {
if (Objects.isNull(var)) {
return null;
}
return var.multiply(new BigDecimal("100.00")).setScale(2, RoundingMode.HALF_UP);
}
/**
* 归零
*
* @param var 待处理数字
* @return 处理结果
*/
public static BigDecimal initNum(BigDecimal var) {
return Objects.isNull(var) ? BigDecimal.ZERO : var;
}
/**
* 数字字符串转数字,会做归零处理
* ps:只做数字字符串处理,会抛异常,建议结合上面的 isNumStr 方法一起使用
*
* @param var 待处理数字字符串
* @return 处理结果
*/
public static BigDecimal initNum(String var) {
return Objects.isNull(var) || var.isEmpty() ? BigDecimal.ZERO : new BigDecimal(var);
}
}
结语
- 文章本意就是减轻开发时的冗余代码,主为方便。
- 代码没做性能处理,代码比较简单,也不存在什么性能问题。(看了代码就清楚)
- 后续累积到一定程度会继续出工具包。