您好我想生成数以千计的独特不可预测的连续剧,所以我写了这个函数
function generate_serials($count){
$serials = array();
$token = '8uhf7+-=??/\/';
for($i = 1; $i <= $count; $i++){
$hash = sha1(md5( $token . ( time() + (432 * 1000) ) ));
$serial = '';
for($j = 0; $j < 12; $j++){
if($j == 4 || $j == 8) $serial .= '-';
$serial .= $hash[rand(0, 39)];
if(in_array($serial, $serials)){
$serial = '';
$j = 0;
}
}
$serials[] = $serial;
}
return $serials;
}
我对这种方法几乎没有什么问题。
我不知道为什么,但我不相信这一点。 (因为我一直认为我的解决方案和我是愚蠢的)这有什么问题吗?
另一个问题是性能需要大约20-30秒,是自然还是弄得一团糟?
的更新 的
对不起,伙计们 性能问题是内循环的计数器与外循环的名称相同。我的错误! :d答案 0 :(得分:3)
您的解决方案过于复杂。它不一定是这样。如果您安装了OpenSSL,请查看openssl_random_pseudo_bytes
$serial = hash('sha512', mt_rand());
但是mt_rand
不会生成加密安全值,因此可能不会像您希望的那样不可预测。