有哪些能够生成随机不重复字符串的算法或者函数?

2016-05-18 16:22:50 +08:00
 Specs

有哪些能够生成随机不重复字符串的算法或者函数?最好是 PHP 中的~~

10462 次点击
所在节点    PHP
73 条回复
Specs
2016-05-18 18:57:46 +08:00
@Orzzzz 好像有的服务器是禁用这些函数的吧~
Specs
2016-05-18 18:58:27 +08:00
@dqh3000 OK~
Specs
2016-05-18 18:58:45 +08:00
@hgc81538 好的我试试
misaka19000
2016-05-18 18:59:27 +08:00
UUID
妥妥的
Specs
2016-05-18 18:59:38 +08:00
@est 和历史的~~~
lslqtz
2016-05-18 19:35:47 +08:00
@lslqtz md5 不是唯一的么,随机字符重复+时间戳重复+随机数字重复基本没可能吧
dphdjy
2016-05-18 20:13:33 +08:00
分布式大概用机器编码+特征码+时间

其实用 UUID 不就解决了~
Sunyanzi
2016-05-18 20:15:01 +08:00
@lslqtz 基本没可能和绝对没可能是天壤之别 ... 至于 md5 唯一什么的 ... 你运行一下下面代码开开眼 ..?

<?php
foreach( [ [ '0', '5' ], [ '4', 'd' ] ] as $v )
echo md5( pack( 'H*',
'0e306561559aa787d00bc6f70bbdfe3404cf03659e7' . $v[0] .
'4f8534c00ffb659c4c8740cc942feb2da115a3f415' . $v[1] .
'cbb8607497386656d7d1f34a42059d78f5a8dd1ef'
) ), PHP_EOL;
zynlnow
2016-05-18 21:00:29 +08:00
@kindjeff 那是 python 语法
realpg
2016-05-18 21:32:59 +08:00
不说长度?
$hash="";
for ($i=1;$i<100;$i++) $hash .= md5(rand(1,999999999));
zhujinliang
2016-05-18 21:45:19 +08:00
@realpg 连续做伪随机并不会提高随机性
realpg
2016-05-18 21:47:04 +08:00
@zhujinliang
本题要的并不是随机性,有一定的随机度即可,关键是不重复。
menc
2016-05-18 21:47:05 +08:00
@abelyao md5(time() + ip + mac)
loading
2016-05-18 21:56:33 +08:00
拼接,简单的随机+时间戳

第一时间我想到的是 uuid ,上面有人提到,我就不细说了。
barbery
2016-05-18 23:35:44 +08:00
echo bin2hex(random_bytes($length/2));
lianyue
2016-05-18 23:49:52 +08:00
@ayuanshuai929 md5(time() 高级黑

正确的姿势 uniqid(mt_rand(), true)
techme
2016-05-19 08:55:32 +08:00
Guid().newID()
notgod
2016-05-19 09:00:59 +08:00
查看“ php 短网址生成程序”的算法就好了
Neveroldmilk
2016-05-19 09:26:05 +08:00
大部分语言内置的随机生成器,只能保证在一定范围内哈希值不重复,没有绝对随机的生成器。这一点可以参考 Donald Knuth 的 the art of computer programming 第二卷里的内容。
Specs
2016-05-19 09:51:11 +08:00
@notgod 👌,我查查看看

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

https://www.v2ex.com/t/279578

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

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

© 2021 V2EX