我需要通过php随机创建一个类似于此的自动递增字符串。字符串是这样的。所以我需要的是数字和字母的混合,这些数字和字母是随机生成的,并且不必是连续的,就像它的随机一样823N9823并且最多有8个字符
答案 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;
}
上找到
调整要使用的字符级别,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
您可以使用strtoupper
和strtolower
来获取适合您需求的版本。
编辑:
如果你要将它用于关键的事情,而不是仅仅想要一个随机字符串,请将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);