天天看點

Java身份證、手機号碼用*隐藏中間幾位

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ConcealNumber {

    public static void main(String[] args) {
        // 用*隐藏手機号
        String testPhoneStr = "13800138000";
        testPhoneStr  =	concealAllPhoneNum(testPhoneStr);
        System.out.println(testPhoneStr);

        // 用*隐藏身份證号
        String testIDCardStr = "530121198808228647";
        testIDCardStr  = hideAllIdCardNum(testIDCardStr);
        System.out.println(testIDCardStr);
    }

    /**
     * 隐藏手機号
     *
     * @param phoneNum
     * @return
     */
    public static String concealAllPhoneNum(String phoneNum){
        Pattern pattern = Pattern.compile("((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(17[0,1,3,5,6,7,8])|(18[0-9])|(19[8|9]))\\d{8}");
        Matcher matcher = pattern.matcher(phoneNum);
        StringBuffer sb = new StringBuffer();
        try {
            while(matcher.find()) {
                String phoneStr = matcher.group();
                phoneStr = phoneStr.substring(0, 3) + "****" + phoneStr.substring(7, phoneStr.length());
                matcher.appendReplacement(sb,phoneStr);
            }
            matcher.appendTail(sb);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return sb.toString();
    }

    /**
     * 隐藏身份證号碼
     *
     * @param idCardNum
     * @return
     */
    public static String hideAllIdCardNum(String idCardNum){
        Pattern pattern = Pattern.compile("(\\d{6})(19|20)(\\d{2})(1[0-2]|0[1-9])(0[1-9]|[1-2][0-9]|3[0-1])(\\d{3})(\\d|X|x)");
        Matcher matcher = pattern.matcher(idCardNum);
        StringBuffer sb = new StringBuffer();
        try {
            while(matcher.find()) {
                String idCardStr = matcher.group();
                int len=idCardStr.length();
                if(len>=9){
                    idCardStr =  idCardStr.replaceAll("(.{"+(len<12?3:6)+"})(.*)(.{4})", "$1" + "****" + "$3");
                }
                matcher.appendReplacement(sb,idCardStr);
            }
            matcher.appendTail(sb);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return sb.toString();
    }
}
           

輸出結果:

138****8000
530121****8647