我希望每次有人访问时都会在我的网站上创建一个随机序列。
序列号的格式应为XXXXX-XXXXX-XXXXX-XXXXX。
X表示随机数或大写字母。
不幸的是我不知道该怎么做。有人可以帮帮我吗?
因此,例如随机串行输出可能是:3WT4A-NB34O-JU87P-B3UHS
非常感谢!
答案 0 :(得分:10)
另一种方法是将四个段计算为基数36中的随机数。
function generate_serial() {
static $max = 60466175; // ZZZZZZ in decimal
return strtoupper(sprintf(
"%05s-%05s-%05s-%05s",
base_convert(random_int(0, $max), 10, 36),
base_convert(random_int(0, $max), 10, 36),
base_convert(random_int(0, $max), 10, 36),
base_convert(random_int(0, $max), 10, 36)
));
}
答案 1 :(得分:6)
最直接的解决方案就是这样。
$tokens = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$serial = '';
for ($i = 0; $i < 4; $i++) {
for ($j = 0; $j < 5; $j++) {
$serial .= $tokens[rand(0, 35)];
}
if ($i < 3) {
$serial .= '-';
}
}
echo $serial;
示例输出:
51C8A-P9NZD-UM37Q-YKZHO
答案 2 :(得分:5)
肯定有更好的方法,但这是首先想到的:
$chars = array(0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
$serial = '';
$max = count($chars)-1;
for($i=0;$i<20;$i++){
$serial .= (!($i % 5) && $i ? '-' : '').$chars[rand(0, $max)];
}
05/26/13编辑:建议将Count功能保留在循环之外。这样做的原因是,当您只需运行一次时,您不希望在每次迭代中花费额外的时钟周期来运行此函数。
答案 3 :(得分:4)
有很多方法可以解决这个问题。一个简单的问题是:
$string1 = substr(md5(uniqid(rand(), true)), -5, 5);
$string2 = substr(md5(uniqid(rand(), true)), -5, 5);
$string3 = substr(md5(uniqid(rand(), true)), -5, 5);
$string4 = substr(md5(uniqid(rand(), true)), -5, 5);
$serial = sprintf('%s-%s-%s-%s', $string1, $string2, $string3, $string4);
有更好的方法来生成随机字符串,但这会为您提供您正在寻找的基本功能。
答案 4 :(得分:2)
试试这个
function rand_string( $length ) {
$length += 3;
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$str= "";
$size = strlen( $chars );
for( $i = 0; $i < $length; $i++ ) {
if($i == 5 || $i == 11 || $i == 17 )
$str .= '-';
else
$str .= $chars[ rand( 0, $size - 1 ) ];
}
return $str;
}
$getstring = rand_string(20,5);
echo $getstring;
答案 5 :(得分:2)
如果您只是因为唯一性而要使用此序列号 - 您还可以尝试使用UUID v4,如下面的答案中所述:PHP function to generate v4 UUID
答案 6 :(得分:1)
SO上有很多这样的答案:https://stackoverflow.com/a/4356295/1091195
你可以使用那里提到的随机字符串生成器,你可以使用它一次获得一个20个字母的字符串然后插入短划线,或者你可以调用它4次5个字母并连接结果。