Android判斷世界各國手機號碼合法性
阿新 • • 發佈:2018-12-12
之前公司專案只接收國內手機號碼註冊,所以只用正則表示式判斷是否滿足即可,後來香港同事、臺灣同事想使用我們產品,發現根本沒法註冊,所以後臺新增香港、臺灣、澳門手機使用者註冊支援,所以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);