打开就能用的在线随机数生成器,四个页签装在同一页:随机数可设最小值、最大值(含两端、支持负数)、个数 1~1000、不重复、排序与 0~6 位小数;名单抽取一行一个名字,可开「抽过的不再抽」;还能掷 1~6 颗 4/6/8/10/12/20 面骰子,或抛 1~10 枚硬币看正反累计比例。取数优先用浏览器自带的加密级随机源,配拒绝取样消掉取模偏差,每个数机会均等;设置与名单只存在你自己的浏览器里。
怎么用
页面顶部四个页签,点一下就切:随机数、名单抽取、掷骰子、抛硬币。四个页签各自记住上一次的设置,下次打开还是你熟悉的那一套。
一、随机数
这是这一页的主功能,六个参数:
- 最小值 / 最大值:范围含两端,1 到 100 会把 1 和 100 都算进去;支持负数,比如 -50 到 50;两个数填反了会自动对调,并在下面给你一句提示。上下界的绝对值最大到安全整数(大约 9 千万亿),再大就超出浏览器能精确表示整数的极限了。
- 个数:一次生成几个,1 到 1000。只生成一个时结果会放成大字,方便隔着屏幕念出来;多个时排成一片小方块。
- 不重复:开了之后同一批结果里不会出现重复的数。注意它的上限就是范围里数的总个数——1 到 10 最多只能不重复地取 10 个,你要 40 个会被自动改回 10 并提示。
- 排序:不排序(保留抽出来的原始顺序)/升序/降序。抽完要按顺序念的时候用升序,想保留「谁先被抽到」的信息就选不排序。
- 小数位:0 是整数;填 1 到 6 位时会在区间里均匀取小数,比如 0 到 1 取两位小数,0.00 到 1.00 之间每个两位小数被取到的机会都一样。小数位每多一位,能填的边界就得小一位,这是为了不超出浮点数能精确表示的范围。
点「生成」出结果,点「复制」把结果复制走:结果不多时按顿号连成一行(适合贴进句子),超过 12 个时按换行排成一列(适合贴进表格软件)。有些浏览器不允许网页直接写剪贴板,这时页面会把文本放进下面一个小框并选中,你自己按 Ctrl+C(Mac 上是 ⌘+C)即可。
二、名单抽取
把名字写进大框里,一行一个,也认逗号、顿号、分号分隔;前后的空格会自动去掉,空行会被忽略。填好「抽几个」,点「抽取」,结果会每 300 毫秒翻出一个,等不及就点「跳过动画」一次性全部显示。
- 抽过的不再抽:打开之后,被抽走的名字会从下一轮的候选里去掉,适合一个个点名、排值日、分发奖品这种「一轮一个、不能重复」的场合。下面会实时显示「名单共 N 个,已抽走 M 个,还剩 K 个」。
- 重置名单:把「已经抽走」的记录清空,所有名字回到候选里,名单文字保留。
- 清空名单:连名字一起删掉,本机存的那份也一并删除。
名单原文和「已经抽走的人」存在你自己浏览器的本地存储里(键名 hi8-suijishu-list),刷新页面能接着抽;它只待在这台设备上,页面没有任何把名单发出去的代码。
三、掷骰子
选颗数(1~6 颗)和面数(4/6/8/10/12/20 面),点「掷骰子」。六面骰画的是真正的点阵(一点在中间、二点走对角、六点两列三行),其余面数直接显示数字和「d几」的标记。下面一行给出每颗的点数与总和——桌游临时找不到骰子的时候,这一栏就够用了。
四、抛硬币
选枚数(1~10 枚),点「抛硬币」,页面显示每一枚的正反,下面给出这一次的正反数和累计的正反数与正面占比。累计是跨多次抛的,想从头统计就点「累计清零」。
历史
页面底部有一个「最近 10 次结果」的折叠区,记着这次打开页面之后每一次生成的时间与摘要,用来回头核对「刚才抽的到底是谁」。它只留在页面里,刷新就没了。
怎么看结果
「看起来不随机」通常才是随机的
用随机数生成器最常见的困惑是:连着出了三个 7,是不是坏了?几乎不是。范围 1 到 10 取 20 个数(允许重复),至少出现一次「连着两个一样」的概率超过八成——真正的随机序列里,扎堆和连号本来就很常见;反过来,一串「不多不少、间隔均匀」的数字才是可疑的。人脑对随机的直觉天生偏向「太整齐」,这是心理学里被反复验证过的现象。
判断均匀不均匀,要看次数够不够多
- 骰子:一颗六面骰掷 6 次,出现「六个面各一次」的概率只有约 1.5%;掷 60 次,每个面也不会正好 10 次,上下差三四次都很正常。要看出偏差,量级得到几百上千次。
- 硬币:抛 10 枚,正面 7 反面 3 一点也不稀奇(概率约 12%);抛到几百上千次,正面占比才会稳稳地贴近 50%。页面上的「累计」栏就是给这件事用的——多抛几轮,看着那个百分比慢慢收敛,比任何解释都直观。
- 多颗骰子的总和不是均匀的:两颗六面骰的总和从 2 到 12,但 7 出现的机会是 2 的六倍,因为凑出 7 的组合有六种、凑出 2 的只有一种。所以看总和时别拿「每个数机会一样」去对照,那只适用于单颗骰子。
「不重复」和「可重复」是两件事
- 可重复(默认):每次取数互相独立,相当于「摇完放回去再摇」。适合模拟、出练习题、随机选一个。
- 不重复:相当于「摇出来就不放回去」,等价于把范围里的数洗一遍牌取前几张。适合排顺序、分组、抽奖号这类不能撞号的场合。
一个容易踩的坑:想给 30 个人随机排序,正确做法是「1 到 30、取 30 个、开不重复、不排序」,抽出来的顺序就是排队顺序;如果开了升序,那就变回 1、2、3……什么信息都没有了。
小数位与边界
小数位大于 0 时,页面在区间里按你选的位数等步长取值:0 到 1 取一位小数,可能的结果是 0.0、0.1……1.0 共 11 个,每个机会均等。所以小数位越多,可能的结果越密,越接近连续均匀分布,但永远是有限个值——计算机里没有真正的连续。
如果你填的范围大到取值个数超过一次取样能均匀覆盖的跨度(约 9 千万亿个),页面会把上界收回来并明确提示,而不是偷偷给你一批分布歪掉的数。
常见问题
随机数生成器是怎么做到「每个数机会一样」的?
生成器底层拿到的是一串固定位数的随机整数(比如 0 到 2³²-1),要把它变成 1 到 10,最朴素的做法是取余数再加 1。问题在于 2³² 不能被 10 整除,余数 0 到 5 会比 6 到 9 多出一份机会,这就是取模偏差。本页的做法是拒绝取样:先算出「能被 10 整除的最大整份区」,取样落在整份区里才算数,落在末尾那截零头里就丢掉重取。代价只是偶尔多取一次,换来的是每个数完全等机会。范围超过 2³² 时,页面会拼两个 32 位的取样凑成 53 位再做同样的事。
为什么不给我一个「种子」,让结果可以复现?
可复现的随机数(同一个种子出同一串数)在做实验和调程序时很有用,但对这一页的绝大多数用途——抽人、排序、掷骰子——反而是隐患:一旦种子可见,结果就可以被提前算出来。所以这一页固定走不可复现的随机源。如果你需要可复现的随机数,Excel 的 RAND 配合固定单元格、或者 Python 的 random.seed() 更合适。
抽人的时候有人说「不公平,再抽一次」怎么办?
先把规则定在抽之前,这是唯一有用的办法:抽几个、抽中的还算不算数、要不要「抽过的不再抽」,当场说清楚再点按钮。这一页把「已抽走」的人实时显示在下面,就是为了让过程看得见。另外,重抽一次并不会让谁更容易被抽中——每一轮都是独立的,这一点和「上一把输了下一把更容易赢」的错觉是同一个误区。
桌游缺骰子,这一页能顶替吗?
能。用「掷骰子」页签选好颗数和面数即可,四面、八面、十二面、二十面这些跑团常用的骰子都有。顺带一说:实体骰子有重心偏移和磨损,未必比网页更均匀——但正式比赛通常要求使用指定的实体器材,这一页只适合自家桌上玩。
手机上好用吗?
四个页签在 400 像素宽的屏幕上都完整可见,参数会自动折行,骰子与结果块跟着缩小。数字框设了数字输入模式,正常情况下会直接弹数字键盘;弹出全键盘多半是输入法自己的设置,切到数字面板即可。
原理与冷知识
-
计算机里几乎没有「真随机」。 绝大多数程序里的随机数都是伪随机数:从一个种子出发,用一套确定的公式往下推,序列看着毫无规律,但只要知道种子和公式就能一步不差地重放。浏览器里的
Math.random()正是这一类。它的好处是快、可复现;短板是不该被用在任何需要保密的地方。 -
加密级随机源不一样。
crypto.getRandomValues背后是操作系统的随机数池,材料来自硬件噪声、时钟抖动、中断时序,设计目标是「看过去的输出也推不出下一个」。本页在浏览器支持时优先用它。 -
取模偏差坑过很多人。 「拿随机整数对 n 取余」是教科书里最常见的写法,也是最常见的隐蔽 bug:n 不能整除取样空间时,前面几个余数会多分到一份机会。范围越接近取样空间,偏差越显眼,历史上多起安全事故都和这一类偏差有关。
-
洗牌也有正确与错误的写法。 打乱列表的标准算法叫 Fisher–Yates 洗牌:从最后一个位置起,每次和它前面(含自己)的随机一个位置交换。写成「每次和任意位置交换」分布就歪了——另一个流传很广的经典错误。本页的「不重复」用的是它的部分版本,只洗出你要的那几个。
-
「随机数表」曾经是正经出版物。 二十世纪中叶,统计学家做抽样得靠印好的随机数表;1955 年出版的《一百万个随机数字》整本书就是一串随机数,材料来自一台电子轮盘机产生的噪声。
-
人手掷出来的硬币不是精确的一半一半。 有物理学研究指出,硬币更容易落回抛出时朝上的那一面,偏差在百分之一的量级——原因是抛掷时硬币同时在翻转和进动。大规模的重复实验也观察到了类似的微小偏向。网页版反而没有这个问题:这一页的正反各占一半,是由取样算法保证的。
-
骰子只有几种「公平形状」。 四、六、八、十二、二十面对应的正是五种柏拉图立体——每个面完全一样、每面机会均等的凸多面体只有这五种。二十面体早在古希腊就被研究过,大英博物馆里还藏着古罗马时期的二十面骰;它成为桌游标配,则是二十世纪七十年代之后的事。
-
「随机点名」是中文互联网上最实在的随机数需求之一。 从课堂点名到年会抽人,本质都是「从一份名单里等概率取几个」。这件事看着简单,真正容易出错的地方在于「抽过的要不要排除」——排除与不排除是两种完全不同的概率模型,本页把它做成一个开关,正是因为这两种用法都很常见。