手机号,身份证,银行卡号数据脱敏
·
手机号,身份证,银行卡号数据脱敏
主体
/**
* <p>
* 数据脱敏
* (1)手机号(联系方式类型为:手机):
* 正常显示前3位后4位,其他位用*补齐,例如:159****5865
* (2)银行卡号:
* 正常显示前4位后4位,其他位用*补齐,例如:4392********4175
* (3)身份证号(证件类型为:身份证):
* 正常显示前3位后2位,其他位用*补齐,例如:120*************43
* </p>
*
* @Author:
* @Date: 2021/6/19 08:59
*/
public class DataDesensitizationUtil {
/**
* 数据脱敏,不为 手机号,银行卡号,身份证号 则返回空
* @param str
* @return
*/
public static String dataDesensitization(String str){
if ("".equals(str)){
return str;
}
String s = "";
if (IsIDCardUtil.isIDCard(str)){
char[] chars = str.toCharArray();
String s1 = "";
for (int i = 0; i < chars.length; i++) {
if (i>2 && i<chars.length-2){
s1 = "*";
}else {
s1 = chars[i] + "";
}
s += s1;
}
return s;
}
if (IsPhoneUtil.isPhoneLegal(str)){
char[] chars = str.toCharArray();
String s1 = "";
for (int i = 0; i <chars.length; i++) {
if (i>2 && i<chars.length-4){
s1 = "*";
}else {
s1 = chars[i] + "";
}
s += s1;
}
return s;
}
if (IsBankCardUtil.checkBankCard(str)){
char[] chars = str.toCharArray();
String s1 = "";
for (int i = 0; i <chars.length; i++) {
if (i>3 && i<chars.length-4){
s1 = "*";
}else {
s1 = chars[i] + "";
}
s += s1;
}
return s;
}
return s;
}
public static void main(String[] args) {
String server = dataDesensitization("");
System.out.println("server = " + server);
}
}
判断输入有效
判断手机号有效
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
/**
* <p>
*验证是否为手机号
* </p>
*
* @Author:
* @Date: 2021/4/13 9:53
*/
public class IsPhoneUtil {
/**
*
* 大陆号码或香港号码均可
*/
public static boolean isPhoneLegal(String str) throws PatternSyntaxException {
return isChinaPhoneLegal(str) || isHKPhoneLegal(str);
}
/**
*
* * 大陆手机号码11位数,匹配格式:前三位固定格式+后8位任意数
* * 此方法中前三位格式有:
* * 13+任意数
* * 15+除4的任意数
* * 18+除1和4的任意数
* * 17+除9的任意数
* * 147
*
*/
public static boolean isChinaPhoneLegal(String str) throws PatternSyntaxException {
String regExp = "^((13[0-9])|(15[^4])|(18[0,2,3,5-9])|(17[0-8])|(147))\\d{8}$";
Pattern p = Pattern.compile(regExp);
Matcher m = p.matcher(str);
return m.matches();
}
/**
*
* * 香港手机号码8位数,5|6|8|9开头+7位任意数
*
*/
public static boolean isHKPhoneLegal(String str) throws PatternSyntaxException {
String regExp = "^(5|6|8|9)\\d{7}$";
Pattern p = Pattern.compile(regExp);
Matcher m = p.matcher(str);
return m.matches();
}
}
判断身份证有效
/**
* <p>
* 判断身份证是否合理
* </p>
*
* @Author:
* @Date: 2021/6/19 09:05
*/
public class IsIDCardUtil {
public static boolean isIDCard(String s){
String regex = "\\d{15}|\\d{17}[\\dxX]";
if(s.matches(regex)) {
return true;
}else {
return false;
}
}
}
判断银行卡号有效
/**
* <p>
* 校验银行卡号
* </p>
*
* @Author:
* @Date: 2021/6/19 09:19
*/
public class IsBankCardUtil {
/**
* 校验银行卡卡号
*
* @param cardId
* @return
*/
public static boolean checkBankCard(String cardId) {
char bit = getBankCardCheckCode(cardId.substring(0, cardId.length() - 1));
if (bit == 'N') {
return false;
}
return cardId.charAt(cardId.length() - 1) == bit;
}
/**
* 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验位
*
* @param nonCheckCodeCardId
* @return
*/
public static char getBankCardCheckCode(String nonCheckCodeCardId) {
if (nonCheckCodeCardId == null || nonCheckCodeCardId.trim().length() == 0
|| !nonCheckCodeCardId.matches("\\d+")) {
//如果传的不是数据返回N
return 'N';
}
char[] chs = nonCheckCodeCardId.trim().toCharArray();
int luhmSum = 0;
for (int i = chs.length - 1, j = 0; i >= 0; i--, j++) {
int k = chs[i] - '0';
if (j % 2 == 0) {
k *= 2;
k = k / 10 + k % 10;
}
luhmSum += k;
}
return (luhmSum % 10 == 0) ? '0' : (char) ((10 - luhmSum % 10) + '0');
}
}
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)