2017-02-16 24 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