Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中生成一个随机的、固定长度的BigInteger_Java_Random_Biginteger - Fatal编程技术网

在Java中生成一个随机的、固定长度的BigInteger

在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

我试图在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);
        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不知什么原因,我没有回答这个问题的选项-可能是因为它被标记为重复?