/**
* 驗證手機號碼
*
* @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;
}
}
驗證手機號碼工具類
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.