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

本文探讨了在网站安全中使用唯一数的重要性,并对比了两种产生唯一数的方法:使用uniqid函数配合mt_rand随机函数与GUID。文章还提供了代码示例,并链接到相关资源进行深入学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

目前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的介绍可以参考:http://www.cnblogs.com/ghj1976/archive/2011/09/21/2184029.html

转载于:https://www.cnblogs.com/echohao/p/5371970.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值