PHP:生成不包括(0、1、O 和 L)的随机代码

标签 php algorithm random

我正在尝试根据以下规则生成随机优惠券代码:

字母数字组合 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/

相关文章:

php - 如何仅使用 yast 命令行在 SUSE 10.1 上将 PHP 5.1 升级到 5.2?

php - 用于更新多行的 PDO 循环

c - 每次执行计数排序都会使我的程序崩溃,无法发现 malloc/free 错误

用于从标准概率分布中采样的 Haskell 包

php - 如何随机优先?

c - 随机()在C中不起作用

gcloud auth print-identity-token 的 PHP 等效项

php - 在 MySQL 数据库中搜索模式中的字符串

javascript - 如何修改算法以减少延迟?

java - Array - Dupe Scanner 和算法的运行时间