2012-09-27 2 views
2

Je dois empêcher le code généré de produire des doublons. Est-ce la bonne façon de le faire ou existe-t-il des moyens beaucoup plus efficaces?Empêche la génération de code aléatoire en double?

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

semble bien pour moi. – Peon

+1

Vous devriez ajouter une limite de récursivité – Tchoupi

+0

@MathieuImbert Comment faites-vous cela? Est-ce juste contre-variable? – IMB

Répondre

1

si après avoir généré un code, une autre dupliqué est généré?

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

Pas besoin de faire de récursion.

1

Vous pouvez utiliser une boucle while, afin d'éviter les limites possibles de la profondeur de récursivité:

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

Ouais il y a. Concaténez votre clé primaire, ajoutez une colonne unique, si vous le souhaitez. Et hachez-le. Je ne suis pas tout à fait sûr, mais le risque d'obtenir le même hachage à partir de 2 valeurs différentes est très faible. Certains disent, vous êtes plus susceptible de gagner le loto, être détruit par un astéroïde et frappé par un éclairage en même temps.

3

Pas besoin de vérifier la base de données,

<?php 

    uniqid (rand(), true); 

?> 
+1

Le problème avec 'uniqid()' est que vous n'obtenez pas une distribution aléatoire comme OP semble vouloir. – Tchoupi

+0

+1 @MathieuImbert j'ai compris, rand(). Merci d'indiquer – FirmView

+0

Cette solution donne un nombre aléatoire sans l'utilisation de la base de données – FirmView

Questions connexes