2017-02-16 9 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 = ''; 
    } 

$ quantityが数千を超えると永遠に実行できるように最適化する必要があります。

私はピンが存在するかどうかを調べているビットが時間だと思っています。私はランダムな文字列が一意であることを保証するためのより効率的な方法が必要であると確信しています。

思考?ありがとう!この質問への

******指摘ランダムハッシュ生成は、ここで取り上げてきたように******

おそらく一部2 ...

クライアントがセットを要求していますランダムコードの文字の選択 - '123456789ABCDEFGHJKMNPQRSTUVWXYZ' md5ハッシュによる文字出力を制限する方法はありますか?

+0

感謝。私はその質問を読んだ。私は、例のように広告ホックを作成するかどうかを大量に生成しようとしていたことを考えると、それは偽ではないと思いました。しかし、今私は全体のアプローチを再考しています。 – RushVan

答えて

0

はるかに簡単な方法:ジョンのことを指摘して

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

これは、生成されるものが現在のセットに対して一意であることをどのようにして保証しますか? – RushVan

+0

確認コードでデータベースと思って確認し、確認したら削除することができます。それが出たら、再生してください。 – Ad5001

+0

Fair。はっきりする。私のスクリプトは一括してコードを生成する必要があります。一人ではありません。ですから、一度に15kを生成して挿入する必要があります。しかし、今私はそれについて考えていると思いますが、私はプロセス全体を再考し、必要に応じて事前に生成する必要はありません。 – RushVan

関連する問題