驗證手機號碼工具類

/**
 * 驗證手機號碼
 *
 * @author dujiayu
 * @time 2020年4月25日11:12:57
 */
public class NumberUtil {
    // 用於匹配手機號碼
    private final static String REGEX_MOBILEPHONE = "^0?1[34578]\\d{9}$";

    // 用於匹配固定電話號碼
    private final static String REGEX_FIXEDPHONE = "^(010|02\\d|0[3-9]\\d{2})?\\d{6,8}$";

    // 用於獲取固定電話中的區號
    private final static String REGEX_ZIPCODE = "^(010|02\\d|0[3-9]\\d{2})\\d{6,8}$";

    private static Pattern PATTERN_MOBILEPHONE;
    private static Pattern PATTERN_FIXEDPHONE;
    private static Pattern PATTERN_ZIPCODE;

    static {
        PATTERN_FIXEDPHONE = Pattern.compile(REGEX_FIXEDPHONE);
        PATTERN_MOBILEPHONE = Pattern.compile(REGEX_MOBILEPHONE);
        PATTERN_ZIPCODE = Pattern.compile(REGEX_ZIPCODE);
    }

    public enum PhoneType {
        /**
         * 手機
         */
        CELLPHONE,

        /**
         * 固定電話
         */
        FIXEDPHONE,

        /**
         * 非法格式號碼
         */
        INVALIDPHONE
    }

    public static class Numbers {
        private PhoneType type;
        /**
         * 如果是手機號碼,則該字段存儲的是手機號碼 前七位;如果是固定電話,則該字段存儲的是區號
         */
        private String code;
        private String number;

        public Numbers(PhoneType _type, String _code, String _number) {
            this.type = _type;
            this.code = _code;
            this.number = _number;
        }

        public PhoneType getType() {
            return type;
        }

        public String getCode() {
            return code;
        }

        public String getNumber() {
            return number;
        }

        @Override
        public String toString() {
            return String.format("[number:%s, type:%s, code:%s]", number, type.name(), code);
        }
    }

    /**
     * 判斷是否爲手機號碼
     *
     * @param number 手機號碼
     * @return
     */
    public static boolean isCellPhone(String number) {
        Matcher match = PATTERN_MOBILEPHONE.matcher(number);
        return match.matches();
    }

    /**
     * 判斷是否爲固定電話號碼
     *
     * @param number 固定電話號碼
     * @return
     */
    public static boolean isFixedPhone(String number) {
        Matcher match = PATTERN_FIXEDPHONE.matcher(number);
        return match.matches();
    }

    /**
     * 獲取固定號碼號碼中的區號
     *
     * @param strNumber
     * @return
     */
    public static String getZipFromHomephone(String strNumber) {
        Matcher matcher = PATTERN_ZIPCODE.matcher(strNumber);
        if (matcher.find()) {
            return matcher.group(1);
        }

        return null;
    }


    /**
     * 檢查號碼類型,並獲取號碼前綴,手機獲取前7位,固話獲取區號
     *
     * @param _number
     * @return
     */
    public static Numbers checkNumber(String _number) {
        String number = _number;
        Numbers rtNum = null;

        if (number != null && number.length() > 0) {
            if (isCellPhone(number)) {
                // 如果手機號碼以0開始,則去掉0
                if (number.charAt(0) == '0') {
                    number = number.substring(1);
                }
                rtNum = new Numbers(PhoneType.CELLPHONE, number.substring(0, 7), _number);
            } else if (isFixedPhone(number)) {
                // 獲取區號
                String zipCode = getZipFromHomephone(number);
                rtNum = new Numbers(PhoneType.FIXEDPHONE, zipCode, _number);
            } else {
                rtNum = new Numbers(PhoneType.INVALIDPHONE, null, _number);
            }
        }

        return rtNum;
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章