1. 程式人生 > >Android判斷世界各國手機號碼合法性

Android判斷世界各國手機號碼合法性

之前公司專案只接收國內手機號碼註冊,所以只用正則表示式判斷是否滿足即可,後來香港同事、臺灣同事想使用我們產品,發現根本沒法註冊,所以後臺新增香港、臺灣、澳門手機使用者註冊支援,所以APP也得新增這些地區手機號碼合法性判斷;

香港: 國家碼為852,手機號規則: 首位為5|6|8|9 後面接7位數字,一共8位數。 臺灣:國家碼為886 ,手機號規則: 首位為9|09 後面接8位數字。一個9位或10位數字。 澳門:國家碼為853,手機號規則: 首位為6 後面接7位數字,一個8位數。

這樣問題就來了,每新增一個地區都得加一個正則,還得去一個個驗證,豈不麻煩死~~

後來查了一下資料,發現Google有個開源庫,

libphonenumber ,可以判斷出手機號的運營商、判斷手機號碼是不是合法的、判斷手機號碼歸屬地等等功能,簡直不能更強大,美滋滋~~

點選release,下載最新jar包放到Android Studio libs目錄下,gradle新增依賴,一氣呵成;

/**
  * 根據區號判斷是否是正確的電話號碼
  * @param phoneNumber :帶國家碼的電話號碼
  * @param countryCode :預設國家碼
  * return :true 合法  false:不合法
  */
public static boolean isPhoneNumberValid(String phoneNumber, String countryCode){

        System.out.println("isPhoneNumberValid: "+phoneNumber+"/"+countryCode);
        PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
        try{
            Phonenumber.PhoneNumber numberProto = phoneUtil.parse(phoneNumber, countryCode);
            return phoneUtil.isValidNumber(numberProto);
        }catch (NumberParseException e){
            System.err.println("isPhoneNumberValid NumberParseException was thrown: " + e.toString());
        }
        return false;
}

註釋已經寫得很清楚啦,可以寫個測試demo驗證一下:

boolean valid_cn = AndroidConfig.isPhoneNumberValid("+8615820799999","86");
System.out.println("isPhoneNumberValid:"+valid_cn);

boolean valid_hk = AndroidConfig.isPhoneNumberValid("+85283079901","852");
System.out.println("isPhoneNumberValid:"+valid_hk);