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

cn.jiangzeyin.RandomUtil Maven / Gradle / Ivy

package cn.jiangzeyin;

import java.security.SecureRandom;

/**
 * 随机数
 * Created by jiangzeyin on 2017/11/2.
 */
public final class RandomUtil {
    private static final SecureRandom random = new SecureRandom();
    private static byte[] seeds = random.generateSeed(20);
    private static final String base = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678";

    private static void seeds() {
        random.nextBytes(seeds);
        random.setSeed(seeds);
    }

    private RandomUtil() {
    }

    /**
     * 生成随机字符串
     * 

* 默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1 * * @param length 长度 * @return 结果 */ public static String getRandomString(int length) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < length; i++) { int number = random.nextInt(base.length()); sb.append(base.charAt(number)); } seeds(); return sb.toString(); } /** * 随机生成指定长度的int 类型数字 * * @param length 长度 * @return 结果 */ public static int getRandomCode(int length) { if (length <= 0) return 0; if (length >= 10) throw new IllegalArgumentException("result data out"); int min = length > 1 ? (int) Math.pow(10, length - 1) : 0; int max = (int) (Math.pow(10, length) - 1); return getRandom(min, max); } /** * 随机生成指定范围的随机数 * * @param min 最小值 * @param max 最大值 * @return 结果 */ public static int getRandom(int min, int max) { if (max < min) throw new IllegalArgumentException("max < min"); int val = random.nextInt(max) % (max - min + 1) + min; seeds(); return val; } /** * 随机获取数组中一个元素 * * @param objects 数组 * @param 泛型 * @return object */ public static T getRandomArray(T[] objects) { if (objects == null || objects.length < 1) throw new IllegalArgumentException("objects is null"); int index = random.nextInt(objects.length); seeds(); return objects[index]; } /** * 获取权重随机信息 * * @param weights 权重数组 * @return 返回随机结果后的下标 */ public static int getWeightRandom(int[] weights) { int weightSum = 0; for (int item : weights) { weightSum += item; } int n = random.nextInt(weightSum); // n in [0, weightSum) int m = 0; int result = 0; for (int i = 0, len = weights.length; i < len; i++) { int weight = weights[i]; if (m <= n && n < m + weight) { result = i; break; } m += weight; } seeds(); return result; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy