偏见的定义是什么:
当max超过2 ^ 32时,mt_rand()返回值的分布在PHP的64位版本上偏向偶数。
如果这是替代四舍五入规则中的那种偏见,我认为这并不重要(因为这种偏见并不明显)。
除了mt_rand()被宣称是比快四倍rand(),只是在前面增加3个字符!
mt_rand()
rand()
假设mt_rand可用,那么使用它的缺点是什么?
mt_rand
mt_rand使用梅森倍捻机算法,这远远优于LCG通常使用的rand。例如,LCG 的周期仅为 2 32,而mt_rand的周期为2 19937-1。此外,当绘制到多维空间中时,LCG生成的所有值都将位于线或平面上。而且,不仅在实践上可行,而且相对容易地确定LCG的参数。LCG的唯一优势是可能稍快一些,但是在使用php进行编码时,规模是完全不相关的。
rand
但是,mt_rand它 也不适合用于加密目的 (生成令牌,密码或加密密钥)。
如果需要加密随机性,请random_int在php7中使用。在较早的php版本上,请从符合POSIX的操作系统上阅读/dev/urandom或/dev/random在其上阅读。
random_int
/dev/urandom
/dev/random