我正在尝试实施随机数生成器系统;本质上我正在读取SHA1哈希值,然后将其转换为BigInteger值:
String start = "abc";
String hash = utils.SHA1(start); //Generates an SHA1 hash of the string
byte[] bytes = hash.getBytes();
BigInteger big = new BigInteger(bytes);
此代码生成一个值为:
的BigInteger811203900027758629330492243480887228261034167773619203962320290854945165232584286910163772258660
我需要以某种方式做什么(这是我感到困惑的地方),将这个数字减少到一个更短的数字,并带有固定的小数位数。
使用模块化算法和Java Math API函数的组合,有一种合理的方法可将此数字减少为3位数。或者我选择的任何其他长度。
目前我只是简单地将这个庞大的数字转换为String,然后获取我想要的数字长度的子字符串。但是我对此并不完全满意,因为我得到的数字不是随机的,因为范围有点受限于3位数。
这样做的全部目的是将新生成的随机x位数转换为使用36的基数的字符串,以包含ASCII字母字符。
非常感谢任何信息或建议。
谢谢!
答案 0 :(得分:1)
是的,您可以使用模数.mod(1000)
或基数为36 .mod(36*36*36)
或甚至是普通.longValue() % 1000
或.longValue() % (36*36*36)
您可以使用Long.toString(x, 10)
或Long.toString(x, 36)
如果不给你答案,我不确定能说些什么。