利用com.googlecode.libphonenumber解析手機號歸屬地
阿新 • • 發佈:2019-02-08
libphonenumber是一個Google開發的Common Java類庫用於解析,格式化,儲存和校驗國際電話號碼;
缺點是太新的號碼無法正確識別
https://github.com/googlei18n/libphonenumber
package com.base.phone; import java.util.Locale; import com.google.i18n.phonenumbers.PhoneNumberToCarrierMapper; import com.google.i18n.phonenumbers.PhoneNumberUtil; import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber; import com.google.i18n.phonenumbers.geocoding.PhoneNumberOfflineGeocoder; /** 程式碼示例 */ public class PhoneUtil { private static PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance(); private static PhoneNumberToCarrierMapper carrierMapper = PhoneNumberToCarrierMapper.getInstance(); private static PhoneNumberOfflineGeocoder geocoder = PhoneNumberOfflineGeocoder.getInstance(); /** * 根據國家程式碼和手機號 判斷手機號是否有效 * @param phoneNumber * @param countryCode * @return */ public static boolean checkPhoneNumber(String phoneNumber, Integer countryCode){ long phone = Long.parseLong(phoneNumber); PhoneNumber pn = new PhoneNumber(); pn.setCountryCode(countryCode); pn.setNationalNumber(phone); return phoneNumberUtil.isValidNumber(pn); } /** * 根據國家程式碼和手機號 判斷手機運營商 * @date 2017-4-26 上午11:30:18 * @param phoneNumber * @param countryCode * @return */ public static String getCarrier(String phoneNumber, Integer countryCode){ long phone = Long.parseLong(phoneNumber); PhoneNumber pn = new PhoneNumber(); pn.setCountryCode(countryCode); pn.setNationalNumber(phone); //返回結果只有英文,自己轉成成中文 String carrierEn = carrierMapper.getNameForNumber(pn, Locale.ENGLISH); String carrierZh = ""; carrierZh += geocoder.getDescriptionForNumber(pn, Locale.CHINESE); switch (carrierEn) { case "China Mobile": carrierZh += "移動"; break; case "China Unicom": carrierZh += "聯通"; break; case "China Telecom": carrierZh += "電信"; break; default: break; } return carrierZh; } /** * * @Description: 根據國家程式碼和手機號 手機歸屬地 * @date 2017-4-26 上午11:33:18 * @param phoneNumber * @param countryCode * @return 引數 */ public static String getGeo(String phoneNumber, Integer countryCode){ long phone = Long.parseLong(phoneNumber); PhoneNumber pn = new PhoneNumber(); pn.setCountryCode(countryCode); pn.setNationalNumber(phone); return geocoder.getDescriptionForNumber(pn, Locale.CHINESE); } public static void main(String[] args) { System.out.println(PhoneUtil.getCarrier("159657755",86)); } }
<dependency> <groupId>com.googlecode.libphonenumber</groupId> <artifactId>geocoder</artifactId> <version>2.82</version> </dependency> <dependency> <groupId>com.googlecode.libphonenumber</groupId> <artifactId>libphonenumber</artifactId> <version>8.8.5</version> </dependency> <dependency> <groupId>com.googlecode.libphonenumber</groupId> <artifactId>prefixmapper</artifactId> <version>2.82</version> </dependency> <dependency> <groupId>com.googlecode.libphonenumber</groupId> <artifactId>carrier</artifactId> <version>1.72</version> </dependency>