文章目錄
- 通過手機號獲取相關信息
- 1. Spring Boot通過手機號獲取歸屬地
- 情況一:使用谷歌依賴
- 主要實現過程
- 2. 通過手機號獲取歸屬地(基於CSV文件)
- 情況二:基於CSV文件
- 完整代碼如下
通過手機號獲取相關信息
就是通過你輸入的手機號或者手機號前7位前綴來獲取相關信息,如下:
實現方式如下:
情況一:通過谷歌工具實現
情況二:直接從CSV文件中查詢
1. Spring Boot通過手機號獲取歸屬地
情況一:使用谷歌依賴
目的:通過手機號獲取歸屬地,基於谷歌提供的軟件庫(libphonenumber)
<!-- 主要用於校驗手機號的正確性 -->
<dependency>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber</artifactId>
<version>8.13.26</version>
</dependency>
<!-- 主要用於獲取手機號的供應商 -->
<dependency>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>carrier</artifactId>
<version>1.210</version>
</dependency>
<!-- 主要用於獲取手機號的歸屬地 -->
<dependency>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>geocoder</artifactId>
<version>2.220</version>
</dependency>
主要實現過程
1、手機號工具類:
import com.alibaba.fastjson.JSONObject;
import com.google.i18n.phonenumbers.PhoneNumberToCarrierMapper;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.Phonenumber;
import com.google.i18n.phonenumbers.geocoding.PhoneNumberOfflineGeocoder;
import java.util.Locale;
/**
* 基於google的libphonenumber將手機號轉成地區及供應商信息
*/
public class PhoneInfoUtil {
// 手機號基本工具類
private static final PhoneNumberUtil PHONE_NUMBER_UTIL = PhoneNumberUtil.getInstance();
// 運營商
private static final PhoneNumberToCarrierMapper CARRIER_MAPPER = PhoneNumberToCarrierMapper.getInstance();
// 離線功能,手機號歸屬地查詢
private static final PhoneNumberOfflineGeocoder GEO_CODER = PhoneNumberOfflineGeocoder.getInstance();
/**
* 1.驗證當前手機號是否有效
*
* @param phone 手機號
* @return 校驗結果
*/
public static boolean isPhoneNumber(String phone) {
// 需要對字符串phone進行包裝
return PHONE_NUMBER_UTIL.isValidNumber(getPhoneNumber(phone));
}
/**
* 2.獲取手機號運營商
*
* @param phone 手機號
* @return 運營商
*/
public static String getPhoneCarrier(String phone) {
return isPhoneNumber(phone) ? CARRIER_MAPPER.getNameForNumber(getPhoneNumber(phone), Locale.CHINA) : "";
}
/**
* 3.獲取手機號歸屬地
*
* @param phone 手機號
* @return 歸屬地
*/
public static String getPhoneRegion(String phone) {
return isPhoneNumber(phone) ? GEO_CODER.getDescriptionForNumber(getPhoneNumber(phone), Locale.CHINESE) : "";
}
/**
* 生成PhoneNumber:將String包裝成PhoneNumber
*
* @param phone 手機號
* @return PhoneNumber
*/
public static Phonenumber.PhoneNumber getPhoneNumber(String phone) {
Phonenumber.PhoneNumber phoneNumber = new Phonenumber.PhoneNumber();
// 設置電話號碼的國家代碼為86(中國)
phoneNumber.setCountryCode(86);
// 將輸入的電話號碼字符串解析為長整型,
// 設置電話號碼的國內號碼部分:不包含國家代碼、通常是去掉國家代碼後的純數字部分
phoneNumber.setNationalNumber(Long.parseLong(phone));
return phoneNumber;
}
/**
* 獲取手機號的歸屬信息:運營商,歸屬地
*
* @param phone 手機號
* @return 歸屬信息(Map形式)
*/
public static JSONObject getPhoneInfo(String phone) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("phone", phone);
jsonObject.put("carrier", getPhoneCarrier(phone));
jsonObject.put("region", getPhoneRegion(phone));
return jsonObject;
}
}
2、測試:
2. 通過手機號獲取歸屬地(基於CSV文件)
情況二:基於CSV文件
目的:結果還是跟上面一樣,拿到手機號的相關信息。只不過這裏是通過CSV文件 + Redis 實現的
思路:手機號是有規律可循的,比如前3位可知道運營商,前7位可知道歸屬地,於是將這些信息整理為 CSV 文件,然後可以將這些信息存儲到 redis 或者數據庫中,這樣就不需要依賴了:
完整代碼如下
本文章為轉載內容,我們尊重原作者對文章享有的著作權。如有內容錯誤或侵權問題,歡迎原作者聯繫我們進行內容更正或刪除文章。