一、随机函数和字符池
当我们要生成一个随机字符串时,总是先创建一个字符池,然后用一个循环和mt_rand()或rand()生成php随机数,从字符池中随机选取字符,最后拼凑出需要的长度。
function randomkeys($length) {
$pattern = '1234567890abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLOMNOPQRSTUVWXYZ;
for($i=0;$i<$length;$i++) {
$key .= $pattern{mt_rand(0,35)}; //生成php随机数
}
return $key;
}
echo randomkeys(8);
二、使用 chr() 函数
另一种用PHP生成随机数的方法:利用chr()函数,省去创建字符池的步骤。
function randomkeys($length){
$output='';
for ($a = 0; $a<$length; $a++) {
$output .= chr(mt_rand(33, 126)); //生成php随机数
}
return $output;
}
echo randomkeys(8);
在第二个php随机函数里,先用mt_rand()生成一个介于33到126之间的php随机数,然后用chr()函数转化成字符。第二个函数和第一个函数功能相同,而且更简洁。如果不需要特殊字符的话还是直接写在字符池中比较好。
三、示例
1. 使用 PHP 生成唯一订单号 License Key
<?php
function create_random_string($count, $length, $sperator) {
$result = array();
$random_string = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ';
for ($i = 0; $i < $count; $i++) {
$part_string = '';
for ($j = 0; $j < $length; $j++) {
$part_string .= $random_string[mt_rand(0, strlen($random_string)-1)];
}
$result[] = $part_string;
}
return implode($sperator, $result);
}
$license_key = create_random_string(5, 5, '-');
入库前再检查一次数据库中是否已经存在 License Key,防止出现重复 Key。
2. 生成32位唯一字符串
$uniqid = md5(uniqid(microtime(true),true));
echo $uniqid;