使用方法
- 「抽取张数」默认 5,可填 1 到 52 的整数,决定这一手发几张牌;不含大小王时一副牌就是这 52 张,填超过 52 会给出提示。
- 「随机种子」默认 20261018,可填 1 到 99999999。同一个种子必然发出同一手牌,换个数字则整手重排。
- 「把大小王加入牌堆」默认不勾选。勾选后牌堆从 52 张变成 54 张,小王与大王也可能出现在结果里,同时五张牌的概率分母随之改变。
- 在张数或种子输入框里直接按回车即开始抽牌,不必点按钮;改动任一控件都会立刻重算。
- 「复制结果」把牌面清单放进剪贴板,「复制对照表」复制制表符表格,「导出 CSV」带 UTF-8 字节序标记,表格软件里不会乱码。
- 明细超过六行时会出现「加载更多」;「重置」把张数回到 5、种子回到 20261018,并去掉大小王勾选。
这个工具能解决什么问题
本页要解决的是「从一副牌里抽几张」这件事隐含的两个要求:抽出来的牌不能重复,这一手牌还要能被别人再次核对。第一条排除了逐张独立随机的写法——那种写法会发出两张一模一样的牌,而现实里一副牌只有一张黑桃 A;第二条排除了系统随机源,因为它每次刷新都换结果,发给别人后谁也复核不了。
典型用法有三类:桌游开局前给每人发一手牌、课堂与演示里讲解牌型概率、写单元测试时需要一组稳定不变的扑克输入。前两类要求结果看起来随机且每种成手等可能,第三类要求每次都一样。本页用固定种子的做法同时满足:种子不变就绝不会漂移到另一手牌,换种子就能整手重来。
抽样模型决定了它和站内其它随机工具的分工。随机数生成器取的是放回型样本,同一个数可以出现第二次;随机分组是把已经确定的人或物拆进几个桶;骰子滚动器每次的点数互不相关。本页是不放回抽牌:抽出的每一张都从牌堆里消失,因此结果天然无重复。
对照表的使用前提也要提前说清:它描述的是「随机发五张之后这一手属于哪一类」,所以只有恰好抽五张时可以直接查表,抽其它张数时那张表仅供参考。
这个工具在本站也叫 `随机Playing卡号生成器`(早期自动译名留下的旧称呼),页面标题写的是更通行的说法。
洗牌算法、种子与组合数怎么算
牌堆怎么排。四种花色 黑桃 红桃 梅花 方块 各配十三个点数 A 2 3 4 5 6 7 8 9 10 J Q K,按花色在先、点数在后依次入堆,共 4 × 13 = 52 张。勾选大小王时,小王与大王追加在牌堆末尾,牌堆变成 54 张。
随机序列怎么来。本页用线性同余发生器:从种子出发,每一步把当前值乘以 1103515245、加上 12345,再截取低 31 位,写作 s = (Math.imul(s, 1103515245) + 12345) & 0x7fffffff。乘法必须是 32 位有符号整数乘法(代码里写作 Math.imul),直接写普通乘法会因为超出双精度整数的安全范围而丢位,序列就不再闭环。
洗牌怎么走。整副牌做一次 Fisher-Yates,从最后一张往回推进:
for (i = len - 1; i >= 1; i--) { s = lcg(s); j = Math.floor(s / 2147483647 * (i + 1)); swap(deck[i], deck[j]); }
52 张牌时 i 从 51 走到 1,每一步调用一次递推,整副洗完共 51 次调用;54 张时是 53 次。每一步把当前位置与 0 到 i 之间随机的一张交换,这个方向能保证所有排列等可能出现,改换成正序、且随机数仍按同样的区间取,结果就会偏斜。注意除数固定为 2147483647(二的三十一次方减一),与递推式截取到 31 位相呼应。
结果怎么取。抽 N 张就是洗完之后的前 N 张。因为每张牌在牌堆里只出现一次,切片出来的结果天然不重复,不需要额外去重。剩余张数 = 52 − N(勾选大小王时为 54 − N)。
组合数怎么算。五张牌不计抽牌顺序时,总数是 C(52,5) = 2598960 种。某一类牌型的概率等于它的组合数除以 2598960:一对有 1098240 种,1098240 ÷ 2598960 就是 42.2569%。高牌 1302540 种对应 50.1177%,两类相加已占到九成以上,剩下八种牌型合计不到一成。
为什么不用系统随机源。两者的语义正好相反:系统随机源要「每次都不一样」,固定种子的序列要「每次都一样」。本页是后者——把种子写进文档发给别人,对方输入同一个数字就能得到同一手牌,这在写测试用例、复盘牌局、复现某次演示时是刚需。
完整示例(数值仅作演示)
示例条件:抽取张数 5、不含大小王、种子 20261018。默认这一手是 黑桃5 黑桃9 梅花4 黑桃K 方块Q,抽出 5 张后牌堆剩 47 张,去重后仍是 5 张——这一行也可以当作「没有抽到重复牌」的校验。
换种子不是在上一手的基础上继续往前抽,而是把整副牌重新洗一遍。下表列出四个种子的前五张,用来核对页面的复现能力:
| 随机种子 | 前五张 |
|---|---|
| 20261018 | 黑桃5 黑桃9 梅花4 黑桃K 方块Q |
| 1 | 黑桃A 黑桃8 方块5 方块3 梅花J |
| 42 | 红桃A 梅花8 黑桃9 黑桃6 梅花2 |
| 2026 | 梅花Q 红桃4 梅花10 红桃10 红桃J |
把这四行在不同设备上各跑一遍,结果应当完全一致:算法只依赖种子与固定的牌堆顺序,不读取时间、不联网、不写本地存储。改张数则只是在同一副洗好的牌上截取更长的切片——把张数改成 3 时得到上面前五张的前三张,改成 10 时则往后多取五张。
上述数值均为演示,不代表任何真实牌局的结果。
五张牌牌型概率对照表
下表的前提是不含大小王、恰好抽五张、不计抽牌顺序,总组合 C(52,5) = 2598960。概率按「该类组合数 ÷ 2598960」给出,保留四位小数:
| 牌型 | 组合数 | 概率 | 构成要点 |
|---|---|---|---|
| 皇家同花顺 | 4 | 0.0002% | 同花色的 10 到 A |
| 同花顺 | 36 | 0.0014% | 花色相同且点数连续 |
| 四条 | 624 | 0.0240% | 四张同点数 |
| 葫芦 | 3744 | 0.1441% | 三条加一对 |
| 同花 | 5108 | 0.1965% | 五张同花色且不连续 |
| 顺子 | 10200 | 0.3925% | 点数连续且花色混杂 |
| 三条 | 54912 | 2.1128% | 三张同点数 |
| 两对 | 123552 | 4.7539% | 两个不同点数各一对 |
| 一对 | 1098240 | 42.2569% | 仅两张同点数 |
| 高牌 | 1302540 | 50.1177% | 五张既不同点数也不同花色 |
十行组合数相加恰好回到 2598960,这是这张表最重要的自检:没有任何一类被漏掉或重复计数。读表时留意两点:其一,这张是人类直觉最容易低估的表——最罕见的皇家同花顺只有 4 种,最常见的却是「什么都没有」的高牌,占到一半;其二,概率描述的是「随机发五张之后这一手属于哪一类」,不是「任意抽到某一张是什么」。
勾选大小王之后,样本空间从 C(52,5) 变成 C(54,5),两张王既可以充当任意点数也可以按本页输出直接当作王使用,十行数字全部失效。想在含王的条件下算概率,请自行按 C(54,5) 重新做分母。
结果边界、舍入与适用说明
- 抽取张数范围 1 到 52(勾选大小王后可达 54)。超过牌堆张数会给出「不含大小王时最多抽 52 张,勾选项后可抽 54 张」,不会自动截断,也不允许一副牌抽出不存在的第五十三张。
- 张数小于 1、留空或填成小数会给出「至少抽取 1 张牌」,空值不会沿用上一次的张数。
- 随机种子范围 1 到 99999999。小于 1、留空或填成小数会给出「随机种子请填 1 以上的整数」。
- 输出顺序就是发牌顺序:页面按洗好后的次序从前到后列出,第一张是这一轮的起手,可按这个顺序依次发给各玩家。
- 概率表只在「不含大小王、恰好五张」时成立;抽其它张数或勾选大小王时请把它当成参考而不是结论。
- 概率按百分比保留四位小数,四舍五入后末尾为 0 的部分照常显示,例如 0.0240% 的末位 0 是有效位。
- 同一种子在任何设备上都复现同一手牌,算法只依赖种子与固定的牌堆顺序,与时间、系统随机源无关。
- 本页不提供牌局规则判断,只给出候选:它不会替你判定两家谁赢,也不做换牌策略。
- 页面不联网、不写本地存储,刷新后回到默认张数、默认种子与默认不含王。
常见问题
同一个种子为什么每次发出来的牌都一样?
因为整条随机序列由种子加线性同余递推式推出,没有引入时间或系统随机源。起点相同、牌堆顺序相同,洗出来的牌序就相同。想要每批都换,把种子改成另一个数字即可。
为什么这一手牌里一定不会出现两张一模一样的牌?
因为结果是「整副洗完之后的前 N 张」,同一张牌在牌堆里只有一个位置,切片出来的自然各不相同。逐张独立随机的写法才会抽出两张黑桃 A,那不是一副真实的扑克。
勾选大小王之后,下面的概率表还成立吗?
不成立。表里的概率以 C(52,5) = 2598960 为分母,加入大小王后样本空间变成 C(54,5),十行数字都需要重算。勾选项只是让抽牌结果里可能出现小王与大王。
「一对」的 42.2569% 具体指什么?
指随机发五张牌之后,这一手正好是「仅两张同点数」这类成手的概率,等于 1098240 除以 2598960。它描述的是整手的类别,不是某一张牌的点数,也不是「第一张抽到什么」。
把张数填成 52 会得到什么?
相当于把整副牌洗完之后全部列出,也就是一次洗牌的完整结果。它可以当作一副新牌的开牌顺序来用,或者按人数从头开始依次发牌,发完即止,不需要再做任何抽取。
想把这一手牌发给别人核对,要给他什么?
给三个数即可:抽取张数、随机种子、是否含大小王。三者一致,对方就能在任何设备上抽出完全相同的一手牌,这也是本页坚持用固定种子而不是系统随机源的原因。
这个工具免费吗?
免费,无需注册即可使用。
输入的数据安全吗?
安全。计算在当前浏览器本地完成,不会上传输入内容。