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)
范围内生成一个随机值)
只需生成一个intvalue=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”将被填充。