我正在尝试根据以下规则生成随机优惠券代码:
字母数字组合 5 个大写字符(A-Z、0-9,并去掉 1、0、I、O)。
这是我的尝试
<?php
function generateRandomString($length = 5) {
return substr(str_shuffle("23456789ABCDEFGHIJKMNPQRSTUVWXYZ"), 0, $length);
}
echo generateRandomString();
?>
但我不确定是否有更好的方法来做到这一点
最佳答案
如果你需要多次调用这个函数,你当前的实现会很慢,因为它使用了比必要更多的随机函数调用(如果 $length < 32)。此外,如果您允许的字符集小于结果中的字符数,则您当前的实现也将返回错误的结果。而且您的实现不允许在结果中重复字符,但在规范中不禁止重复字符。
更准确一点的解决方案是使用array_rand()
:
function generateRandomString($length = 5) {
$allowed = str_split('23456789ABCDEFGHIJKMNPQRSTUVWXYZ'); // it is enough to do it once
$res = '';
foreach (array_rand($allowed, $length) as $k)
$res .= $allowed[$k];
return $res;
}
关于PHP:生成不包括(0、1、O 和 L)的随机代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36037386/