如何可能生成一个随机的,唯一的字符串使用数字和字母用于验证链接?就像你在一个网站上创建了一个账户,它会给你发一封带有链接的电子邮件,你必须点击那个链接才能验证你的账户
如何使用PHP生成其中一个?
如何可能生成一个随机的,唯一的字符串使用数字和字母用于验证链接?就像你在一个网站上创建了一个账户,它会给你发一封带有链接的电子邮件,你必须点击那个链接才能验证你的账户
如何使用PHP生成其中一个?
当前回答
安全注意:在随机性质量可能影响应用程序安全性的情况下,不应使用此解决方案。特别是,rand()和uniqid()不是加密安全的随机数生成器。关于安全的替代方案,请参阅Scott的回答。
如果你不需要它随着时间的推移是绝对唯一的:
md5 (uniqid (rand()、true))
否则(假设你已经为你的用户确定了一个唯一的登录):
md5(uniqid($your_user_login, true))
其他回答
我总是使用这个my函数来生成一个自定义随机字母数字字符串…希望这对你有所帮助。
<?php
function random_alphanumeric($length) {
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ12345689';
$my_string = '';
for ($i = 0; $i < $length; $i++) {
$pos = random_int(0, strlen($chars) -1);
$my_string .= substr($chars, $pos, 1);
}
return $my_string;
}
echo random_alphanumeric(50); // 50 characters
?>
例如,它生成:Y1FypdjVbFCFK6Gh9FDJpe6dciwJEfV6MQGpJqAfuijaYSZ86g
如果你想与另一个字符串进行比较,以确保它是唯一的序列,你可以使用这个技巧…
$string_1 = random_alphanumeric(50);
$string_2 = random_alphanumeric(50);
while ($string_1 == $string_2) {
$string_1 = random_alphanumeric(50);
$string_2 = random_alphanumeric(50);
if ($string_1 != $string_2) {
break;
}
}
echo $string_1;
echo "<br>\n";
echo $string_2;
它生成两个唯一的字符串:
qsBDs4JOoVRfFxyLAOGECYIsWvpcpMzAO9pypwxsqPKeAmYLOi
Ti3kE1WfGgTNxQVXtbNNbhhvvapnaUfGMVJecHkUjHbuCb85pF
希望这就是你想要的……
对于真正随机的字符串,你可以用
<?php
echo md5(microtime(true).mt_Rand());
输出:
40a29479ec808ad4bcff288a48a25d5c
因此,即使您尝试在同一时间多次生成字符串,也会得到不同的输出。
function codeGenerate() {
$randCode = (string)mt_rand(1000,9999);
$randChar = rand(65,90);
$randInx = rand(0,3);
$randCode[$randInx] = chr($randChar);
return $randCode;
}
echo codeGenerate();
输出
38I7
33V7
E836
736U
以下是我使用的方法:
md5(time() . rand());
// Creates something like 0c947c3b1047334f5bb8a3b7adc1d97b
简单的“一行”字符串哈希生成器 (1byte = 2chars)
$hash = implode('-', [
bin2hex(random_bytes(3)),
bin2hex(random_bytes(3)),
bin2hex(random_bytes(3)),
bin2hex(random_bytes(3)),
]);