网上找了查询手机号归属地和运营商都是调取第三方的,不知道使用次数,记录一下不调取第三方直接获取
导入依赖
<dependency>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>geocoder</artifactId>
<version>2.231</version>
</dependency>
<dependency>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber</artifactId>
<version>8.13.34</version>
</dependency>
<dependency>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>prefixmapper</artifactId>
<version>2.231</version>
</dependency>
<dependency>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>carrier</artifactId>
<version>1.220</version>
</dependency>
获取手机号归属地和运营商工具类
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ReUtil;
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;
import java.util.Locale;
public class PhoneUtil {
private static PhoneNumberToCarrierMapper carrierMapper = PhoneNumberToCarrierMapper.getInstance();
private static PhoneNumberOfflineGeocoder geocoder = PhoneNumberOfflineGeocoder.getInstance();
public static final int CHINA_CODE= 86;
/**
* 获取归属地
*/
public static String getAscription(String phone, Integer code) {
long phoneNumber = NumberUtil.parseLong(phone);
PhoneNumber number = new PhoneNumber();
number.setCountryCode(code);
number.setNationalNumber(phoneNumber);
return geocoder.getDescriptionForNumber(number, Locale.CHINESE);
}
/**
* 获取手机号码归属地
*/
public static String getAscription(String phone) {
return getAscription(phone, CHINA_CODE);
}
/**
* 获取手机号码运营商
*/
public static String getOperator(String phone, Integer code) {
long phoneNumber = NumberUtil.parseLong(phone);
PhoneNumber number = new PhoneNumber();
number.setCountryCode(code);
number.setNationalNumber(phoneNumber);
//返回结果只有英文,自己转成成中文
String operatorEn = carrierMapper.getNameForNumber(number, Locale.ENGLISH);
String operatorZh = "";
switch (operatorEn) {
case "China Telecom":
operatorZh += "电信";
break;
case "China Unicom":
operatorZh += "联通";
break;
case "China Mobile":
operatorZh += "移动";
break;
default:
break;
}
return operatorZh;
}
/**
* 获取手机号码运营商
*/
public static String getOperator(String phone) {
return getOperator(phone, CHINA_CODE);
}
}
引入Controller
/**
* 获取手机运营商
*/
@PostMapping("/operators")
public AjaxResult getOperators(@RequestBody WapOperatorsDto dto)
{
List<String> phones = dto.getPhones();
List<WapOperatorsVo> wapOperatorsVos = new ArrayList<>();
for (String phone : phones) {
WapOperatorsVo wapOperatorsVo = new WapOperatorsVo();
String operator = PhoneUtil.getOperator(phone);
wapOperatorsVo.setPhone(phone);
wapOperatorsVo.setOperators(operator);
wapOperatorsVos.add(wapOperatorsVo);
}
return AjaxResult.success(wapOperatorsVos);
}
传入参数
public class WapOperatorsDto implements Serializable
{
private static final long serialVersionUID = 1L;
/** 手机号 */
private List<String> phones;
public List<String> getPhones() {
return phones;
}
public void setPhones(List<String> phones) {
this.phones = phones;
}
}
返回数据
public class WapOperatorsVo implements Serializable
{
private static final long serialVersionUID = 1L;
/** 手机号 */
private String phone;
/** 运营商 */
private String operators;
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getOperators() {
return operators;
}
public void setOperators(String operators) {
this.operators = operators;
}
}
如果获取手机号报错,可以重启idea,或者更换依赖版本,重新引入