Java生成手机号码


前言

在项目开发中,遇到了一个需求就是随机生成电话号码(中国地区),将实现过程进行记录。


提示:以下是本篇文章正文内容,下面案例可供参考

一、实现代码

在实际项目中我为了便于分层维护,因此代码中会出现枚举,枚举类对当前工具类的核心代码无影响,读者可以根据自己的需求来决定是否使用枚举。同时为了提高代码的简洁性与可读性,在项目我也引入了Lombok工具包。

1. 运营商枚举

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 运营商枚举
 *
 * @author zhangrongkang
 * @since 2023/4/2
 */
@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 运营商名称
     */
    public static String getOperateNameByCode(Integer code) {
    
    
        // 循环遍历所有枚举
        for (OperatorEnum value : OperatorEnum.values()) {
    
    
            // 返回当前运营商名称
            if (value.code.equals(code)) {
    
    
                return value.name;
            }
        }
        return null;
    }
}

2. 手机号码工具类

import com.zrkizzy.seckill.enums.OperatorEnum;
import java.util.Random;

/**
 * 随机生成电话号码工具类
 *
 * @author zhangrongkang
 * @since 2023/4/2
 */
public class PhoneNumberUtil {
    
    

    /**
     * 中国移动
     */
    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"};

    /**
     * 生成手机号方法
     *
     * @param operator 运营商识别码
     */
    public static String createPhoneNumber(int operator) {
    
    
        // 定义随机数对象
        Random random = new Random();
        // 定义StringBuilder对象用于存储生成的手机号
        StringBuilder builder = new StringBuilder();
        // 手机号前三位
        String mobilePrefix = null;
        // 随机生成指定运营商中的手机前三位
        mobilePrefix = switch (operator) {
    
    
            // 中国移动
            case 0 -> CHINA_MOBILE[random.nextInt(CHINA_MOBILE.length)];
            // 中国联通
            case 1 -> CHINA_UNICOM[random.nextInt(CHINA_UNICOM.length)];
            // 中国电信
            case 2 -> CHINA_TELECOM[random.nextInt(CHINA_TELECOM.length)];
            default -> "运营商错误";
        };
        // 拼接手机号前三位
        builder.append(mobilePrefix);
        // 定义辅助变量用于手机号后八位的生成
        int temp;
        // 生成手机号后8位
        for (int i = 0; i < 8; i++) {
    
    
            // 随机生成一个 [0, 9] 以内的整数
            temp = random.nextInt(10);
            // 拼接当前随机数
            builder.append(temp);
        }
        // 将生成的电话号码返回
        return builder.toString();
    }

    public static void main(String[] args) {
    
    
        Random random = new Random();
        for (int i = 1; i <= 10; i++) {
    
    
            // 随机运营商识别码
            int code = random.nextInt(3);
            System.out.println(OperatorEnum.getOperateNameByCode(code) + ": " +createPhoneNumber(code));
        }
    }
}

二、运行结果

这里随机生成10个电话号码,运营商随机
在这里插入图片描述


总结

以上就是在Java中生成手机号码的一个工具类,实现逻辑相对简单,将三大运营商的电话号码前缀集合作为成员属性,接着对手机号的后八位的每一位都进行随机的生成再拼接。但是我这样的生成方法存在的问题是无法确保不会生成重复的手机号码,虽然只是重复的概率比较小,如果有大佬有更好的方法和逻辑欢迎在评论区留言,与大佬一起进步!


修改时间 修改内容
2023/04/03 将运营商的访问权限修饰符由public改为private

猜你喜欢

转载自blog.csdn.net/qq_48455576/article/details/129919791