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

2018 年 8 月 20 日
 solomensec
不知道是不是应该这样问问题,如题。本机测试从 5.3 开始已经不能播种随机种子,有一款程序是以前别人根据 5.2 而写的,希望能移植到更高的版本。随机种子从 5.3 开始就系统内置了。
3506 次点击
所在节点    PHP
19 条回复
VgV
2018 年 8 月 20 日
mt_rand
solomensec
2018 年 8 月 20 日
@VgV 这个不行吧
victoryss
2018 年 8 月 20 日
uniqid
Mitt
2018 年 8 月 20 日
mt_srand() 函数从 5.2.1 开始变更了种子算法 但是是一直支持的 php7 都支持,只是说同样的种子 5.2.1 以前跟 5.2.1 以后出来的数字不一样了而已
solomensec
2018 年 8 月 20 日
@Mitt 我知道是支持的,但是现在是系统内置了,我用 mt_rand()函数经常得到相同的随机数,因为我是做优化的,所以,想更改一个以前随机显示关键词,随机地址的功能。
solomensec
2018 年 8 月 20 日
@victoryss 这个应该不适用随机播种种子吧?兄台。
wdlth
2018 年 8 月 20 日
我们一般用 openssl 那个
solomensec
2018 年 8 月 20 日
@wdlth 求指导。openssl 哪个?能否具体说说吗?
liaohongxing
2018 年 8 月 20 日
php7 的 random_int 测试了一下 ,并发的时候重复几率很小 ,不知道内部用了什么算法
victoryss
2018 年 8 月 20 日
@solomensec
uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID。默认生成 ID 的长度为 13 位或者 23 位,由英文字母和数字组成。
```
echo uniqid(); // 生成 13 位字符串,如:5b7a5d13ea030

```

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

```
echo md5(uniqid());

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

mt_rand 随机数-Swoole-Swoole 文档中心
https://wiki.swoole.com/wiki/page/732.html
airdge
2018 年 8 月 22 日
rand+时间戳应该就够用了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/481273

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX