2017-02-16 58 views
0

我有这个脚本生成随机的促销代码。如何改善这个随机促销代码生成器脚本?

} 
    $length = 10; 
    $characters = '123456789ABCDEFGHJKMNPQRSTUVWXYZ'; 
    $charactersLength = strlen($characters); 
    $event = $request->event; 
    $prefix = $request->prefix; 
    $quantity = $request->quantity; 
    $randomString = ''; 
    for ($x = 0; $x <= $quantity; $x++) { 
     for ($i = 0; $i < $length; $i++) { 
      $randomString .= $characters[rand(0, $charactersLength - 1)]; 
     } 

     $pin = "$prefix"."$randomString"; 
     $exists = Pin::where('pin', $pin)->first(); 
     if(!$exists){ 
      $new['pin'] = $pin; 
      $new['event'] = $event; 
      $new['user'] = ''; 
      Pin::create($new); 
     } 

     $randomString = ''; 
    } 

它的工作原理,但需要进行优化,因为它可能需要永远执行,当$数量超过几千。

我怀疑时间是寻找引脚是否存在的位。我确定必须有一种更有效的方法来确保随机字符串是唯一的。

想法?谢谢!

******正如指出的随机哈希生成这里已经解决******

也许部分2到这个问题,然后...

客户端请求一组为随机码选择字符 - '123456789ABCDEFGHJKMNPQRSTUVWXYZ'。有没有办法限制由MD5散列字符输出?

+0

感谢指出了这一点约翰。我确实读过这个问题。我不认为这是一个愚蠢的事情,因为我试图批量生成,并创建像例子那样的广告。但是,现在我正在重新思考整个方法。 – RushVan

回答

0

一个更简单的方法:

$randomString = sha1(rand(0, 2000)); 
+0

这是如何确保生成的内容对当前设置唯一的? – RushVan

+0

您可以使用确认码检查数据库,并在确认后删除它们。如果它退出,重新生成一个。 – Ad5001

+0

公平。要清楚。我的脚本需要批量生成代码。没有一个。所以我需要一次生成并插入15k。虽然,现在我想我已经考虑过了,我可以重新思考整个过程,并根据需要生成它们,而不是事先进行...... – RushVan