文章目錄

  • 通過手機號獲取相關信息
  • 1. Spring Boot通過手機號獲取歸屬地
  • 情況一:使用谷歌依賴
  • 主要實現過程
  • 2. 通過手機號獲取歸屬地(基於CSV文件)
  • 情況二:基於CSV文件
  • 完整代碼如下

通過手機號獲取相關信息

就是通過你輸入的手機號或者手機號前7位前綴來獲取相關信息,如下:

java查詢手機號歸屬地_CSV

實現方式如下:
情況一:通過谷歌工具實現
情況二:直接從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、測試:

java查詢手機號歸屬地_CSV_02

2. 通過手機號獲取歸屬地(基於CSV文件)

情況二:基於CSV文件

目的:結果還是跟上面一樣,拿到手機號的相關信息。只不過這裏是通過CSV文件 + Redis 實現的

思路:手機號是有規律可循的,比如前3位可知道運營商,前7位可知道歸屬地,於是將這些信息整理為 CSV 文件,然後可以將這些信息存儲到 redis 或者數據庫中,這樣就不需要依賴了:

java查詢手機號歸屬地_#spring boot_03

完整代碼如下