生成数千个独特的不可预测的序列号

时间:2013-02-26 11:36:04

标签: php

您好我想生成数以千计的独特不可预测的连续剧,所以我写了这个函数

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;
}

我对这种方法几乎没有什么问题。

  1. 我不知道为什么,但我不相信这一点。 (因为我一直认为我的解决方案和我是愚蠢的)这有什么问题吗?

  2. 另一个问题是性能需要大约20-30秒,是自然还是弄得一团糟?

  3. 更新

    对不起,伙计们 性能问题是内循环的计数器与外循环的名称相同。我的错误! :d

1 个答案:

答案 0 :(得分:3)

您的解决方案过于复杂。它不一定是这样。如果您安装了OpenSSL,请查看openssl_random_pseudo_bytes

或者您也可以使用mt_randhash

$serial = hash('sha512', mt_rand());

但是mt_rand不会生成加密安全值,因此可能不会像您希望的那样不可预测。