如何使用数字和字母生成一个随机且唯一的字符串用于验证链接?就像在网站上创建账户并通过电子邮件发送带有链接的邮件,您需要点击该链接以验证您的账户一样。
我如何使用PHP生成此类字符串?
如何使用数字和字母生成一个随机且唯一的字符串用于验证链接?就像在网站上创建账户并通过电子邮件发送带有链接的邮件,您需要点击该链接以验证您的账户一样。
我如何使用PHP生成此类字符串?
function random_code($length)
{
return substr(base_convert(sha1(uniqid(mt_rand())), 16, 36), 0, $length);
}
echo random_code(6);
/*sample output
* a7d9e8
* 3klo93
*/
首先生成一个具有加密安全性的随机字节集
第二步是将这些随机字节转换成可打印字符串
$length = 32;
//PHP 7+
$bytes= random_bytes($length);
//PHP < 7
$bytes= openssl_random_pseudo_bytes($length);
您希望将这些随机字节转换为可打印字符串:
您可以使用bin2hex函数:
$string = bin2hex($bytes);
或者 base64_encode :
$string = base64_encode($bytes);
请注意,如果使用base64编码,您无法控制字符串的长度。 您可以使用bin2hex来控制长度,使用 32字节 将变为 64个字符的字符串 。 但是,它只能在偶数长度下正常工作。
因此,您只需执行以下操作::
$length = 32;
if(PHP_VERSION>=7){
$bytes= random_bytes($length);
}else{
$bytes= openssl_random_pseudo_bytes($length);
}
$string = bin2hex($bytes);
md5(time() . rand());
// Creates something like 0c947c3b1047334f5bb8a3b7adc1d97b
这是一个简单的“一行”字符串哈希生成器,例如77zd43-7bc495-64cg9a-535548
(1字节=2个字符)。
$hash = implode('-', [
bin2hex(random_bytes(3)),
bin2hex(random_bytes(3)),
bin2hex(random_bytes(3)),
bin2hex(random_bytes(3)),
]);
这个人噎到了一杯水...
$random= substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*.-_"), 0, 10);
简单易懂。 这个随机字符串重复的可能性是 0.000000000000000000000000000001^70。
a
组成的字符串应该是可能的。因此,该字符串也应该被重复10次的长度。 - halloei这是一款由我开发的终极唯一ID生成器,适用于您的需求。
<?php
$d=date ("d");
$m=date ("m");
$y=date ("Y");
$t=time();
$dmt=$d+$m+$y+$t;
$ran= rand(0,10000000);
$dmtran= $dmt+$ran;
$un= uniqid();
$dmtun = $dmt.$un;
$mdun = md5($dmtran.$un);
$sort=substr($mdun, 16); // if you want sort length code.
echo $mdun;
?>
你可以随意使用任何“var”来代替你的id。但是$mdun更好,你可以将md5替换为sha1以获得更好的代码,但那会很长,可能你不需要。
谢谢。
function random_string($length = 8) {
$alphabets = range('A','Z');
$numbers = range('0','9');
$additional_characters = array('_','=');
$final_array = array_merge($alphabets,$numbers,$additional_characters);
while($length--) {
$key = array_rand($final_array);
$password .= $final_array[$key];
}
if (preg_match('/[A-Za-z0-9]/', $password))
{
return $password;
}else{
return random_string();
}
}
在处理验证链接时,我喜欢使用哈希键。建议使用微秒时间戳并使用MD5进行哈希,因为它基于微秒时间戳进行哈希,所以不应该存在相同的键。
$key = md5(rand());
$key = md5(microtime());
<?php
function generateRandomString($length = 11) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
?>
上述函数会生成一个长度为11个字符的随机字符串。
uniqid
是不安全的。使用类似于Random::alphanumericString($length)
或者Random::alphanumericHumanString($length)
这样的东西。 - caw