抽签被质疑作弊?把种子和参数贴出来就能自证

抽签被质疑作弊?把种子和参数贴出来就能自证

一、两种随机源,用途正好相反

模式随机源特点
不给种子浏览器的密码学安全随机源(crypto.getRandomValues)每次都不一样,无法预测;与密码生成器同源
给种子确定性伪随机序列(如 xorshift32)相同种子 + 相同参数 = 完全相同的结果

看起来矛盾的两件事,其实是两个需求:抽奖本身要"谁都猜不到",事后又要"能证明没动过手"。所以正确用法是——先用不可预测的模式抽,同时把种子和参数记录下来,需要复核时切到可复现模式重跑。

被人质疑时最有说服力的做法:把种子、参数、原始名单一起贴出来,任何人都能复演出同样的结果。这比任何解释都硬。

二、洗牌为什么不能"随手打乱"

很多人以为洗牌就是"随机交换几次"。问题是,简单随机会让某些排列出现的概率偏高,看起来公平,实际有偏。经典解法是 Fisher–Yates 算法:从后往前,每个元素与前面(含自己)的随机位置交换。这是唯一能保证"每种排列等概率"的洗牌方式,实现简单、无偏。

同一次抽签和洗牌共用同一套随机序列,也保证了"抽签结果"和"洗牌顺序"不会互相矛盾。

三、三个参数,决定结果怎么算

  • 名单:一行一个条目,粘贴进去即可;
  • 抽取数量:要抽几个人、几个号;
  • 权重:加权模式下每行写「条目,权重」两列,适合"老员工中奖概率高一点"这类规则。

参数写清楚,争议就少一半。最怕的是规则藏在心里:抽完才说"这次按工龄加权",怎么解释都不像公平。

四、边界情况不硬凑,是靠谱工具的标志

几个常见的错误输入:最小值大于最大值、不重复模式下要抽的个数超过范围大小、名单为空。这类情况,可靠的工具会直接说明原因,而不是偷偷改参数,给你一份"看起来能用"的结果。

这条判断标准挺好用:一个工具愿不愿意告诉你"你错了",决定了它的结果能不能被信任。

五、隐私底线

名单里往往有真实姓名、工号,甚至手机号。所以处理必须在本地完成:页面不上传、不写本地存储、刷新即清空——这一点对内部抽签尤其重要,名单泄露比抽签结果本身更麻烦。

一句话收尾:公平不是靠"我相信你",而是靠"你可以自己验一遍"。种子和参数,就是那个验的入口。