【问题标题】:random string list in phpphp中的随机字符串列表
【发布时间】:2012-02-17 18:10:06
【问题描述】:

我希望根据我拥有的产品数量生成一个随机字符串。例如,我有 100 个名为“test”的产品,我希望能够生成 100 个唯一的产品代码。

我目前正在使用此代码:

<?php   
/**
* The letter l (lowercase L) and the number 1
* have been removed, as they can be mistaken
* for each other.
*/

function createRandomPassword() {
    $chars = "abcdefghijkmnopqrstuvwxyz023456789";
    srand((double)microtime()*1000000);
    $i = 0;
    $pass = '' ;
    while ($i <= 7) {
        $num = rand() % 33;
        $tmp = substr($chars, $num, 1);
        $pass = $pass . $tmp;
        $i++;
    }
    return $pass;
}
// Usage
$password = createRandomPassword();
echo "Your random password is: $password";
?>

干杯

【问题讨论】:

  • 您需要在某个时候包含对已创建日期时间的引用。您的随机数和使用模数不能保证返回唯一值。
  • 值得注意的是 rand() 对随机整数来说是一个糟糕的选择 - 请查看 mt_rand() 以获得更好的随机性。另外,当您删除 l 和 1 时,请查看仅使用 base58 - 这很相似,但出于可读性原因也删除了 o 和 0。

标签: php string random


【解决方案1】:

使用您的函数,您可以生成 100 个随机字符串,即

$product_names = array ();
for ($i=0; $i < 10; $i++ )
  $product_names[] = "code-" . createRandomPassword();

print_r ( $product_names );

不过,您的问题还不清楚。您是否有要遵循的命名约定,是否要以某种模式生成代码,例如“product1”、“product2”、...、“product100”等?

编辑:上面的代码创建以下输出:

Array
(
    [0] => code-opt6ggji
    [1] => code-4qfjt653
    [2] => code-8ky4xxo0
    [3] => code-dfip2o5x
    [4] => code-3e3irymv
    [5] => code-dgqk0rzt
    [6] => code-3fbeq0gr
    [7] => code-tev7fbwo
    [8] => code-idg04mdm
    [9] => code-8c2uuvsj
)

【讨论】:

  • Melissa - 我想生成 100 个完全随机的代码,但都以“code-”开头,然后是随机字符。
  • Melissa - 我已经实现了您的代码,但数组返回空?有什么想法吗?
  • 我再次测试了代码并使用演示输出更新了答案。看起来效果很好。
【解决方案2】:

已经有一个内置函数可以轻松地为您处理这个问题。 uniqid 根据当前时间(以微秒为单位)生成一个带前缀的唯一标识符。

http://php.net/manual/en/function.uniqid.php

<?php
// loop 100 times
for ($i=0; $i<100; $i++)
{
  // print the uniqid based on 'test'
  echo uniqid('test', true);
}
?>

值得注意的是,为了确保真正的唯一性,您需要存储所有生成的代码并检查没有重复发布。

【讨论】:

  • 嗨弗雷泽,这正是我所需要的,但不幸的是,这意味着我将不得不多次回声。附近有吗?
  • 谢谢弗雷泽。有没有办法自定义回显多少个字符?
  • 在不影响结果的唯一性的情况下并非如此。您可以将 more_entropy 参数设置为 false,或者将其省略,这会缩短它们。 echo uniqid('test');
猜你喜欢
  • 2016-06-21
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
  • 2015-07-23
  • 2020-11-23
相关资源
最近更新 更多