新手求问。mt_srand()和 srand()的替代方案? - V2EX
solomensec
V2EX    PHP

新手求问。mt_srand()和 srand()的替代方案?

  •  
  •   solomensec Aug 20, 2018 via iPhone 3623 views
    This topic created in 2822 days ago, the information mentioned may be changed or developed.
    不知道是不是应该这样问问题,如题。本机测试从 5.3 开始已经不能播种随机种子,有一款程序是以前别人根据 5.2 而写的,希望能移植到更高的版本。随机种子从 5.3 开始就系统内置了。
    19 replies    2018-08-22 20:57:04 +08:00
    VgV
        1
    VgV  
       Aug 20, 2018
    mt_rand
    solomensec
        2
    solomensec  
    OP
       Aug 20, 2018 via iPhone
    @VgV 这个不行吧
    victoryss
        3
    victoryss  
       Aug 20, 2018
    uniqid
    Mitt
        4
    Mitt  
       Aug 20, 2018
    mt_srand() 函数从 5.2.1 开始变更了种子算法 但是是一直支持的 php7 都支持,只是说同样的种子 5.2.1 以前跟 5.2.1 以后出来的数字不一样了而已
    solomensec
        5
    solomensec  
    OP
       Aug 20, 2018 via iPhone
    @Mitt 我知道是支持的,但是现在是系统内置了,我用 mt_rand()函数经常得到相同的随机数,因为我是做优化的,所以,想更改一个以前随机显示关键词,随机地址的功能。
    solomensec
        6
    solomensec  
    OP
       Aug 20, 2018 via iPhone
    @victoryss 这个应该不适用随机播种种子吧?兄台。
    wdlth
        7
    wdlth  
       Aug 20, 2018 via Android
    我们一般用 openssl 那个
    solomensec
        8
    solomensec  
    OP
       Aug 20, 2018 via iPhone
    @wdlth 求指导。openssl 哪个?能否具体说说吗?
    liaohongxing
        9
    liaohongxing  
       Aug 20, 2018
    php7 的 random_int 测试了一下 ,并发的时候重复几率很小 ,不知道内部用了什么算法
    victoryss
        10
    victoryss  
       Aug 20, 2018
    @solomensec
    uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID。默认生成 ID 的长度为 13 位或者 23 位,由英文字母和数字组成。
    ```
    echo uniqid(); // 生成 13 位字符串,如:5b7a5d13ea030

    ```

    如果要保证不重复的话可以用 MD5

    ```
    echo md5(uniqid());

    ```
    wdlth
        11
    wdlth  
       Aug 20, 2018
    @solomensec openssl_random_pseudo_bytes()
    你也可以使用 random_compat,里面有几种模拟 PHP 7 生成随机数据的方式。
    solomensec
        12
    solomensec  
    OP
       Aug 21, 2018 via iPhone
    @victoryss 这个,可以,谢谢了。
    solomensec
        13
    solomensec  
    OP
       Aug 21, 2018 via iPhone
    @victoryss 只是有一个,需要带整数型的,这个是字符串啊
    solomensec
        14
    solomensec  
    OP
       Aug 21, 2018 via iPhone
    @wdlth 兄台,需要随机整数的,随机字符串没办法啊
    wdlth
        15
    wdlth  
       Aug 21, 2018 via Android
    @solomensec 可以生成字节数组再转成整数……
    solomensec
        16
    solomensec  
    OP
       Aug 21, 2018 via iPhone
    @wdlth 这个可以有,谢谢了
    solomensec
        17
    solomensec  
    OP
       Aug 21, 2018 via iPhone
    @wdlth 还有一个疑问就是,例如有一个文数组里包含的都是我的关键词,关键词数组里包含很多组员,如何才能随机调取,而不重复呢?可能一个页面调取 80 多个不同的关键词。
    Junjunya
        18
    Junjunya  
       Aug 22, 2018
    敢问楼主 是不是运行在 CLI 模式下 。
    如果是的话 可以参考下下面的文档

    mt_rand 随机数-Swoole-Swoole 文档中心
    https://wiki.swoole.com/wiki/page/732.html
    airdge
        19
    airdge  
       Aug 22, 2018
    rand+时间戳应该就够用了
    About     Help     Advertise     Blog     API     FAQ     Solana     977 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 21:57 PVG 05:57 LAX 14:57 JFK 17:57
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86