PHP算法——生成唯一字符串

经常遇到忘记密码的情况,点击一下忘记密码,然后收到更改密码的链接,连接中往往都会有一段很长而且很乱的字符串。试想一下,如果出现了重复的字符串,那岂不是把别人的密码给重置了?

所以产生唯一数对于网站的安全性很重要。

目前PHP能产生唯一数的方法可以采用散列值、随机数、时间等方法,下面是我自己测试的唯一数,个人推荐GUID。

方法一:

<?PHP $str = uniqid(mt_rand(),1); echo 'sha1: ',sha1($str); echo '<br>'; echo 'MD5: ',md5($str); ?>

采用uniqid函数,配合mt_rand随机函数,最后使用散列值得出最终唯一值。

《PHP算法——生成唯一字符串》

但是通过测试中,发现随机数的唯一性有些相同部分,大概有11位相同的(但无大碍)

《PHP算法——生成唯一字符串》

第二种方法:GUID

<?PHP echo sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535)); echo "<br>"; echo sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535)); echo "<br>"; echo sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535)); echo "<br>"; echo sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535)); ?>

《PHP算法——生成唯一字符串》

关于UUID的介绍可以参考:http://www.cnblogs.com/ghj1976/archive/2011/09/21/2184029.html

    原文作者:小 伍
    原文地址: https://www.cnblogs.com/picaso/archive/2012/09/09/2677538.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞