rand - php随机生成字符




单行PHP随机字符串生成器? (11)

base_convert(microtime(true), 10, 36);

我正在寻找生成随机/唯一字符串的最短方法,为此我使用了以下两个:

$cClass = sha1(time());

要么

$cClass = md5(time());

但是,我需要字符串以字母字符开头,我正在查看base64编码,但最后添加==然后我需要摆脱它。

用一行代码实现这一目标的最佳方法是什么?

更新:

PRNDL提出了一个很好的建议,我最终使用它,但有点修改

echo substr(str_shuffle(abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ),0, 1) . substr(str_shuffle(aBcEeFgHiJkLmNoPqRstUvWxYz0123456789),0, 31)

将产生32个字符模仿md5哈希,但它总是产生第一个字母字母,就像这样;

然而, Uours真的改进了他的答案;

substr(str_shuffle("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 1).substr(md5(time()),1);

更短,更甜

Anonymous2011的另一个建议非常棒,但出于某种原因,第一个角色总是M,N,Y,Z因此不适合我的目的但是会选择答案,顺便说一下有谁知道它为什么会总是产生那些特定的字母?

这是我修改版本的预览

echo  rtrim(base64_encode(md5(microtime())),"=");


JavaScript解决方案:

function randomString(pIntLenght) {  
  var strChars = “0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz”;
  var strRandomstring = ”;

  for (var intCounterForLoop=0; intCounterForLoop < pIntLenght; intCounterForLoop++) {
      var rnum = Math.floor(Math.random() * strChars.length);
      strRandomstring += strChars.substring(rnum,rnum+1);
  }
   return strRandomstring;
}

alert(randomString(20));

参考URL: 使用JavaScript生成随机字符串

PHP解决方案:

function getRandomString($pIntLength = 30) {
      $strAlphaNumericString     = ’0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’;

      $strReturnString         = ”;

      for ($intCounter = 0; $intCounter < $pIntLength; $intCounter++) {
           $strReturnString .= $strAlphaNumericString[rand(0, strlen($strAlphaNumericString) - 1)];
      }
      return $strReturnString;
}

echo getRandomString(20);

参考URL: 使用PHP生成随机字符串


创建一个200字符长的hexdec字符串:

$string = bin2hex(openssl_random_pseudo_bytes(100));

maaarghk的回答虽然好些。


基于上面的其他好例子,我正在使用这个来一次生成几十个独特的字符串,而不重复它们:

$string = chr(mt_rand(97, 122))
          . substr(md5(str_shuffle(time() . rand(0, 999999))), 1);

这样,我就能在~5秒内生成1.000.000个独特的字符串。 我知道,这并不是那么快,但是因为我只需要它们中的一小部分,所以我很好。 顺便说一下,生成10个字符串的时间少于0.0001 ms。


如果你需要它以字母开头,你可以这样做。 这很麻烦......但它是一条线。

$randomString = substr(str_shuffle("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 1) . substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 10);

echo $randomString;

我发现base64编码对于创建随机字符串很有用,并使用以下行:

base64_encode(openssl_random_pseudo_bytes(9));

它给了我一个随机字符串的12个位置,其余的好处是随机性是“密码强”。


我找到了这样的东西:

$length = 10;
$randomString = substr(str_shuffle(md5(time())),0,$length);
echo $randomString;

我用这个功能

用法:

 echo randomString(20, TRUE, TRUE, FALSE);

  /**
   * Generate Random String
   * @param Int Length of string(50)
   * @param Bool Upper Case(True,False)
   * @param Bool Numbers(True,False)
   * @param Bool Special Chars(True,False)
   * @return String  Random String
   */
  function randomString($length, $uc, $n, $sc) {
      $rstr='';
      $source = 'abcdefghijklmnopqrstuvwxyz';
      if ($uc)
          $source .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
      if ($n)
          $source .= '1234567890';
      if ($sc)
          $source .= '|@#~$%()=^*+[]{}-_';
      if ($length > 0) {
          $rstr = "";
          $length1= $length-1;
          $input=array('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')  
          $rand = array_rand($input, 1)
          $source = str_split($source, 1);
          for ($i = 1; $i <= $length1; $i++) {
              $num = mt_rand(1, count($source));
              $rstr1 .= $source[$num - 1];
              $rstr = "{$rand}{$rstr1}";
          }
      }
      return $rstr;
  }

此函数返回随机小写字符串:

function randomstring($len=10){
 $randstr='';
 for($iii=1; $iii<=$len; $iii++){$randstr.=chr(rand(97,122));};
 return($randstr);
};

生成字符串由随机字符组成,您可以使用此功能

public function generate_random_name_for_file($length=50){
    $key = '';
    $keys = array_merge(range(0, 9), range('a', 'z'));
    for ($i = 0; $i < $length; $i++) {
        $key .= $keys[array_rand($keys)];
    }
    return $key;
}

这实际上取决于您的要求。

我需要字符串在测试运行之间是唯一的,但没有很多其他限制。

我还需要我的字符串从一个角色开始,这对我的目的来说已经足够了。

$mystring = "/a" . microtime(true);

输出示例:

a1511953584.0997







random