天天看點

随機碼(驗證碼、短信碼)生成工具類需求

随機碼(驗證碼、短信碼)生成工具類

  • 需求

需求

工作中有時需要使用驗證碼(随機碼)進行業務處理的情形,是以特意收集了開發中使用的工具,已被不時之需。

工具類代碼如下:

package com.cloud.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.logging.Logger;

/**
 * @author raos
 * @emil [email protected]
 * @date 2020/12/25
 * 随機碼/預約碼/短信碼生成工具類
 */
public class MateUtils {
    private static final Logger log = Logger.getLogger("MateUtils.class");
    /** 預約碼碼表 */
    private static final char[] CODE_TABLE= {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R',
            'S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9'};

    /** 随機碼預設位數-- 6位 */
    private static final int DEFAULT_DIGIT = 6;

    /** 預設随機碼個數-- 2個 */
    private static final int DEFAULT_NUMBER = 2;

    private MateUtils() { }

    /**  預設生成單個6位預約碼 */
    public static String generateOne() {
        StringBuilder strBuild = new StringBuilder();
        for (int i = 0; i <= DEFAULT_DIGIT; i++) {
            strBuild.append(CODE_TABLE[new Random().nextInt(36)]);
        }
        return strBuild.toString();
    }

    /**
     * 指定位數生成随機碼,位數需大于0,否則傳回預設6位随機碼
     * @param digit 随機碼的位數
     */
    public static String generateOne(int digit) {
        if (digit > 0) {
            StringBuilder strBuild = new StringBuilder();
            for (int i = 0; i <= digit; i++) {
                strBuild.append(CODE_TABLE[new Random().nextInt(36)]);
            }
            return strBuild.toString();
        }
        return generateOne();
    }

    /**
     * 預設生成 2個 6位随機碼
     */
    public static List<String> generateList() {
        List<String> randomCodes = new ArrayList<>(DEFAULT_NUMBER);
        for (int i = 0; i < DEFAULT_NUMBER; i++) {
            randomCodes.add(generateOne());
        }
        return randomCodes;
    }

    /**
     * 指定生成随機碼個數、位數生成随機碼,位數需大于0,否則傳回預設6位随機碼,個數需大于1,否則預設2個
     * @param number 随機碼生成個數
     * @param digit 随機碼位數  
     */
    public static List<String> generateList(int number, int digit) {
        if (number > 1) {
            List<String> randomCodes = new ArrayList<>(number);
            for (int i = 0; i < number; i++) {
                randomCodes.add(generateOne(digit));
            }
            return randomCodes;
        }
        return generateList();
    }

    /**
     * 測試入口
     */
    public static void main(String[] args) {
        log.info("循環開始" + System.currentTimeMillis());
        for (int i = 0; i < 100; i++) {
            System.out.println(generateOne());
        }
        log.info("循環結束" + System.currentTimeMillis());
    }
}