使用方法
- 在文本框里每行写一个人名;要加权就把权重写在逗号后面,例如
张三,3表示张三权重是 3(默认权重为 1)。 - 在「抽取数量」填要抽出的人数,例如 3;在「随机种子」填任意整数,同一种子、同一名单必然抽到完全相同的一批人。
- 在「重复模式」选不允许重复(每人最多中一次)或允许重复(同一人可能多次中奖,适合可兼中的场景)。
- 在「抽取方式」选均匀(每人等概率)或加权(按权重列,权重越高越容易中)。
- 点「开始抽取」,或在名单框按 Ctrl + Enter、在数量或种子框按回车;结果区显示抽中名单,下方表格列出序号与姓名。
- 「复制结果」复制名单,「导出 CSV」存成带 BOM 的文件;「换种子重抽」换一个新种子再抽一次,便于当场演示多轮。
这个工具能用来做什么
这种「随机抽人」场景常见于团建点名、课堂提问、抽奖分工、值班排班,但要做到公平不重复,并不是随便写个随机就行——直接用「随机取一个再删一个」在小数组上概率并不均匀,也容易漏掉边界。本工具用 Fisher-Yates 洗牌,从数学上保证每个位置等概率。
第一类用途是点名与提问。课堂或会议想随机选人发言,洗牌后取前 N 个,既公平又能避免总抽中同几个人。
第二类用途是分工与排班。把任务或班次随机分配给人,配合「不允许重复」保证每人至少轮到一次前不被重复选中。
第三类用途是趣味抽奖。用加权模式让某些人(如贡献更大者)中奖概率更高,用「允许重复」支持可兼中奖项,比手写纸条更可控。
在课堂或培训场景里,用本工具点名还能降低「总是抽熟人」的嫌疑,让每个人都被公平地纳入候选;配合可复现的种子,还能把同一份名单与种子留档,事后证明抽取没有被人为操控。
本工具不做这些事:不保证加密级随机(种子算法是确定性伪随机,非密码学安全)、不联网、不保存名单;涉及分钱、涉赌等严肃场景请使用专业随机源,本页仅作日常与娱乐之用。
抽取原理与变量说明
Fisher-Yates 洗牌。从数组末尾开始,每一步用随机数选一个 0 到当前下标之间的位置,与当前末尾交换,最后取前 N 个。这样每个元素被放到任一位置的概率都相等,比「随机抽一个删一个」更稳,也天然实现不重复。
可复现的种子。随机性来自一个 32 位线性同余发生器,状态按下面的式子推进,乘法用 Math.imul 保证 32 位整数相乘跨环境一致:
同一个种子、同一份名单、同一抽取设置,必然得到逐字相同的抽取结果,便于复盘与当众演示;换种子就会换一批人。
两种重复语义。不允许重复时,洗牌后取前 N 个,每人最多出现一次;允许重复时,每次独立从全名单抽一个,同一人可能多次中奖,适合「可兼中」的奖项。
加权抽取。当名单带权重列时,抽中概率与权重成正比。实现方式是把权重累加成区间,再用随机数落入的区间来选人,而不是简单地把某人复制多份——后者在抽取数量变化时概率并不精确。加权 + 不允许重复时,抽中的人会从候选池移除后再抽下一个。
完整示例(默认名单实测)
默认名单是 8 个人(张三到吴十),抽取数量 3,不允许重复,均匀模式,种子 12345。洗牌后取前 3 个,结果是一组互不相同的 3 人;把种子改成别的数,被抽中的 3 人通常会整体变化。
- 均匀 + 不允许重复:名单 8 人抽 3 人,共 C(8,3) = 56 种组合之一,每种组合等概率。
- 均匀 + 允许重复:同一人可能出现 2 次或 3 次,适合「一二三等奖可兼中」的抽奖。
- 加权 + 不允许重复:若把张三写成
张三,3、其余权重 1,则张三被抽中的概率约为 3/10,明显高于他人,且一旦抽中就从池中移除。
组合数提醒:从 M 人中抽 N 人不重复,总组合数为 C(M,N);当 N 接近 M 时(如 8 抽 7),「几乎全中」的组合占绝大多数,此时结果趋于雷同,页面会在边界处提示你。
抽取模式对照表
下表汇总四种模式的行为差异,选择前先看清楚你想要的语义。
| 模式 | 是否可重复 | 适用场景 |
|---|---|---|
| 均匀 / 不允许重复 | 否 | 点名、分工、排班 |
| 均匀 / 允许重复 | 是 | 可兼中的多轮抽奖 |
| 加权 / 不允许重复 | 否 | 按贡献分配、抽后移除 |
| 加权 / 允许重复 | 是 | 权重不同的可兼中抽奖 |
结果边界与适用说明
- 名单为空或只有空白行时提示「请至少输入一个人名」。
- 抽取数量必须 ≥ 1;填 0、负数或非数字会提示具体原因。
- 不允许重复时,抽取数量不能超过名单人数;超过时提示「不允许重复时抽取数量不能超过名单人数(M 人)」并给出实际人数。
- 种子必须是 0 到 2147483647 之间的整数,否则提示请填合法整数;留空时自动用默认种子。
- 加权模式下权重必须是非负数字;写成
姓名,权重且权重为 0 的人永远不会被抽中(相当于排除)。 - 本算法是确定性伪随机,非加密级;涉及分钱、涉赌等严肃或高风险场景请勿依赖本页,应使用密码学安全随机源。
- 所有计算在浏览器本地完成,不联网、不上传,名单与结果仅用于本次测算。
常见问题
为什么不用「随机取一个再删一个」?
因为那种写法在小数组上概率并不均匀:先被抽走的元素会影响后面元素被选中的机会,边界元素尤其容易被低估。Fisher-Yates 从末尾往前交换,每个位置被任一元素占据的概率严格相等,是公认的无偏洗牌。
为什么同一种子每次抽出来都一样?
因为随机性来自以种子为起点的确定性伪随机序列,状态按(s × 1103515245 + 12345)对 2^31 取模推进。同一起点必然走出同一条序列,所以同一种子、同一名单、同一设置会得到完全相同的一批人,方便复盘与当众演示。
允许重复和不允许重复差在哪?
不允许重复是洗牌取前 N,每人最多中一次,适合点名分工;允许重复是每次独立从全名单抽,同一人可能中多次,适合「奖项可兼中」的抽奖。两者语义不同,选错会改变中奖规则。
加权是怎么保证概率和权重成正比的?
本工具把每个人的权重累加成一个总区间,用随机数落入的区间来定位被抽中的人,权重越大占的区间越宽、越容易被抽中。它不是简单把高权重的人复制多份,所以无论抽几个,概率都精确对应权重比例。
抽 7 个人和抽 3 个人差别大吗?
很大。从 8 人中抽 3 人有 56 种组合,而从 8 人中抽 7 人等价于「排除 1 人」,只有 8 种结果,结果高度雷同、几乎人人都中。N 越接近 M,组合越集中,页面会在这种边界给出提示。
这个抽取能用于分钱或抽奖作弊防范吗?
不能。本页用的是确定性线性同余伪随机,种子一旦公开,结果即可复现,不具备密码学安全性,无法防止有人推算序列。涉及金钱、涉赌等严肃场景,请使用经审计的密码学随机源与第三方公证。
权重写成 0 的人还会被抽到吗?
不会。权重 0 意味着在累计区间里不占任何宽度,随机数永远不会落入,相当于被排除。你可以借此临时屏蔽某些人而不必删掉他们的名字。
这个工具免费吗?数据安全吗?
免费,无需注册。所有洗牌与抽取都在当前浏览器本地完成,名单不会上传服务器,刷新页面后输入框内容也不会被保存。