截止2022年2月份中国大陆四家运营商以及虚拟运营商手机号码段如下:
中国移动发布的号码段为:134(0-8),135,136,137,138,139,147,148,150,151,152,157,
158,159,172,178,182,183,184,187,188,195,197,198,1440,1703,1705,1706
中国联通发布的号码段为:130,131,132,140,145,146,155,156,166,185,186,171,175,
176,196,1704,1707,1708,1709
中国电信发布的号码段为:133,149,153,177,173,180,181,189,190,191,193,199,1349,
1410,1700,1701,1702
中国广电发布的号码段为:192
2、号码段对应的正则表达式虚拟运营商发布的号码段为:162,165,167,170,171
对应的正则表达式如下:
private static final String CHINA_MOBILE_PATTERN = "(?:^(?:\+86)?1(?:34[0-8]|3[5-9]|4[78]|5[0-27-9]|7[28]|8[2-478]|9[578])\d{8}$)|(?:^(?:\+86)?1440\d{7}$)|(?:^(?:\+86)?170[356]\d{7}$)";
private static final String CHINA_UNICOM_PATTERN = "(?:^(?:\+86)?1(?:3[0-2]|4[056]|5[56]|66|7[156]|8[56]|96)\d{8}$)|(?:^(?:\+86)?170[47-9]\d{7}$)";
private static final String CHINA_TELECOM_PATTERN = "(?:^(?:\+86)?1(?:33|49|53|7[37]|8[019]|9[0139])\d{8}$)|(?:^(?:\+86)?1349\d{7}$)|(?:^(?:\+86)?1410\d{7}$)|(?:^(?:\+86)?170[0-2]\d{7}$)";
private static final String CHINA_PATTERN = "(?:^(?:\+86)?1(?:3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$)";
3、使用正则进行手机号码校验
3.1、中国移动手机号码校验
判断手机号码是否属于中国移动
public static boolean checkChinaMobile(String mobile) {
if (StringUtils.checkStr(mobile)) {
Pattern regexp = Pattern.compile(CHINA_MOBILE_PATTERN);
return regexp.matcher(mobile).matches();
}
return false;
}
3.2、中国联通手机号码校验
判断手机号码是否属于中国联通
public static boolean checkChinaUnicom(String mobile) {
if (StringUtils.isNotBlank(mobile)) {
Pattern regexp = Pattern.compile(CHINA_UNICOM_PATTERN);
return regexp.matcher(mobile).matches();
}
return false;
}
3.3、中国电信手机号码校验
判断手机号码是否属于中国电信
public static boolean checkChinaTelecom(String mobile) {
if (StringUtils.isNotBlank(mobile)) {
Pattern regexp = Pattern.compile(CHINA_TELECOM_PATTERN);
return regexp.matcher(mobile).matches();
}
return false;
}
3.4、中国大陆手机号码校验
判断手机号码是否属于中国大陆四家运营商或虚拟运营商的手机号码
public static boolean checkChineseMobile(String mobile) {
Pattern regexp = Pattern.compile(CHINA_PATTERN);
return regexp.matcher(mobile).matches();
}
4、获取手机号码属于运营商
传入手机号码,返回手机所属的运营商。
public static String checkMobileBelong(String mobile) {
if (!checkChineseMobile(mobile))
return null;
if (checkChinaMobile(mobile))
return CHINA_MOBILE_NAME;
if (checkChinaUnicom(mobile))
return CHINA_UNICOM_NAME;
if (checkChinaTelecom(mobile))
return CHINA_TELECOM_NAME;
return null;
}
5、工具类代码集合
工具类代码集合如下,可以拷贝到idea中直接使用。
import java.util.regex.Pattern;
public class MobileUtils {
private static final String CHINA_MOBILE_PATTERN = "(?:^(?:\+86)?1(?:34[0-8]|3[5-9]|4[78]|5[0-27-9]|7[28]|8[2-478]|9[578])\d{8}$)|(?:^(?:\+86)?1440\d{7}$)|(?:^(?:\+86)?170[356]\d{7}$)";
private static final String CHINA_UNICOM_PATTERN = "(?:^(?:\+86)?1(?:3[0-2]|4[056]|5[56]|66|7[156]|8[56]|96)\d{8}$)|(?:^(?:\+86)?170[47-9]\d{7}$)";
private static final String CHINA_TELECOM_PATTERN = "(?:^(?:\+86)?1(?:33|49|53|7[37]|8[019]|9[0139])\d{8}$)|(?:^(?:\+86)?1349\d{7}$)|(?:^(?:\+86)?1410\d{7}$)|(?:^(?:\+86)?170[0-2]\d{7}$)";
private static final String CHINA_PATTERN = "(?:^(?:\+86)?1(?:3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$)";
private static final String CHINA_MOBILE_NAME = "中国移动";
private static final String CHINA_UNICOM_NAME = "中国联通";
private static final String CHINA_TELECOM_NAME = "中国电信";
public static boolean checkChineseMobile(String mobile) {
Pattern regexp = Pattern.compile(CHINA_PATTERN);
return regexp.matcher(mobile).matches();
}
public static boolean checkChinaMobile(String mobile) {
if (StringUtils.checkStr(mobile)) {
Pattern regexp = Pattern.compile(CHINA_MOBILE_PATTERN);
return regexp.matcher(mobile).matches();
}
return false;
}
public static boolean checkChinaUnicom(String mobile) {
if (StringUtils.isNotBlank(mobile)) {
Pattern regexp = Pattern.compile(CHINA_UNICOM_PATTERN);
return regexp.matcher(mobile).matches();
}
return false;
}
public static boolean checkChinaTelecom(String mobile) {
if (StringUtils.isNotBlank(mobile)) {
Pattern regexp = Pattern.compile(CHINA_TELECOM_PATTERN);
return regexp.matcher(mobile).matches();
}
return false;
}
public static String checkMobileBelong(String mobile) {
if (!checkChineseMobile(mobile))
return null;
if (checkChinaMobile(mobile))
return CHINA_MOBILE_NAME;
if (checkChinaUnicom(mobile))
return CHINA_UNICOM_NAME;
if (checkChinaTelecom(mobile))
return CHINA_TELECOM_NAME;
return null;
}
}



