随机与安全

随机抽签

粘贴一份名单,就能转盘抽人、抽取一个或多个中签者、打乱顺序,或者把大家平均分成几组。所有结果都来自浏览器的密码学随机数,转盘可以全屏投影,课堂点名、会议、年会抽奖都能用。

历史记录

    全部在你的浏览器里运行,这里输入的内容不会上传。

    怎么用

    1. 在左边输入或粘贴名单,每行一个名字。逗号、顿号也能分隔,所以从表格里复制来的一行名字也可以直接用。
    2. 转盘:点「转动转盘」,转盘减速后停在中签者上。勾选抽中后从名单移除,下一轮就不会再抽到同一个人。
    3. 抽取:选择抽几个人,以及是否允许重复。
    4. 打乱顺序:把整份名单随机排序,适合排定汇报顺序、值日表、朗读顺序。
    5. 分组:选择分几组,所有人打乱后依次分配,各组人数最多相差一人。
    6. 点全屏可以投到大屏幕上,历史记录里能看到之前的每一次结果。

    随机是怎么保证的

    转盘开始转之前,结果就已经确定

    点下按钮的那一刻,中签者就已经从随机数里抽出来了,之后的动画只是把这一格转到指针下面。转盘看起来像是物理转动,但点击的快慢、动画的速度都不会影响谁中签。这也意味着,在慢吞吞的手机上和在高性能电脑上一样公平。

    公平的随机源

    随机数来自浏览器的密码学安全随机数生成器 crypto.getRandomValues,而不是 Math.random。把一个 32 位随机数变成 n 个人中的一个时,使用拒绝采样,保证不会因为取余让某些人的概率略高。打乱顺序使用 Fisher–Yates 算法,n 个人的 n! 种排列出现的概率完全相等。

    公平性是经过测试的,而不是想当然:把三个名字打乱 60,000 次,六种可能的顺序各自出现约 10,000 次,卡方统计量低于 0.1% 显著性水平下的临界值。

    分组

    分组时先把名单打乱,再像发牌一样依次分配:第一个人到第 1 组,第二个人到第 2 组,依此类推。11 个人分 3 组,结果是 4、4、3 人。

    示例

    • 课堂点名:粘贴班级名单,转盘决定谁来回答问题;勾选「抽中后移除」,保证每个人都被点到一次之前不会有人被点两次。
    • 年会抽奖:粘贴员工名单或抽奖券号,选「抽取」,把「抽几个」设为奖品数量,保持勾选「不重复」,全屏投到大屏幕上。
    • 汇报顺序:用「打乱顺序」决定谁先上台。
    • 分组讨论或运动分队:11 个人分 3 组,结果是 4 + 4 + 3。

    在勾选「不重复」时,要抽的人数超过名单人数,会明确提示,而不会悄悄重复抽人。

    局限

    • 不支持权重。 每个名字的概率相同。想让某人有两次机会,就把名字写两遍,并取消「不重复」。
    • 结果只保存在当前页面。 公开抽奖时,请当众展示屏幕,或者在关闭页面前复制历史记录。
    • 同名算作两个人。 名单里两个「张伟」就是两次机会。
    • 转盘能清楚显示几十个名字。 名单更长也能用,但文字会变小,几百人的抽奖用「抽取」更清楚。

    常见问题

    转盘真的随机吗?

    是的。动画开始之前,中签者就已经由密码学随机数抽出,动画只是把结果展示出来。

    怎么避免同一个人被抽两次?

    勾选「抽中后从名单移除」,每次中签的人都会从名单里去掉,下一轮只在剩下的人里抽。

    分组怎么保证人数均衡?

    先打乱名单,再轮流分配,各组人数最多相差一人。

    能投到大屏幕上用吗?

    能。点「全屏」,转盘和结果会放大显示,适合教室和会场。

    我输入的名单会被保存吗?

    不会。名单只存在于当前页面,关闭就没了,也不会上传。

    参考资料

    用到这个工具的指南

    ↵ 打开 · Esc 关闭