Heim  >  Artikel  >  Backend-Entwicklung  >  php 如何產生不重複的字串?

php 如何產生不重複的字串?

WBOY
WBOYOriginal
2016-09-25 09:37:031064Durchsuche

請問該如何用php產生不重複的字串?
如同youtube後面的結尾會出現的字串:6Af6b_wyiwI (網址可接受的字元)
而且有大小寫之分?
以及可以設定每次出現的字串長度
例如4~7隨機的
就會變成 ga79e aa09gsw awe9f諸如此類(每次都會這樣變化

回复内容:

請問該如何用php產生不重複的字串?
如同youtube後面的結尾會出現的字串:6Af6b_wyiwI (網址可接受的字元)
而且有大小寫之分?
以及可以設定每次出現的字串長度
例如4~7隨機的
就會變成 ga79e aa09gsw awe9f諸如此類(每次都會這樣變化

建议用时间戳,可以MD5或sha1加密,但长度是固定的大小写固定,可以截取,也可以自己定义加密规则,自己定义的话,就可以设置想要的长度。这样做没有重复的可能(不可能事件)
如果是自己定义字符串,然后随机获取的话,有重复的可能性(小概率事件)。
如果是只是写url的话
你也可以参考segmentfault的url写法

https://segmentfault.com/q/10...

生成顺序增长的数列,然后通过ascii码转为字符串

PHP 10进制和62进制互转:

<code>echo gmp_strval(gmp_init('9876543210', 10), 62)."\n"; //AmOy42
echo gmp_strval(gmp_init('AmOy42', 62), 10)."\n";     //9876543210</code>

上面的AmOy42应该就是你想要的"字符串",其实它是一个62进制数字.
62进制(10+26+26)利用10个数字+26个小写字母+26个大写字母来表示数值,从而大大减少数值位数.
9876543210则是数据库里的自增ID,从而实现唯一.

说个简单的方法,sha256等hash算法获取二进制数据(而不是十六进制字符串),然后再用base64编码

这参考短链接生成方法就OK

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn