PHP算法——生成唯一字符串
2012-09-09 20:18
302 查看
经常遇到忘记密码的情况,点击一下忘记密码,然后收到更改密码的链接,连接中往往都会有一段很长而且很乱的字符串。试想一下,如果出现了重复的字符串,那岂不是把别人的密码给重置了?
所以产生唯一数对于网站的安全性很重要。
目前PHP能产生唯一数的方法可以采用散列值、随机数、时间等方法,下面是我自己测试的唯一数,个人推荐GUID。
方法一:
采用uniqid函数,配合mt_rand随机函数,最后使用散列值得出最终唯一值。
但是通过测试中,发现随机数的唯一性有些相同部分,大概有11位相同的(但无大碍)
第二种方法:GUID
关于UUID的介绍可以参考:/article/4865528.html
所以产生唯一数对于网站的安全性很重要。
目前PHP能产生唯一数的方法可以采用散列值、随机数、时间等方法,下面是我自己测试的唯一数,个人推荐GUID。
方法一:
<?PHP $str = uniqid(mt_rand(),1); echo 'sha1: ',sha1($str); echo '<br>'; echo 'MD5: ',md5($str); ?>
采用uniqid函数,配合mt_rand随机函数,最后使用散列值得出最终唯一值。
但是通过测试中,发现随机数的唯一性有些相同部分,大概有11位相同的(但无大碍)
第二种方法: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)); ?>
关于UUID的介绍可以参考:/article/4865528.html
相关文章推荐
- PHP算法——生成唯一字符串
- PHP和JS生成唯一字符串
- PHP 生成随机字符串与唯一字符串
- 一些PHP生成唯一字符串的方法
- PHP生成唯一字符串的方法,产生唯一码的方法分析
- PHP生成随机或者唯一字符串
- PHP生成唯一字符串
- php生成唯一字符串
- 生成唯一的字符串算法---UUID
- php生成唯一字符串
- PHP生成唯一字符串的方法,产生唯一码的方法分析
- PHP在分布式环境生成唯一字符串
- PHP生成唯一字符串的方法,产生唯一码的方法分析
- PHP 生成全局唯一id
- PHP生成随机字符串
- 生成随机字符串和验证码的类的PHP实例
- PHP生成唯一订单号的方法汇总
- php生成迷宫和迷宫寻址算法实例
- Twitter全局唯一ID生成算法
- php生成唯一的订单函数分享