如何可能生成一个随机的,唯一的字符串使用数字和字母用于验证链接?就像你在一个网站上创建了一个账户,它会给你发一封带有链接的电子邮件,你必须点击那个链接才能验证你的账户
如何使用PHP生成其中一个?
如何可能生成一个随机的,唯一的字符串使用数字和字母用于验证链接?就像你在一个网站上创建了一个账户,它会给你发一封带有链接的电子邮件,你必须点击那个链接才能验证你的账户
如何使用PHP生成其中一个?
当前回答
对于真正随机的字符串,你可以用
<?php
echo md5(microtime(true).mt_Rand());
输出:
40a29479ec808ad4bcff288a48a25d5c
因此,即使您尝试在同一时间多次生成字符串,也会得到不同的输出。
其他回答
我们可以使用这个代码。我测试了35000个id,没有重复。
<?php
$characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_';
$result = '';
for ($i = 0; $i < 11; $i++)
$result .= $characters[mt_rand(0, 63)];?>
您可以根据需要自由修改它。如果你有任何建议,请随意评论。建议您在使用这些id之前检查数据库中的每个id,这样您的数据库中就有100%唯一的id。
我认为这是最好的方法。
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部分将确保它也是唯一的。
对于真正随机的字符串,你可以用
<?php
echo md5(microtime(true).mt_Rand());
输出:
40a29479ec808ad4bcff288a48a25d5c
因此,即使您尝试在同一时间多次生成字符串,也会得到不同的输出。
我喜欢在处理验证链接时使用散列键。我建议使用微时间和使用MD5的哈希,因为没有理由为什么键应该是相同的,因为它是基于微时间哈希的。
$key = md5(rand()); $key = md5(微时间());