【问题标题】:Random string in PHP not enough characters [duplicate]PHP中的随机字符串没有足够的字符[重复]
【发布时间】:2017-12-09 04:24:19
【问题描述】:

我正在尝试用 5 个字母/数字在 PHP 中创建一些随机字符串。 它工作正常,但有时我得到一个较短的字符串。

$characterset='ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
$count=0;
$lenght=strlen($characterset);
$i=5; #number of characters
while($count < $i){
  $num=rand(1,$lenght);
  $letter=substr($characterset, $num, 1);
  $string.=$letter;
  $count++;
}

而strlen($string)有时是4(查了100条记录,85是4个字符)

【问题讨论】:

  • 无论如何,为什么它只是有时不正确? 99% 的记录都很好
  • 因为substr 静默返回false,如果您尝试从字符串结尾以外的位置获取字符...
  • 试试this
  • 您可能想通过在循环外声明$string = '';' 来修复Notice: Undefined variable: string.= 运算符只能在预初始化变量上正常工作

标签: php


【解决方案1】:

字符串字符,如数组,从零开始计数。多次运行您的代码:除了有时字符不足之外,请注意您从未在其中获得 A?

$num = rand(0,$lenght-1); 会做到的。

作为替代方法,您可以这样做:

$max_b36 = str_repeat("Z",$number_of_characters);
$max_dec = base_convert($max_b36,36,10);
$rand_dec = rand(0,$max_dec);
$rand_b36 = base_convert($rand_dex,10,36);
$result = sprintf("%0".$number_of_characters."s",$rand_b36);

但此方法使用(可能)大数字,因此它仅支持 5 个字符(在 32 位系统上)或 12 个字符(在 64 位系统上)。

【讨论】:

    【解决方案2】:

    就我个人而言,我会用这一行奇迹替换你的整个逻辑:

    print $characters = substr(
                              str_shuffle('ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'),
                              0,5)
                              );
    

    (稍微关闭格式,使其适合屏幕)

    【讨论】:

    • 值得注意的是,这将生成没有重复字符的字符串。不过很酷!
    【解决方案3】:

    感谢大家的帮助,以下代码运行良好:

    $characters='ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
    $string = '';
    $random_string_length = 5;
    $max = strlen($characters) - 1;
    for ($i = 0; $i < $random_string_length; $i++) {
         $string .= $characters[mt_rand(0, $max)];
    }
    

    是否可以避免使用相同的字符串?我生成了 50 000 条记录,其中有 48 条相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-29
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      • 2022-10-19
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      相关资源
      最近更新 更多