RandomHelper.java 2.82 KB
Newer Older
yanzg's avatar
yanzg committed
1 2
package com.yanzuoguang.util.helper;

gongzuquan's avatar
gongzuquan committed
3
import com.yanzuoguang.util.YzgError;
yanzg's avatar
yanzg committed
4 5
import com.yanzuoguang.util.contants.SystemContants;

yanzg's avatar
yanzg committed
6
import java.util.Random;
yanzg's avatar
yanzg committed
7 8 9 10
import java.util.UUID;

/**
 * 随机码生成工具
yanzg's avatar
yanzg committed
11
 *
yanzg's avatar
yanzg committed
12
 * @author 颜佐光
yanzg's avatar
yanzg committed
13 14 15 16 17 18 19 20 21 22 23 24 25
 */
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();

yanzg's avatar
yanzg committed
26 27
    private static final int RANDOM_SIZE = 6;

yanzg's avatar
yanzg committed
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
    /**
     * 得到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();
yanzg's avatar
yanzg committed
53
        for (int i = 0; i < RANDOM_SIZE; i++) {
yanzg's avatar
yanzg committed
54 55 56 57 58 59 60 61 62 63 64 65
            sb.append(generateRandomCodeOne(RANDOM_CHARSET, RANDOM_CHARSET_LEN));
        }
        return sb.toString();
    }

    /**
     * 随机码(指定长度)
     *
     * @param len 随机码长度
     * @return
     */
    public static String generateRandomCodeSix(int len) {
yanzg's avatar
yanzg committed
66
        return generateRandomCode(RANDOM_CHARSET, len);
yanzg's avatar
yanzg committed
67 68 69 70 71 72
    }

    /**
     * 随机生成指定字符集、指定长度的的随机码
     *
     * @param charset 基础字符集
yanzg's avatar
yanzg committed
73
     * @param len     生成随机码长度
yanzg's avatar
yanzg committed
74 75 76 77
     * @return
     */
    public static String generateRandomCode(String charset, int len) {
        if (null == charset || "".equals(charset)) {
gongzuquan's avatar
gongzuquan committed
78
            throw YzgError.getRuntimeException("016");
yanzg's avatar
yanzg committed
79 80 81
        }

        if (len < 1) {
yanzg's avatar
yanzg committed
82
            throw YzgError.getRuntimeException("015", len);
yanzg's avatar
yanzg committed
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
        }

        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) {
yanzg's avatar
yanzg committed
100
        int index = new Random().nextInt(len);
yanzg's avatar
yanzg committed
101 102 103 104
        return String.valueOf(charset.charAt(index));
    }

    private static String replace(String str, String olds, String news) {
yanzg's avatar
yanzg committed
105
        if (null == str) {
yanzg's avatar
yanzg committed
106 107 108 109 110 111 112 113
            return "";
        }
        while (str.indexOf(olds) > -1) {
            str = str.replace(olds, news);
        }
        return str;
    }
}