Java 生成5位数字的随机Pin码

Java 生成5位数字的随机Pin码,java,Java,我想根据我在堆栈溢出中发现的随机数生成唯一的管脚。这个问题需要时间来生成数字,所以你会得到很多重复的数字 这是我的密码 public int createRandomPin() { int k = random.nextInt(Integer.SIZE); k = (k + 1) * 9999; if (9999 > k || k > 99999) { //then regenerate } else { return

我想根据我在堆栈溢出中发现的随机数生成唯一的管脚。这个问题需要时间来生成数字,所以你会得到很多重复的数字

这是我的密码

public int createRandomPin() {
    int k = random.nextInt(Integer.SIZE);
    k = (k + 1) * 9999;
    if (9999 > k || k > 99999) {
        //then regenerate 
    } else {
        return k;
    }
}
我的问题


Java编译器然后给出一个缺少“return”的警告。此外,我还需要重新构造代码,以便如果它不是一个5位数的pin码,它会在“返回k”之前再次生成。

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

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

只需生成一个int
value=random.nextInt(100000)
就可以在
[099999]
中获得一个值


现在,您对5位pin的定义不准确,
40
可能被解释为
00040
,因此如果您填充它,它仍然是5位。您必须考虑这一点,因为强制5位“可见”数字意味着生成范围内的数字
[1000099999]
但这只是一个笨拙的解决方案。

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

SecureRandom random = new SecureRandom();
int num = random.nextInt(100000);
String formatted = String.format("%05d", num); 
System.out.println(formatted);
我希望这能解决你的问题


编辑:这篇文章错误地说是10000,被编辑成100000来自apache common lang3的也可以用于相同的目的。

如果使用String.format,则每次都会得到5位数字,即如果数字的位数少于5位,则会追加零。我已经尝试了您生成管脚的方法,比其他方法好得多。我需要添加一些可以测试p如果不是,它将重新生成。否则它将返回它。@在我的情况下,生成的用户数字将是5位数字,因为如果小于5位数字,“0”将被填充。