手机号,身份证,银行卡号数据脱敏

主体

/**
 * <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');
    }
}
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐