2016-12-15 55 views
-4

什么是创建一个短(6个字符),随机,并具有低collison概率的最佳方式?我需要创建像bit.ly这样的短链接。创建随机短字符串[a-zA-Z0-9] +

MD5,SHA1,uniqid等的问题是,它们不会产生大写字符,所以我在寻找一个区分大小写的输出有更广泛的可能值...

+1

像'CHR(random_int(65,122))'(加上一些按摩什么你接受的字符)给你尽可能最好的随机性;不管这是否是正确的方法,尽管是有争议的。 – deceze

+0

好主意,但范围应该是48-57,65-90,97-122。任何想法如何做到这一点? –

+0

也许我可以使用映射数组[0 ='a',1 =>'b',...],然后random_int索引 –

回答

1

我喜欢用Hashids对于这种事情:

Hashids是small open-source library从数字生成短的,独特的,非连续的ID。

它将像347这样的数字转换成像“yr8”这样的字符串或像[27,986]这样的数字的数组转换成“3kTMd”。

您也可以将这些ids解码回来。这在将几个参数捆绑成一个或简单地将它们用作短UID时非常有用。

Hashids已被移植到多种语言,including PHP

(需要注意的是,尽管名称,Hashids是不是一个真正的散列系统,因为它的设计是可逆的。)