从何处开始
请阅读什么是随机数生成器:硬件、伪随机和密码学安全生成器,数字为何会重复,以及浏览器能提供什么。当您需要的是数字而不是解释时,随机数生成器可以在您的浏览器中按任意范围抽取数字,可选允许或不允许重复。
生成器在哪里悄悄出错
强大的随机源只完成了一半的工作。另一半是把它的原始值映射到您的范围内,而许多自制生成器正是在这里出错。对范围大小取模是显而易见的做法,但会带来细微的偏差:除非范围大小能整除随机源的输出空间,范围内最小的那些数字出现得会比其余数字略多。这一缺陷称为模偏差(modulo bias)。一种修正方法是拒绝采样(rejection sampling):丢弃落在不均匀尾部的值,重新抽取。我们的生成器正是这样做的,因此您范围内的每个数字在每次抽取中机会都相同。
同样的道理也排除了人们最先想到的捷径。Math.random() 对安全性不作任何承诺,电子表格函数 RAND() 和 RANDBETWEEN() 也属于同一类:粗略打乱顺序可以,用于任何可能有人质疑的场合则不行。
数字、列表与骰子
随机数生成器从您设定的范围中返回数字。随机抽取工具处理您粘贴的列表——名字、参与项、选项——这样您就不必手动把数字和行对应起来。桌面游戏可以用掷骰子工具掷骰并合计点数,二选一时用抛硬币就够了。当随机性要保护某样东西而不是决定某件事时,请使用强密码生成器。它们都使用您浏览器中同一个密码学安全的随机源。