在Java中生成一个随机的、固定长度的BigInteger
我试图在Java中生成一个随机的20位在Java中生成一个随机的、固定长度的BigInteger,java,random,biginteger,Java,Random,Biginteger,我试图在Java中生成一个随机的20位biginger 到目前为止,我已经能够生成一个固定长度的十六进制值 // generate a user-specified number of random bytes public void getRandomNumber(int count) { byte[] bytes = new byte[count]; new SecureRandom().nextBytes(bytes); S
biginger
到目前为止,我已经能够生成一个固定长度的十六进制值
// generate a user-specified number of random bytes
public void getRandomNumber(int count) {
byte[] bytes = new byte[count];
new SecureRandom().nextBytes(bytes);
String random = new String(Hex.encode(bytes));
System.out.println(random);
}
这是固定长度十六进制生成的理想选择。但我很难找到一种有效的方法来实现十进制表示;从十六进制转换为BigInteger(hexValue,16)
时,长度会有所不同
我曾考虑过通过设置上限和下限,或者生成足够大的内容并修剪到所需的长度来尝试这种方法,但这些方法感觉不太干净
编辑:我提出的解决方案在我的程序中运行良好:
// generate a random number with specified bit length
public void getTokenID() {
int count = 64;
SecureRandom rnd = new SecureRandom();
BigInteger randomCountLength;
String token;
do {
randomCountLength = new BigInteger(count, rnd);
token = randomCountLength.toString();
} while (token.length() != 20);
Tid = token;
}
据我所知,您的问题是生成具有固定长度(固定位数)的随机数 很明显,使用十六进制值是可行的,因为任何十六进制数字都代表4个字节。因此,当您固定字节的长度(代码中的字节表)时,它工作得很好 在处理十进制数时,我建议您: 1-有生成上下限随机数的方法,例如5到10之间的随机数,因此如果您想要一个20位数的随机数,您必须生成(10^19)到(10^20-1)之间的随机数
2-第二种是硬编码方法,当您生成随机数字(0到9之间,强权重的数字必须在1到9之间除外)并获得数字时,循环20次。当您说20位时,是指十进制、十六进制还是二进制数字?@ArtjomB。对不起,我是说十进制数字。我想我已经找到了解决问题的方法——虽然这可能不是最有效的方法,但我会将它添加到我的帖子中。@lb-99发布一个比在帖子中编辑答案更好的方法。这使得事情清晰而独立,让人们和其他人一起投票决定答案——这可能不是最好的解决方案。谢谢。@ggorlen不知什么原因,我没有回答这个问题的选项-可能是因为它被标记为重复?