3

我一直在使用RandomStringUtils生成随机 ID 作为数据库密钥:

import org.apache.commons.lang.RandomStringUtils;
public class RandomStringTest {
    public static void main(final String[] args) {
        for (int i = 0; i <= 10; i++) {
            final String id = RandomStringUtils.random(8,
                    "0123456789abcdefghijklmnopqrstuvwxyz");
            System.out.println(id);
        }
    }
}

密钥空间足够大,

len("0123456789abcdefghijklmnopqrstuvwxyz")^8 = 2821109907456 ≃ 10^12

随机机制是否正确播种?在将其应用于生产之前,我需要知道密钥是否已正确分配。

顺便说一句,测试代码在执行几次时没有显示重复,但这远非可靠的证据。

4

2 回答 2

4

我发现的实现中没有提供种子,只有一个new Random(). 但是有一种方法可以让您提供自己的随机源

random(int count, int start, int end, 
        boolean letters, boolean numbers, 
        char[] chars, java.util.Random random)
于 2012-06-27T15:01:34.217 回答
0

您不应该使用随机生成器来生成唯一密钥。没有什么能保证唯一性。为什么不使用 UUID 生成器或数据库序列?

为什么要正确分配密钥?主键唯一重要的是它的唯一性。并且种子对分布没有任何影响,AFAIK。

于 2012-06-27T15:03:02.420 回答