有一个有争议的帖子,因此单独开个帖子解释下论坛抽奖的原理
详细版可以参考这个帖子:https://www.nodeseek.com/post-92-1
先说结论
论坛抽奖工具是完全基于密码学原理,几乎无法通过技术手段预知结果,也无法人为操纵结果的
通俗版原理
论坛抽奖会使用cloudflare随机信标作为随机种子,来把抽奖的楼层编号(去重后)生成一个排序A,排在前面的就是优先中奖的,根据奖品数目取前n个。为了可读性,会把这n个楼层编号从小到大显示,来展示给用户。
cloudflare随机信标每隔30s产生一次,无法提前获知,因此如果两次抽奖的时间一样,并且总楼层数目一样,那么抽到的楼层是一样的(本质是排序A一样)。
如果把抽奖当成一个函数,那么输入是时间和总楼层的,只要输入一样,输出就一样。
具体到这个抽奖贴
最初商家是用一次抽奖按照楼层来发奖品,这里我们看过后觉得有问题,因为排序A在展示给用户前,为了方便找到自己会按照楼层序号排序,所以一定是小楼层获得前面的奖品。为了公平起见,我们建议通过多个抽奖链接来抽,且错开一分钟。
实际操作的时候,因为活动太多可能没留意,把时间设为了错开1秒,因为同样在30s内,随机种子一样,再加上开奖时间一样,会导致同一个帖子内多个抽奖的排序A一样。参考大家的意见已经按照正确的错开时间来开奖。
除了同一个帖子内多个抽奖链接同时开的问题,还有一个之前问题是多个抽奖帖子,只要开奖时间一样,中将楼层的编号是一样的,不过因为无法提前知道楼层因此没有实际影响。
未来的改动计划
这种同一个帖子抽多个且开奖时间一致的情况属于很少的情况,为了避免这种情况出现类似尴尬,降低抽奖的心智门槛,会对抽奖工具做微调。
原有的抽奖链接不会改变,结果还是可以看到,会增加一个新的抽奖工具入口,开发部署之后的抽奖会按照新的抽奖工具,用于解决少数的抽奖需求
计划的抽奖模型变动如下:
- 默认去重且不可更改
- 随机种子增加帖子id
- 随机种子增加时间戳
- 可以增加一个单独的参数加入到种子,比如 奖品1, 奖品2
- 可能会把所有楼层内用户id拼接后作为种子的hash数据来源之一(待定)
- 去掉抽奖者自身,就不用自动下延的土办法了
当前的使用建议
由于到新版本抽奖工具上线还有一定时间,在此之前的小建议:
- 一般抽奖直接用即可
- 同一个帖子内抽多个不同奖品,建议用多个链接,且时间分隔1分钟以上
最后
抽奖只是一个活跃气氛,让节日变得更有氛围的手段,不要因为抽奖而影响心情,鸡腿同理 
很公平,支持
虽然中奖了也是挂探针,但是真的想中奖
bbd
ddd不缺鸡,但想中奖是真的
这两个,还以为之前就有呢
确实,如果同个帖子,要抽多个奖品,用同一个链接,设置多个奖品更合理些,这样可以去重,不会让同一用户在同一个链接中重复中奖
@katorly #4
一直都能正常用,就会因为惰性一直不太想改,改了要存在两个抽奖链接的模式,有时候解释起来有点烦
可以,慢慢完善的过程
我比较菜都是rand(1-楼层数)
感觉好用方便
好好好,以后多黑幕我
没必要为抽奖的事情不开心
没逝 反正中奖绝缘体