Php 生成将激活密钥另存为产品密钥

Php 生成将激活密钥另存为产品密钥,php,security,random,Php,Security,Random,我试图创建一个函数,它创建一个随机字符串。此字符串应仅由字母、大写字母和数字组成。它将用于激活产品。因此,用户必须将其键入文本字段。 到目前为止,我发现了以下功能: function random_str($length, $keyspace = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'){ $pieces = []; $max = mb_strlen($keyspace, '8bit') - 1; for ($i = 0; $i < $

我试图创建一个函数,它创建一个随机字符串。此字符串应仅由字母、大写字母和数字组成。它将用于激活产品。因此,用户必须将其键入文本字段。 到目前为止,我发现了以下功能:

function random_str($length, $keyspace =  '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'){

  $pieces = [];
  $max = mb_strlen($keyspace, '8bit') - 1;
  for ($i = 0; $i < $length; ++$i) {
      $pieces []= $keyspace[random_int(0, $max)];
  }
  return implode('', $pieces);
}

我对随机函数没有那么多经验。那么,有什么需要改进的吗?或者您会建议使用不同的函数吗?

要生成一个加密安全的随机字符串(我建议将其作为激活密钥),我宁愿使用openssl_random_pseudo_bytes

您可以在中找到文档和一些有用的信息,例如,如何获取包含0-9A-Z字符的随机字符串,而不仅仅是0-9A-F

从PHP7.0开始,您还可以使用,这也是加密安全的。

使用rand函数而不是“random\u int”

使用PHP函数uniqid;,专业提示:也可以在末尾添加一个大约8位数的随机数,然后根据您的具体要求,按照您的意愿进行编码
function random_str($length, $keyspace =  
 '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'){

 $pieces = [];
 $max = mb_strlen($keyspace, '8bit') - 1;
for ($i = 0; $i < $length; ++$i) {
  $pieces []= $keyspace[rand(0, $max)];
 }
 return implode('', $pieces);
}

 echo random_str('50');

// Output //

P7V55MYPQJGRNQ8W0VW7TRKBDK2B7NXWUT20F0P6J5Y7W63X20