2012-09-27 115 views
2

我需要防止生成的代碼產生重複。這是正確的方式嗎?還是有更高效的方法?防止重複的隨機代碼生成?

function generate_code() 
{  
    $s = get_random_code(); 

    // check if code is already in db 
    if (is_in_db($s)) 
     return generate_code(); 
    else 
     return $s; 
} 
+0

看起來好像沒什麼問題。 – Peon

+1

你應該添加一個遞歸限制 – Tchoupi

+0

@MathieuImbert你如何做到這一點?它只是反變量? – IMB

回答

1

生成如果生成代碼之後,另一個複製?

function generate_code() 
{   
    $s = get_random_code(); 

    // check if code is already in db 
    while (is_in_db($s)) { 
     $s = get_random_code(); 
    } 

    return $s; 
} 

無需做遞歸。

1

你可以使用一個while循環,以避免可能的遞歸深度限制:

function generate_code() 
{  
    $s = get_random_code(); 

    // check if code is already in db 
    while (is_in_db($s)) 
     $s = get_random_code(); 

    return $s; 
} 
0

是的。連接你的主鍵,如果你願意的話,添加一些獨特的列。並散列它。我並不完全確定,但從兩個不同值獲得相同散列的風險非常低。有人說,你更有可能贏得樂透,被小行星毀壞,同時受到照明的衝擊。

3

不需要檢查數據庫,

<?php 

    uniqid (rand(), true); 

?> 
+1

'uniqid()'的問題是你沒有得到隨機分配,因爲OP似乎想要的。 – Tchoupi

+0

+1 @MathieuImbert我已經包括在內,rand()。感謝您的指示 – FirmView

+0

此解決方案給出了不使用數據庫的隨機數 – FirmView