如何可能生成一个随机的,唯一的字符串使用数字和字母用于验证链接?就像你在一个网站上创建了一个账户,它会给你发一封带有链接的电子邮件,你必须点击那个链接才能验证你的账户
如何使用PHP生成其中一个?
如何可能生成一个随机的,唯一的字符串使用数字和字母用于验证链接?就像你在一个网站上创建了一个账户,它会给你发一封带有链接的电子邮件,你必须点击那个链接才能验证你的账户
如何使用PHP生成其中一个?
当前回答
我认为这是最好的方法。
str_shuffle(md5(rand(0,100000)))
其他回答
我认为所有现有想法的问题在于,它们可能是独特的,但不是绝对独特的(正如Dariusz Walczak在回复looletech时指出的那样)。我有一个唯一的解。它要求您的脚本具有某种内存。对我来说,这是一个SQL数据库。您也可以简单地写入某个文件。有两种实现:
第一种方法:使用两个而不是一个字段来提供唯一性。第一个字段是一个ID号码,它不是随机的,而是唯一的(第一个ID是1,第二个ID是2…)如果使用SQL,只需使用AUTO_INCREMENT属性定义ID字段。第二个字段不是唯一的,而是随机的。这可以通过人们已经提到的任何其他技术来生成。Scott的想法很好,但是md5很方便,对于大多数目的来说可能已经足够好了:
$random_token = md5($_SERVER['HTTP_USER_AGENT'] . time());
第二种方法:基本相同的想法,但最初选择将生成的字符串的最大数量。这可能是一个非常大的数字,比如一万亿。然后做同样的事情,生成一个ID,但是零填充,这样所有的ID都是相同数量的数字。然后将ID与随机字符串连接起来。对于大多数目的来说,它足够随机,但ID部分将确保它也是唯一的。
斯科特,是的,你写得很好,解决得很好!谢谢。
我还需要为我的每个用户生成唯一的API令牌。以下是我的方法,我使用用户信息(Userid和Username):
public function generateUniqueToken($userid, $username){
$rand = mt_rand(100,999);
$md5 = md5($userid.'!(&^ 532567_465 ///'.$username);
$md53 = substr($md5,0,3);
$md5_remaining = substr($md5,3);
$md5 = $md53. $rand. $userid. $md5_remaining;
return $md5;
}
请看看,如果我能做什么改进,请告诉我。谢谢
这个人被一杯水呛到……
$random= substr(str_shuffle(" 0123456789abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvwxyz *.-_"), 0,10);
简单。 这个随机字符串重复的可能性是0,000000000000000000000000000001^70
使用下面的代码生成11个字符的随机数或根据您的要求更改数字。
$randomNum=substr(str_shuffle("0123456789abcdefghijklmnopqrstvwxyz"), 0, 11);
或者我们可以使用自定义函数来生成随机数
function randomNumber($length){
$numbers = range(0,9);
shuffle($numbers);
for($i = 0;$i < $length;$i++)
$digits .= $numbers[$i];
return $digits;
}
//generate random number
$randomNum=randomNumber(11);
以下是我使用的方法:
md5(time() . rand());
// Creates something like 0c947c3b1047334f5bb8a3b7adc1d97b