com.biz.common.random.PhoneNumberUtils Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of biz-all Show documentation
Show all versions of biz-all Show documentation
BizX 是一个灵活而高效的业务开发框架, 其中也有很多为业务开发所需要的工具类的提供。
The newest version!
package com.biz.common.random;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
/**
* {@code PhoneNumberUtils}类提供了生成随机手机号码的功能,支持中国移动、中国联通和中国电信三大运营商的号码生成。
* 该类为不可实例化的工具类,所有方法均为静态方法。
*
* 主要功能包括:
*
* - 根据指定的运营商生成随机的手机号码。
* - 提供了获取运营商相关信息的方法。
*
*
* 示例用法:
* {@code
* String phoneNumber = PhoneNumberUtils.createPhoneNumber(PhoneNumberUtils.OperatorEnum.CHINA_MOBILE);
* System.out.println("生成的手机号码: " + phoneNumber);
* }
*
* @author francis
* @since 1.0.1
* @version 1.0.1
*/
public final class PhoneNumberUtils {
/**
* 中国移动的号段数组。
*/
private static final String[] CHINA_MOBILE = {
"134", "135", "136", "137", "138", "139", "150", "151", "152", "157", "158", "159",
"182", "183", "184", "187", "188", "178", "147", "172", "198"
};
/**
* 中国联通的号段数组。
*/
private static final String[] CHINA_UNICOM = {"130", "131", "132", "145", "155", "156", "166", "171", "175", "176", "185", "186", "166"};
/**
* 中国电信的号段数组。
*/
private static final String[] CHINA_TELECOM = {"133", "149", "153", "173", "177", "180", "181", "189", "199"};
/**
* 手机号码的后8位随机数字生成位数。
*/
private static final int RANDOM_MOBILE_SUFFIX = 8;
/**
* 运营商前缀代码与号段数组的映射。
*/
private static final Map OPERATOR_PREFIX_MAP = new HashMap<>();
/**
* 运营商代码与枚举值的映射。
*/
private static final Map CODE_TO_ENUM_MAP = new HashMap<>();
/**
* 运营商代码与名称的映射。
*/
private static final Map CODE_TO_NAME_MAP = new HashMap<>();
/**
* 静态初始化块,填充映射表。
* 将运营商的代码与其相应的号段、枚举值、名称进行映射。
*/
static {
OPERATOR_PREFIX_MAP.put(0, CHINA_MOBILE);
OPERATOR_PREFIX_MAP.put(1, CHINA_UNICOM);
OPERATOR_PREFIX_MAP.put(2, CHINA_TELECOM);
for (OperatorEnum operator : OperatorEnum.values()) {
CODE_TO_ENUM_MAP.put(operator.code, operator);
CODE_TO_NAME_MAP.put(operator.code, operator.name);
}
}
/**
* 根据指定运营商生成一个随机的手机号码。
*
* @param operator 运营商枚举,指定生成哪个运营商的号码。
* @return 生成的11位手机号码。
* @throws IllegalArgumentException 如果运营商为null,则抛出此异常。
*/
public static String createPhoneNumber(OperatorEnum operator) {
if (operator == null) {
throw new IllegalArgumentException("运营商不能为空");
}
StringBuilder builder = new StringBuilder();
builder.append(getRandomMobilePrefix(operator));
for (int i = 0; i < RANDOM_MOBILE_SUFFIX; i++) {
builder.append(RandomUtils.generateNumber(10));
}
return builder.toString();
}
/**
* 根据运营商获取随机的手机号码前缀。
*
* @param operator 运营商枚举。
* @return 随机的手机号码前缀。
* @throws IllegalArgumentException 如果指定的运营商无效,则抛出此异常。
*/
private static String getRandomMobilePrefix(OperatorEnum operator) {
String[] prefixes = OPERATOR_PREFIX_MAP.get(operator.code);
if (prefixes == null) {
throw new IllegalArgumentException("无效的运营商!");
}
return prefixes[RandomUtils.generateNumber(prefixes.length)];
}
/**
* 运营商枚举,定义了三大运营商及其代码。
* 提供了获取运营商名称和枚举值的方法。
*
* @see PhoneNumberUtils#createPhoneNumber(OperatorEnum)
*/
@Getter
@AllArgsConstructor
public enum OperatorEnum {
/**
* 中国移动。
*/
CHINA_MOBILE(0, "中国移动"),
/**
* 中国联通。
*/
CHINA_UNICOM(1, "中国联通"),
/**
* 中国电信。
*/
CHINA_TELECOM(2, "中国电信");
/**
* 运营商代码。
*/
private final Integer code;
/**
* 运营商名称。
*/
private final String name;
/**
* 根据运营商代码获取运营商名称。
*
* @param code 运营商代码。
* @return 运营商名称,如果代码无效则返回null。
*/
public static String getOperateNameByCode(Integer code) {
return Optional.ofNullable(CODE_TO_NAME_MAP.get(code)).orElse(null);
}
/**
* 根据运营商代码获取运营商枚举值。
*
* @param code 运营商代码。
* @return 运营商枚举值,如果代码无效则返回null。
*/
public static OperatorEnum getOperateByCode(Integer code) {
return Optional.ofNullable(CODE_TO_ENUM_MAP.get(code)).orElse(null);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy