php - 为什么 rand() 不是真正随机的?

标签 php random gd

我想在图像上放置随机点(太空中的星星用于一些有趣的小项目)

我有这个简单的脚本。

<?php
$gd = imagecreatetruecolor(1000, 1000);
$white = imagecolorallocate($gd, 255, 255, 255);

for ($i = 0; $i < 100000; $i++) 
{
    $x = rand(1,1000);
    $y = rand(1,1000);

    imagesetpixel($gd, round($x),round($y), $white);
}

header('Content-Type: image/png');
imagepng($gd);
?>

请记住,这只是为了测试,这就是为什么我将 100000 放入 for 循环中,以便它显示我注意到出现的模式。我们有 100 万像素可供使用,仍然是随机的 X 和 Y 创建此图案: enter image description here

所以它远非随机。我知道 rand 不是真正随机的,这就是为什么它不适合密码学。但我没有找到有关它如何工作以及我应该如何避免这种模式的信息。

最佳答案

线性同余随机数生成器(这是 PHP rand 使用的)将始终在 x-y 图上显示自相关效应。

使用 mt_rand 会得到更好的结果。这是一个 Mersenne Twister 发生器。

关于php - 为什么 rand() 不是真正随机的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31675295/

相关文章:

php - 重构基于 PHP 的 IP 过滤器以与 IPv6 配合使用

c++ - 为什么 rand()/double(RAND_MAX) 的第一个结果不是随机的

php - 如何计算与给定序列 (A) 具有给定相关性的随机值序列 (B)

php - 使用php将html文本转换为图像

php imagecolorat 返回 0。为什么?

php - 除了sql注入(inject)还有什么?

php - Sage One API - unsupported_grant_type

php - 将使用循环创建的数组附加到另​​一个数组

java - 我有时会出错,有时不会?

PHP/GD 使用 imagecreatetruecolor() 而不是 imagecreate() 呈现黑色图像