RandomHelper.java 3.17 KB
package com.yanzuoguang.util.helper;

import com.yanzuoguang.util.contants.SystemContants;

import java.util.Random;
import java.util.UUID;

/**
 * 随机码生成工具
 *
 * @author 颜佐光
 */
public final class RandomHelper {

    public static final String NUMBER = "0123456789";

    public static final String LOWER_LETTER = "abcdefghijklmnopqrstuvwxyz";

    public static final String UPPER_LETTER = LOWER_LETTER.toUpperCase();

    private static final String RANDOM_CHARSET = NUMBER + LOWER_LETTER + UPPER_LETTER;

    private static final int RANDOM_CHARSET_LEN = RANDOM_CHARSET.length();

    private static final int RANDOM_SIZE = 6;

    /**
     * 得到32位随机码
     *
     * @return
     */
    public static String generateUUID32() {
        return replace(UUID.randomUUID().toString(), SystemContants.TRANSVERSE, SystemContants.EMPTY);
    }

    /**
     * 得到64位随机码
     *
     * @return
     */
    public static String generateUUID64() {
        return generateUUID32() + generateUUID32();
    }

    /**
     * 随机码(6位)
     *
     * @return
     */
    public static String generateRandomCodeSix() {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < RANDOM_SIZE; i++) {
            sb.append(generateRandomCodeOne(RANDOM_CHARSET, RANDOM_CHARSET_LEN));
        }
        return sb.toString();
    }

    /**
     * 随机码(指定长度)
     *
     * @param len 随机码长度
     * @return
     */
    public static String generateRandomCodeSix(int len) {
        if (len < 1) {
            throw new RuntimeException("length params is error, must be greater than 0, this params is [" + len + "]");
        }

        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < len; i++) {
            sb.append(generateRandomCodeOne(RANDOM_CHARSET, RANDOM_CHARSET_LEN));
        }
        return sb.toString();
    }

    /**
     * 随机生成指定字符集、指定长度的的随机码
     *
     * @param charset 基础字符集
     * @param len     生成随机码长度
     * @return
     */
    public static String generateRandomCode(String charset, int len) {
        if (null == charset || "".equals(charset)) {
            throw new RuntimeException("random code, essential data is empty.");
        }

        if (len < 1) {
            throw new RuntimeException("length params is error, must be greater than 0, this params is [" + len + "]");
        }

        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < len; i++) {
            sb.append(generateRandomCodeOne(charset, charset.length()));
        }
        return sb.toString();
    }

    /**
     * 指定字符集中,随机产生一个字符
     *
     * @param charset
     * @param len
     * @return
     */
    private static String generateRandomCodeOne(String charset, int len) {
        int index = new Random().nextInt(len);
        return String.valueOf(charset.charAt(index));
    }

    private static String replace(String str, String olds, String news) {
        if (null == str) {
            return "";
        }
        while (str.indexOf(olds) > -1) {
            str = str.replace(olds, news);
        }
        return str;
    }
}