V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
solomensec
V2EX  ›  PHP

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

  •  
  •   solomensec · 2018-08-20 00:14:22 +08:00 via iPhone · 2946 次点击
    这是一个创建于 2290 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不知道是不是应该这样问问题,如题。本机测试从 5.3 开始已经不能播种随机种子,有一款程序是以前别人根据 5.2 而写的,希望能移植到更高的版本。随机种子从 5.3 开始就系统内置了。
    19 条回复    2018-08-22 20:57:04 +08:00
    VgV
        1
    VgV  
       2018-08-20 02:00:05 +08:00
    mt_rand
    solomensec
        2
    solomensec  
    OP
       2018-08-20 07:54:49 +08:00 via iPhone
    @VgV 这个不行吧
    victoryss
        3
    victoryss  
       2018-08-20 09:17:24 +08:00
    uniqid
    Mitt
        4
    Mitt  
       2018-08-20 09:44:52 +08:00
    mt_srand() 函数从 5.2.1 开始变更了种子算法 但是是一直支持的 php7 都支持,只是说同样的种子 5.2.1 以前跟 5.2.1 以后出来的数字不一样了而已
    solomensec
        5
    solomensec  
    OP
       2018-08-20 10:55:15 +08:00 via iPhone
    @Mitt 我知道是支持的,但是现在是系统内置了,我用 mt_rand()函数经常得到相同的随机数,因为我是做优化的,所以,想更改一个以前随机显示关键词,随机地址的功能。
    solomensec
        6
    solomensec  
    OP
       2018-08-20 10:55:44 +08:00 via iPhone
    @victoryss 这个应该不适用随机播种种子吧?兄台。
    wdlth
        7
    wdlth  
       2018-08-20 11:24:27 +08:00 via Android
    我们一般用 openssl 那个
    solomensec
        8
    solomensec  
    OP
       2018-08-20 11:30:14 +08:00 via iPhone
    @wdlth 求指导。openssl 哪个?能否具体说说吗?
    liaohongxing
        9
    liaohongxing  
       2018-08-20 12:01:31 +08:00
    php7 的 random_int 测试了一下 ,并发的时候重复几率很小 ,不知道内部用了什么算法
    victoryss
        10
    victoryss  
       2018-08-20 14:19:32 +08:00
    @solomensec
    uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID。默认生成 ID 的长度为 13 位或者 23 位,由英文字母和数字组成。
    ```
    echo uniqid(); // 生成 13 位字符串,如:5b7a5d13ea030

    ```

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

    ```
    echo md5(uniqid());

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

    mt_rand 随机数-Swoole-Swoole 文档中心
    https://wiki.swoole.com/wiki/page/732.html
    airdge
        19
    airdge  
       2018-08-22 20:57:04 +08:00
    rand+时间戳应该就够用了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1847 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:28 · PVG 00:28 · LAX 08:28 · JFK 11:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.