PHP伪随机数生成器

时间:2018-06-19 00:24:50

标签: javascript php

我在我的javascript代码中使用线性指数生成器,但现在我需要验证结果服务器端(从同一种子生成相同的数字)。我已经在PHP中翻译了我的javascript代码,但它没有按预期工作。前几个数字接近于javascript,但精度较低,序列包含一些负数,这些数字在javascript版本中不存在。我认为这是因为PHP有​​不同的浮点精度,但我对负数感到困惑。

如果在PHP中没有简单的方法可以使用其他方法在javascript和PHP中生成相同的伪随机数序列吗?

的Javascript

function SeededRandom(newSeed) {
    this.seed = newSeed;
    this.Random = function (min, max) {
        this.seed = (this.seed * 9301 + 49297) % 233280;
        return Math.floor(min + (this.seed / 233280) * (max - min + 1));
    }
}

PHP

class SeededRandom {
    private $seed;
    public function __construct($newSeed) {
        $this->seed = $newSeed;
    }
    public function Random($min, $max) {
        $this->seed = ($this->seed * 9301 + 49297) % 233280;
        return floor($min + ($this->seed / 233280) * ($max - $min + 1));
    }
}

1 个答案:

答案 0 :(得分:0)

知道了!使用这些数字,它可以在javascript和PHP中使用。

function SeededRandom2(newSeed) {
    this.seed = newSeed;
    this.Random = function () {
        this.seed = (this.seed * 20077 + 12345) % 32768;
        return this.seed;
    }
}

负数可能是由整数溢出引起的,javascript和PHP数字之间的差异是由除法引起的。

我在这个问题的答案中找到了这个版本:Was there a a time when PHP's rand() function was used as an exploit?