随机转盘

每行写一个名字,按下转动,看转盘停在谁那里。每一格的概率完全相同,同一个名字写两遍就等于拿到两张票。名单只留在这台浏览器里:你的抽签不会有任何内容被发送出去。

每行写一个名字,然后转动。转盘按公正抽签决定,而不是看转得多用力。

中签者是在转盘开始转动之前就抽好的,来自浏览器的加密随机源,随后的旋转只是对准那一格。听上去顺序反了,但这才是诚实的做法:如果结果取决于动画恰好停在哪里,那么看上去一样大的扇区就不是一样的概率——决定权落到了绘图的舍入上。这里每一格的概率完全相同,而把同一个名字写两遍,是给它两张票的正当办法。

相关工具: 随机抽取, 随机数生成器, 抛硬币, 密码生成器

使用方法

  1. 在文本框里写下名单,每行一个。名单一边写,转盘一边重画。
  2. 按「转动转盘」——直接点转盘也可以。它转约四秒,停下时指针指着的就是结果。
  3. 要分几轮抽,就勾上「中签后从名单中移除」:每转一次就把中签者拿掉,没人会被抽到两次。
  4. 「打乱名单」只重排顺序、不抽人——需要的是出场顺序而不是唯一赢家时很好用。

实用说明

结果在转盘开始转之前就已经抽好

听上去顺序是反的,但这才是诚实的做法。先用浏览器的加密随机源抽出结果,然后才让旋转对准那一格。反过来,如果结果取决于动画恰好停在哪里,那么看上去一样大的扇区就不是一样的概率:绘图的舍入和你屏幕的刷新率会悄悄把天平压偏。按这个顺序,画面只是展示结果的方式,而不是产生结果的方式——无论名单上是三个人还是两百个人,每个名字的概率都完全相同。

同一个名字写两遍,就是两张票

重复的行是特意保留的。如果有人买了两张抽奖券,或者某个小组按双份计,把名字写两遍,转盘上就会出现两格同名。这是做加权抽签最简单也最诚实的办法,而且一切都摆在明面上:任何人看着转盘都能数格子、自己核对权重——隐藏的倍数可做不到这一点。

名单永远不会离开你的浏览器

学生、同事或客户的名字都是普通的个人数据,没有理由让它们到处跑。名单存在这台浏览器的本地存储里,刷新页面也还在;它不会发送到服务器,不会在设备之间同步,我们也看不到。清除浏览器数据它就没了。页面本身断网可用——关掉 Wi-Fi 再转一次就能验证。

常见问题

抽签真的是随机的吗?

是的。每次转动都从 crypto.getRandomValues 取数,那是浏览器的加密随机源,和生成密钥、会话令牌用的是同一个;落在区间尾部的取值会被丢弃而不是回折,所以靠前的名字不会更常出现。除了你自己通过重复名字加上的权重,没有别的加权。

能让某个名字更容易被抽中吗?

把它多写几遍。两行同名就占总数里的两格,转盘上看得见:权重摆在所有人眼前,而不是藏在某个设置里。

转盘上最多能放多少名字?

最多两百个。超过四十来个之后标签会变短,转盘一眼看不清了,但抽签的公正程度丝毫不变;如果你只要结果、不要画面,用普通的列表抽取更好读。

我的名单会被保存吗?

只保存在这台浏览器里,好让刷新之后名单还在。它不会发到服务器,也不会同步给别的设备或同一台电脑上的别的浏览器。清掉站点数据就没有了。

可以用它做真正的抽奖吗?

可以,而且用转盘比用抽签箱更容易把公开抽奖做得让人信服:转之前先把名单定下来,把转盘放在大家都看得见的屏幕上以便数格子,如果结果日后需要交代,就把屏幕录下来。

相关工具