V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
haython
V2EX  ›  问与答

想弄个公平抽奖的程序,想问问有什么类似彩票这种不太容易操纵的随机数吗

  •  
  •   haython · 2020-10-08 08:46:46 +08:00 · 4264 次点击
    这是一个创建于 1507 天前的主题,其中的信息可能已经有所发展或是发生改变。
    抽奖规则就是每个人先拿到一个编号,在开奖之前,公布总参加人数,等到彩票开奖之后,根据彩票的数字,取余总参加人数,余数加 1 就是得奖的编号。
    但是彩票这个开奖频率太低了,有没有其它频率高点的代替?或者其它类似彩票这种,我可以使用多个进行交叉进行
    第 1 条附言  ·  2020-10-08 11:13:44 +08:00
    既要让无任何编程能力的人非常容易的去验证,比如要有像彩票一样的历史记录可方便查询;
    还要有比彩票多一点的频率,至少每天都要有,股票基金指数有周末
    42 条回复    2020-10-09 08:15:23 +08:00
    May725
        1
    May725  
       2020-10-08 08:51:10 +08:00 via iPhone   ❤️ 1
    股票基金指数,感觉没那么容易操作
    Kr98
        2
    Kr98  
       2020-10-08 08:51:53 +08:00   ❤️ 2
    Cloudflare 的 League of Entropy 了解一下
    利用多个不同机构的随机源获取去中心化的随机数
    renmu123
        3
    renmu123  
       2020-10-08 09:04:54 +08:00 via Android
    温度的平均值,自然的东西人比较难操控
    whileFalse
        4
    whileFalse  
       2020-10-08 09:07:13 +08:00 via iPhone
    比特币的出块哈希?但是不稳定,或者说有延迟。
    Perry
        5
    Perry  
       2020-10-08 09:09:24 +08:00
    需求完全没有说清楚,什么叫开奖频率高?要有多高?
    imdong
        6
    imdong  
       2020-10-08 09:20:17 +08:00 via iPhone
    真的要公平的话,我感觉反而不能使用真正的随机数,而是应该使用可查到但不可预知的事件。

    假设使用彩票作为随机种子,可以加入时间因素,生成结果。

    解决了彩票频率不够高的问题,但是需要在彩票开奖前就固定奖池。

    证券的数据,或者大家的数据作为种子。

    比如指定时间内,参与用户的信息时间选择结合一起产生开奖结果,但是要加入其他因素,可能被控制开奖。提前公布一个秘密数字作为干扰项,开奖后可查。加密密文与密匙。
    crclz
        7
    crclz  
       2020-10-08 09:21:27 +08:00
    @whileFalse 我想到也是这个。外加上把开源的算法给复现,这样就可以查验真伪了。

    但是这个预防不了庄家增加虚拟的账户来拉低真实用户的中奖率。(好像没什么东西可以预防)
    kangsheng9527
        8
    kangsheng9527  
       2020-10-08 09:29:36 +08:00   ❤️ 1
    别使用那些人家掌握核心科技的如大气质量那样的随机数。。。反正自己不熟悉的领域别用。。。

    最简单的取随机数就是,参与总人数中用伪随机数产出 10 个人取其提交计入数据库 unixnano 时间,其 10 人均值的数作为随机数。

    随机或者指定序号的 10 个人其参与提交时间肯定不能特定的,绝对是不可谋划的,其次是精确到 unixnano 这个级别就算有心谋划,网络延时等都不可避免,所以绝对是不可谋划定制的随机数。

    而是是自己领域内可证实的随机数,而其他大气数据产出的随机数之类你不懂不建议使用,股票基金的系统也不是你写的你也没有做过绝对掌大财富可操控全局的庄家,所以。。。
    flowercoder
        9
    flowercoder  
       2020-10-08 09:33:09 +08:00
    大概明白了,觉得随机数不够随机,想让开奖结果更随机一些对吧,像前面人说的,一般取当天某证券指数最后两位做变量值,这已经很公平了,我的想法是可以把最后的参与人数映射到一个⚪上,除以总人数后得到一个角度值,这个时候,取一个随机角度值,如果取两人就加 180°,如果取 6 人就每次加 60°,这样保证了参与人的分布性。当然你也可以考虑取 N 次随机角度值
    flowercoder
        10
    flowercoder  
       2020-10-08 09:38:38 +08:00   ❤️ 5
    @kangsheng9527 一般取股票基金啥的,都是取上证或是大型综合指数,这些指数不是几十亿就能决定的,而且不是取所有值,只取小数点最后两位,人为操作可能性接近于无,由于股票最后时间交割会采用集合竞价之类的方式,所以在最后时间的操控难度极大。就算有绝对掌大财富也是不可能控制最后两位小数的
    fangpeishi
        11
    fangpeishi  
       2020-10-08 09:49:04 +08:00   ❤️ 1
    Cbdy
        12
    Cbdy  
       2020-10-08 09:49:57 +08:00 via Android
    可以去取电流的噪声,宇宙背景噪声之类的
    cmdOptionKana
        13
    cmdOptionKana  
       2020-10-08 09:53:37 +08:00
    @flowercoder 这个方法极好,而且完全不用公式,非常直观,比如上证指数是 3218.05 ,那么

    如果参与人数少于 100,中奖号码就是 5
    如果参与人数为 100 - 1000 之间,中将号码就是 805
    依此类推。
    cmdOptionKana
        14
    cmdOptionKana  
       2020-10-08 09:54:52 +08:00   ❤️ 1
    @fangpeishi
    @Cbdy

    楼主的想法应该是想让不懂编程的人也能轻松地确认公平、随机。
    flowercoder
        15
    flowercoder  
       2020-10-08 10:13:57 +08:00
    @cmdOptionKana 这方式就是简单而已,很多人都是你说的这么用的,但是它只能取最后两位,个位数的话最后几分钟的变化概率会降低,比如 14:57 的时候是 8 的话,最可能出现的情况就是 6 、7 、8,所以为了确保它的公平性,只取两位小数。
    cmdOptionKana
        16
    cmdOptionKana  
       2020-10-08 10:25:52 +08:00
    @flowercoder 确实有局限性,如果从拿号到开奖隔开几个小时就没问题了。另外这个方法在周末等股市不运作的时间段无法使用,如果楼主是节假日搞活动那就要想别的办法。
    lxilu
        17
    lxilu  
       2020-10-08 10:39:50 +08:00
    Intel DRNG
    yujiang
        18
    yujiang  
       2020-10-08 10:45:55 +08:00
    用彩票有一种叫时时彩的,五分钟还是多久的出一次三位数
    lxilu
        19
    lxilu  
       2020-10-08 10:47:49 +08:00
    既有股票,其他交易市场也可
    ybbswc
        20
    ybbswc  
       2020-10-08 11:01:29 +08:00
    excel
    randbetween()
    现场写出来就行了。。。。
    ob
        21
    ob  
       2020-10-08 11:02:56 +08:00 via Android
    @whileFalse eos 出块 hash,0.5 秒一块
    Jooooooooo
        22
    Jooooooooo  
       2020-10-08 13:20:47 +08:00   ❤️ 1
    用当天某个大盘指数当中奖号码

    这个不可能被质疑作弊
    zsl199512101234
        23
    zsl199512101234  
       2020-10-08 13:40:25 +08:00
    @renmu123 天气预报...
    renmu123
        24
    renmu123  
       2020-10-08 14:11:33 +08:00 via Android
    @zsl199512101234 比如说取开奖前几分钟的全国省会的天气的平均值,这个基本不可能人为控制,应该也可以进行回溯
    zsl199512101234
        25
    zsl199512101234  
       2020-10-08 15:37:31 +08:00
    @renmu123 这样确实不错
    go522000
        26
    go522000  
       2020-10-08 16:58:35 +08:00   ❤️ 1
    这个玩法有点像以前的一元云购,他是直接获取当前最近一期的快乐十分的中奖号码,然后全部号码数字加起来得到总数。
    jydeng
        27
    jydeng  
       2020-10-08 17:41:56 +08:00
    上证指数
    FS1P7dJz
        28
    FS1P7dJz  
       2020-10-08 17:57:35 +08:00
    真随机数对于普通用户来说不可能去验证,具体实现完全看程序良心
    公布种子和算法,虽然不是"真随机"
    但是相对算是一种公开公平
    leoleoasd
        29
    leoleoasd  
       2020-10-08 18:13:45 +08:00
    股票有周末的话:

    交易平台数字货币的价格

    几个不同的数字货币的最新区块的 id 拼到一起再 hash
    ChaiXingXing
        30
    ChaiXingXing  
       2020-10-08 18:25:21 +08:00 via Android
    有个叫几羊的抽奖 app,根据好几个城市的什么指标来决定第二天开奖号码的功能
    rogwan
        31
    rogwan  
       2020-10-08 18:33:45 +08:00 via iPhone
    取天气温度 x 股票的尾数,能同时操控这两个数据也是神人了
    CrazyRundong
        32
    CrazyRundong  
       2020-10-08 19:07:23 +08:00
    这个需求计算机科学家和统计学家们很早就碰到了呀,所以 random.org 解君愁:

    > RANDOM.ORG offers true random numbers to anyone on the Internet.
    > The randomness comes from atmospheric noise, which for many purposes
    > is better than the pseudo-random number algorithms typically used in computer programs.

    他们还提供了免费的 API
    nightwitch
        33
    nightwitch  
       2020-10-08 19:38:49 +08:00
    真的需要真随机数吗? 这种面向用户的东西,其实“伪随机数”比“真随机数”更讨人喜欢。
    dogfood
        34
    dogfood  
       2020-10-08 21:09:25 +08:00
    DAPP 了解一下
    reus
        35
    reus  
       2020-10-08 21:59:56 +08:00
    @flowercoder 如果一个不够随机,那就用多个指数,A 股怕人操纵,那就加上美股、日股,我看谁有那么大能量
    zhaiziweilove
        36
    zhaiziweilove  
       2020-10-08 22:03:55 +08:00
    气温
    xuanbg
        37
    xuanbg  
       2020-10-08 22:30:06 +08:00
    台球,一杆开球,用落袋的球号。多开几杆,凑个五六位数字还不是轻轻松松。
    flowercoder
        38
    flowercoder  
       2020-10-09 00:35:52 +08:00
    @reus 不是说操控,我是指比如抢楼活动,要拿上证指数后 3 位作为随机数的话,其实到了 2 点 55,个位数在最后发生随机波动性会降低,如果此时有人发现这个现象再参加这次抽奖活动会对其他人不公平,所以我才强调了只取最后两位小数的说法,楼主强调的不就是公平二字嘛,我的想法也就是想尽量做到每个参与人的抽奖概率都是一样的
    fwee
        39
    fwee  
       2020-10-09 00:48:02 +08:00 via Android
    商量好取比特币第 N 个块的 Hash 作为随机数或者种子就行了
    reus
        40
    reus  
       2020-10-09 01:43:49 +08:00 via Android
    @flowercoder 限定时间就行,例如两点半截止
    DoctorCat
        41
    DoctorCat  
       2020-10-09 03:24:29 +08:00
    “至少每天都要有,股票基金指数有周末” ,那就外汇交易,特定某个时间点的 USD/JPY 汇率数值
    LongBitcoin
        42
    LongBitcoin  
       2020-10-09 08:15:23 +08:00
    以太坊上的无损彩票了解下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2581 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 10:47 · PVG 18:47 · LAX 02:47 · JFK 05:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.