一 随机数的定义
在信息学中,随机数的定义如下:
随机性——不存在统计学偏差,是完全杂乱的数列。
不可预测性——不能通过过去的数列推测出下一个出现的数。
不可重现性——除非将数列本身保存下来,否则不能重现相同的数列。
随机数可能在统计上呈现出某种规律。
在工程上,主要是用到了随机数的两个特性。
1 不可预测性
2 均匀获取数字(在大量随机统计时,每个数出现的期望相同)
在安全相关场景中,用到的是随机数的不可预测性。例如,生成秘钥、验证码等场景,让黑客不能找到生成的规律。
在抽奖、负载均衡等场景中,在统计随机数时,每个随机数出现的次数的期望都很接近,结果是公平的。
二 随机数的生成方法
在计算机领域主要有两种方法:线性同余算法和硬件设备随机数生成器。
1 线性同余算法
a 代码
// 构造函数可设置种子
public Random(long seed) {
if (getClass() == Random.class)
this.seed = new AtomicLong(initialScramble(seed));
else {
// subclass might have overriden setSeed
this.seed = new AtomicLong();
setSeed(seed);
}
}
// 随机数生成函数
public int nextInt(int bound) {
if (bound <= 0)
throw new Ill