使用rand随机函数生成随机字符串<?php
$str = "0123456789abcdefghijklmnopqrstuvwxyz~@#()_";//输出字符集
$n = 10;//输出串长度
$len = strlen($str)-1;
for($i=0 ; $i
$s .= $str[rand(0,$len)];
}
echo $s . "
";
$s = "";
?>
生成多组
$str = "0123456789abcdefghijklmnopqrstuvwxyz~@#()_";//输出字符集
$n = 10;//输出串长度
$len = strlen($str)-1;
for($j=0 ; $j<200 ; $j++){
for($i=0 ; $i
$s .= $str[rand(0,$len)];
}
echo $s . "
";
$s = "";
}
?>
使用PHP自带函数
PHP 7 为 CSPRNG 引入了两种新函数: random_bytes 与 random_int 。
random_bytes 函数返回 string 类型,并接受一个 int 类型为参数,该参数规定了所返回字符串的字节长度。
例如:$bytes = random_bytes('10');
var_dump(bin2hex($bytes));
//possible ouput: string(20) "7dfab0af960d359388e6"
random_int 函数返回给定范围内的整型数字。
举例:
var_dump(random_int(1, 100));
//possible output: 27
random_int 函数返回给定范围内的整型数字。
举例:
var_dump(random_int(1, 100));
//possible output: 27
uniqid();
uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID。
rand();
可以用rand()和srand()配合来生成一个唯一的ID
md5(time());
使用MD5加密当前时间来生成唯一字符串
可以采用散列值、随机数、时间等方法,推荐GUID。
方法一:<?PHP
$str = uniqid(mt_rand(),1);
echo 'sha1: ',sha1($str);
echo '
';
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 "
";
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 "
";
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 "
";
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));
?>
以上方法只是PHP中生成唯一字符串或ID的一部分,欢迎探讨