dev.to | 📄 原文链接 | 2026-09-01 收录

Laravel 里的真随机:一个取模偏差让 22 张牌多出 33% 的出场率

来源:dev.to — 2026-09-01

📋 概述

作者用一句看似无害的 PHP 代码揭示了取模偏差的致命之处:ord(random_bytes(1)) % 78 虽然永远返回 0 到 77 的合法值、任何常规测试都通过,但 256 不是 78 的倍数,多出的 22 个字节会回绕,导致 22 张牌比另外 56 张多出现 33%——在生产环境里静默运行。解法是拒绝采样:丢弃落在不均匀尾部的字节重新抽取。洗牌算法同样藏有 nⁿ/n! 版本的同类偏差。作者还分享了自己把随机数来源做成可配置链(ANU 量子、random.org、系统 CSPRNG)的 lararand 包,因为"我们调用了 random_int"这句话不足以卖给客户。

🔑 核心要点

💡 金句

'我们的彩票运行在澳大利亚国立大学测得的量子真空噪声上'是能对客户说的话;'我们调用了 random_int'不是——尽管它在技术上更正确。
← 返回 dev.to 首页