关于java:生成5位的随机引脚

Generating a Random Pin of 5 Digits

我想根据我在Stack Overflow上发现的随机数生成Unique Pins如何生成一个随机的五位数Java。 该问题使用时间来生成数字,因此您可以获得大量重复项。

这是我的代码

1
2
3
4
5
6
7
8
9
public int createRandomPin() {
    int k = random.nextInt(Integer.SIZE);
    k = (k + 1) * 9999;
    if (9999 > k || k > 99999) {
        //then regenerate
    } else {
        return k;
    }
}

我的问题

然后,NetBeans会发出错误"返回"的警告。 我还需要重新构造代码,这样如果它不是一个5位数的引脚,它会在"返回k"之前再次生成。


我建议使用SecureRandom类生成随机数,然后因为它需要5位数,使用random.nextInt(100000)创建0到99999之间的随机数,这里0是包含的,100000是独占的,然后将其格式化为5数字加零。

1
2
3
4
SecureRandom random = new SecureRandom();
int num = random.nextInt(100000);
String formatted = String.format("%05d", num);
System.out.println(formatted);

我希望这能解决你的问题

编辑:这篇文章错误地说10,000,已编辑说100,000


Integer.SIZE产生int数据类型的位数。这与随机值的范围跨度无关。

使用它作为Random.nextInt的参数没有任何意义(实际上它在范围[0,32)中生成随机值)。

只需生成一个int value = random.nextInt(100000),即可获得[0,99999]中的值。

现在你对5位数字引脚的定义不准确,40可以解释为00040,所以如果你填充它仍然是5位数。你必须考虑到这一点,因为强制5个"可见"数字意味着生成范围[10000,99999]的数字,但这只是一个尴尬的解决方案。


来自apache common lang3的RandomUtils.randomNumeric(int count)RandomUtils.randomNumeric(int inLength, int maxLength)也可用于相同的目的。