Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中生成随机代码?_Php_Random - Fatal编程技术网

在php中生成随机代码?

在php中生成随机代码?,php,random,Php,Random,我知道这看起来很傻,但我想用php生成一个8个字符的随机代码,只有数字或字母。我需要它来为每个注册的用户生成密码,谢谢,我更愿意使用它来生成密码 但是如果您想要定制,可以使用类似的方法: function createRandomPassword() { $chars = "abcdefghijkmnopqrstuvwxyz023456789"; srand((double)microtime()*1000000); $i = 0; $pass = ''

我知道这看起来很傻,但我想用php生成一个8个字符的随机代码,只有数字或字母。我需要它来为每个注册的用户生成密码,谢谢,我更愿意使用它来生成密码

但是如果您想要定制,可以使用类似的方法:

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; 

} 
函数createRandomPassword(){
$chars=“abcdefghijkmnopqrstuvxyzo23456789”;
srand((双)微时间()*1000000);
$i=0;
$pass='';
虽然($i使用
base64_encode()
,但给它输入一些
rand()
数字,并切掉前8个字符,它们肯定是字母或数字。这不是一个完全随机的组合,因为输入的只是整数。但对于默认用户密码来说,这已经足够了。(或者通过
chr()使用
rand()
编码前。)


PHP有一个函数(也是文档中声称更快的函数)

因此,请这样做:

$i = 0;
$pwd = "";
while ( $i < 10) {
    if (mt_rand() % 2 == 0) {
        $pwd .= rand();
    } else {
        $pwd .= char(rand());
        // http://php.net/manual/en/function.chr.php
    }
    $i += 1;
}
$i=0;
$pwd=“”;
而($i<10){
如果(mt_rand()%2==0){
$pwd.=rand();
}否则{
$pwd.=char(rand());
// http://php.net/manual/en/function.chr.php
}
$i+=1;
}

为了方便起见,像这样的东西怎么样:

$pass = substr(md5(uniqid(mt_rand(), true)) , 0, 8);

一个好的或有效的方法是:

public function generateRandomString($length = 8) {
    $characters = '0123456789abcdefghijklmnopqrs092u3tuvwxyzaskdhfhf9882323ABCDEFGHIJKLMNksadf9044OPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}
公共函数生成器域字符串($length=8){
$characters='0123456789abcdefghijklmnopqrs092u3tuvwxyzaskdhff9882323abcdefghijklmnksadf9044opqrstuvxyz';
$charactersLength=strlen($characters);
$randomString='';
对于($i=0;$i<$length;$i++){
$randomString.=$characters[rand(0,$charactersLength-1)];
}
返回$randomString;
}

通过更改$length变量,您可以根据需要生成字母数字代码。

这就像charm一样有效,您可以选择将生成的字符类型,如:
“大写”、“小写”、“数字”、“特殊字符”

要使用它:

echo create_random_code(
    6,
    [
        'Upper_Case'        => true,
        'Lower_Case'        => true,
        'Number'            => true,
        'Special_Character' => false
    ]
);

出于您的目的,您可以使用以下方法生成随机代码:

bin2hex(random_bytes(10))
请注意,这里我们使用的是
random_bytes
,它是在PHP7中引入的,并使用加密随机生成器,如果您希望随机代码难以猜测,这一点很重要。
random_int
也在PHP7中引入,同样使用加密随机生成器

许多其他随机值生成解决方案,包括涉及
time()
microtime()
uniqid()
rand()
mt\u rand()
stru shuffle()
array\u rand()
,以及
shuffle()
,如果随机字符串将用作密码、承载凭证、nonce、会话标识符、“验证码”或“确认码”或另一个秘密值,则更具可预测性且不合适

上面的代码生成一个由20个十六进制字符(0到9,或a到F)组成的字符串。如果您想使用更大的字符集(如所有大写字母、所有小写字母和10位数字),这是一个更复杂的过程,但您必须使用
随机数
而不是
随机数()
mt_rand()
str_shuffle()
等,如果字符串将用作密码、“确认码”或其他秘密值。请参阅


我还列出了生成唯一标识符的时间,尤其是随机标识符。

你在谷歌上搜索过“php随机密码生成器”吗?点击次数很多…另一个选项是通过设置允许的最小和最大值ie-
$pwd=rand(100000009999999)只使用一次
rand()
@Patrick--好主意!如果速度是个问题,那么你可以用字符串串接或对char的调用来代替内部随机调用。使用
md5()
思想,你可以接受
$pass
你现在返回的代码,而不是
返回substr(md5($pass),0,8)
我认为L和1是故意留下来的!因为它们看起来很像?与md5或其他哈希函数相比,此函数的优点是可以省去看起来相似的字符,例如上面的示例省去了L和1。我现在使用这样的内容:````$chars=“abcdefghjjkmnopqrstuvwxyzo23456789”;$i=0;$token='';while($i你可能想延长时间,否则黑客可能会利用。这是一个很长的机会,但仍然是可能的。我认为“长时间”是一个轻描淡写的说法。;)不过,一些黑客所拥有的,就是时间:-)很好!我没有按照你说的原则去做,但是我把子字符串的起始位置设置为随机的。更好吗?;)我只是做了一点研究,结果表明这一切都是徒劳的,你只需将true添加到
uniqid()
的第二个参数,它将为唯一值添加熵:-)
echo create_random_code(
    6,
    [
        'Upper_Case'        => true,
        'Lower_Case'        => true,
        'Number'            => true,
        'Special_Character' => false
    ]
);
bin2hex(random_bytes(10))