🎯 随机点名器
粘贴名单,滚动抽取,公平选出获奖者。
🔒 100% 本地处理——名单不会被保存
抽取历史
粘贴一份名单,点击抽取,看滚轮逐渐减速,最终停在唯一的中奖者上。这款随机点名工具面向课堂、直播抽奖、团队站会,以及任何有人围观、公平性需要一目了然的抽取场合。它从密码学安全随机源取数,按顺序保留完整的获奖历史,并可在抽取后把获奖者移出名单,确保同一个人不会被抽中两次。
如何使用
- 粘贴名单: 在文本框中每行输入一个名字。顺序不影响中奖概率。
- 决定是否移除: 若需要不重复抽取,保持勾选「抽取后移除获奖者」;希望每个人都始终参与,则取消勾选。
- 开始抽取: 点击抽取按钮。显示区会快速轮播名字,最后定格在中奖者上。
- 继续抽取: 每抽一次都会按顺序追加到下方历史记录。点击「清空」可重置获奖名单。
公平抽取的原理
大多数简易抽取工具依赖 Math.random,而它是为速度而非不可预测性设计的。本工具每次抽取都改用 crypto.getRandomValues——浏览器生成密钥时所用的同一个安全原语。它取一个 32 位随机值,除以 4,294,967,296,得到 [0, 1) 区间内的均匀小数,再用这个小数在清理后的名单里选一个下标。对于 N 个名字,每个人被选中的概率恰好是 1/N。
清理步骤和随机源同样重要。parseNameList 会去除首尾空白、丢弃空行、合并完全相同的重复项,并保留首次出现的顺序。没有这一步,一个被输入两次的名字就会占据两个位置,概率翻倍;有了它,文本框里看到的名单就是真正参与抽取的名单。
抽取演练
假设文本框中是下面几行:
Maya
Ben
Maya
Dana
清理之后,名单池是 Maya、Ben、Dana 三个名字,因为第二个 Maya 被去空格并与第一个合并。此时每个人中奖概率都是 1/3,而不是 Maya 1/2、其他人 1/4。
在勾选移除的情况下连续抽三次。第一次抽中 Ben,于是文本框只剩 Maya 和 Dana,历史记录显示「1. Ben」。第二次在两人中抽取,结果说不准;假设抽中 Dana,就只剩 Maya。第三次只有一个名字,Maya 自动中奖。此时历史记录依次是 Ben、Dana、Maya,是一份完整且有序的结果。
现在用同一份名单、但取消勾选移除再试一次。每次抽取名单池都保持三人,所以 Maya 完全可能连续两次中奖,就像把签放回签筒的抽奖一样。出现 Dana、Dana、Maya 这样的序列完全正常,不是 bug。
使用场景
- 课堂点名: 随机抽学生回答问题,而不是每次都叫举手的。
- 直播抽奖: 在直播中抽取观众或到场者,历史记录可当作抽取顺序的公开凭证。
- 站会与复盘会: 公平决定谁先发言,省去「上次是谁」的争论。
- 值日或排班: 借助历史记录轮换没人爱做的任务,让分配更均匀。
名单会被如何处理
名单只存在于页面上的文本框中。它不会被保存到服务器,关闭标签页后也不会留下任何痕迹。启用「移除获奖者」时,中奖的那一行会从文本框中删除,其余名字保持原有顺序。历史记录以带编号的列表形式保留在页面中,因此一连串抽取读起来就像一份正式的结果单。清空历史只会清空该列表,并不会把已经从文本框中移除的名字放回来。
实用建议
要有意识地去重。如果确有两个人同名,清理器会把它们合并成一条;可以加上中间名缩写或部门来区分。用于抽奖时,先确定奖品顺序,再按这个顺序抽取,历史记录就能直接对应一等奖、二等奖、三等奖。如果有人在看,抽完后把最终名字大声念出来,并在屏幕上停留片刻再做下一次。需要长期留档的话,请在关闭标签页前先复制历史列表。按钮下方的状态行会显示清理后的当前名单池大小,这在公开抽奖前很有用:如果你预期 30 人却显示 28,说明有两行要么是空的、要么是重复的。抽取结束后,务必先把名字记录到别处再清空历史,因为清空不会把已移除的中奖者放回文本框。
需要了解的边界情况
- 超长名单: 没有硬性上限,几千个名字也能处理;只是滚动动画会切换得更快。
- 只有一个名字: 在你取消移除或编辑名单之前,它会每次都中奖。
- 行尾空格: 会被自动清理,因此「Ben 」和「Ben」被视为同一个人。
- 区分大小写: 「sam」和「Sam」会作为两条独立记录保留,工具不会去猜测大小写是否一致。
- 空名单抽取: 在空文本框中点击抽取不会有任何结果,而是显示错误提示,而不是选中一个空条目。
相关工具
常见问题
决定中奖者的随机源是什么?
抽取工具使用 crypto.getRandomValues,也就是浏览器内置的密码学安全随机生成器,而不是 Math.random。每次抽取都取一个全新的 32 位随机值,除以 4,294,967,296 得到一个均匀小数,再映射到清理后名单的某个下标,因此名单中每个名字被选中的概率完全相同。
「抽取后移除获奖者」复选框到底改变了什么?
勾选后,每次抽取都会把中奖者从文本框中删除,同一个人无法再次中奖,名单池也随每次抽取而缩小。取消勾选,完整名单保持不变——单次抽取,或允许重复中奖的抽取,就应该这样设置。
重复的名字和空行是如何处理的?
每次抽取前名单都会被规范化:逐行去除首尾空白,丢弃空行,合并完全相同的重复项并保留首次出现的那条。两行分别写着「Ana」和「Ana 」会变成一条记录,避免有人悄悄获得双倍概率。
一次点击能抽多位获奖者吗?
不能,界面每次点击只抽一位。多奖项抽奖时,保持勾选移除并连续点击;每个结果都会按抽取顺序追加到历史记录,因此可以直接按这份列表宣布一等奖、二等奖和三等奖。
为什么提示「所有名字都已被移除」?
当文本框为空、而历史记录中已有获奖者时就会出现这条提示,通常发生在开启移除、所有名字都已被抽完之后。编辑或粘贴一份新名单即可继续。它和「没有名字」的错误不同,后者指的是压根没有输入任何内容。
滚动动画会影响谁中奖吗?
不会。按钮按下的瞬间就已经选出了中奖者,动画只是随后播放。滚轮大约循环 22 到 30 步,间隔逐渐拉长,整个过程约 2.5 秒,并被设计成刚好停在事先选定的中奖者上。动画纯粹是展示效果。
由 HandyTools Hub 团队审校 · 最后更新