All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.biz.common.random.PhoneNumberUtils Maven / Gradle / Ivy

Go to download

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