在php中创建随机估计字符串

时间:2010-09-06 14:46:24

标签: php

我需要通过php随机创建一个类似于此的自动递增字符串。字符串是这样的。所以我需要的是数字和字母的混合,这些数字和字母是随机生成的,并且不必是连续的,就像它的随机一样823N9823并且最多有8个字符

6 个答案:

答案 0 :(得分:3)

如果字符不需要是唯一的:

function randomString($length = 8, $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') {
    $randomString = '';
    $numofChars = strlen($chars);
    while (--$length) {
        $randomString .= $chars[mt_rand(0, $numofChars - 1)];
    }
    return $randomString;
}

如果字符必须是唯一的:

function randomString($length = 8, $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') {
    return substr(str_shuffle($chars), 0, 8);
}

答案 1 :(得分:1)

用法:

echo generateRandomName();

功能:

function generateRandomName($length=8,$level=2){

   list($usec, $sec) = explode(' ', microtime());
   srand((float) $sec + ((float) $usec * 100000));

   $validchars[1] = "0123456789abcdfghjkmnpqrstvwxyz";
   $validchars[2] = "0123456789abcdfghjkmnpqrstvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
   $validchars[3] = "0123456789_!@#$%&*()-=+/abcdfghjkmnpqrstvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_!@#$%&*()-=+/";

   $password  = "";
   $counter   = 0;

   while ($counter < $length) {
     $actChar = substr($validchars[$level], rand(0, strlen($validchars[$level])-1), 1);

     // All character must be different
     if (!strstr($password, $actChar)) {
        $password .= $actChar;
        $counter++;
     }
   }

   return $password;

}

PHPToys

上找到

调整要使用的字符级别,3具有$validchars[3]所具有的特殊字符。

您也可以将其命名为:generateRandomName(5)以生成长度为5的名称。

答案 2 :(得分:1)

function generateRandomString($length=8, $characters='abcdefghijklmnopqrstuvwxyz0123456789'){
   $str = '';
   $len = strlen($characters);
   for($i=0; $i<length; $i++){
      $str .= $characters[mt_rand(0, $len)];
   }
   return $string;
}

用法:

//generates a random string, using defaults: length = 8 and characters = a-z, 0-9
echo "Your password: " . generateRandomString();
//custom length: 10
echo "Thingeys: " . generateRandomString(10);
//digits only, length 4
echo "Your PIN: " . generateRandomString(4, '0123456789');

答案 3 :(得分:1)

您可以使用mt_rand()生成随机整数,然后将值转换为字符串。以下函数将为您提供2 821 109 907 456个可能的值。

function random_id($length = 8) {
  $validChars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';

  $rndString = '';

  for($i = 0; $i < $length; $i++) {
    $rndString .= $validChars[mt_rand(0, strlen($validChars) - 1)];
  }

  return $rndString;
}

$lengthEight = random_id();
$lengthTen = random_id(10);

由于可能的字符列表中有更多的字母和数字,你通常会获得一个字母,其中包含更多的字母和数字。

如果您想将结果倾向于一个字母数字更多的字符串,那么您可以使用以下内容:

function skewed_random_id($numericFactor = 0.8, $length = 8) {
  $validAlpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  $validNumeric = '0123456789';

  $rndString = '';

  for($i = 0; $i < $length; $i++) {
    if((mt_rand() / mt_getrandmax()) < $numericFactor) {
      $rndString .= $validNumeric[mt_rand(0, strlen($validNumeric) - 1)];
    } else {
      $rndString .= $validAlpha[mt_rand(0, strlen($validAlpha) - 1)];
    }
  }

  return $rndString;
}

$eightyPercentNumeric = skewed_random_id();
$fiftyFifty = skewed_random_id(0.5);
$allAlpha = skewed_random_id(0);
$allNumeric = skewed_random_id(1);

答案 4 :(得分:0)

echo substr(str_replace(array('/', '+'), '', base64_encode(sha1(uniqid(), true))), 0, 8);

示例输出:

LTeQpy9p
v11oy9R7
TjdkXZru
lh3TvNi4
X5Ca0ZXS
L01RfhxW
QDfwNnGO

您可以使用strtoupperstrtolower来获取适合您需求的版本。


编辑:

如果你要将它用于关键的事情,而不是仅仅想要一个随机字符串,请将uniqid()更改为mt_rand()

echo substr(str_replace(array('/', '+'), '', base64_encode(sha1(
    mt_rand(). '.'. mt_rand(). '.'. mt_rand()%4 //256^8 of input possibilities (8 bytes)
, true))), 0, 8);

答案 5 :(得分:-1)

substr(uniqid(), 0, 8);

http://php.net/uniqid