2010-12-28 6 views
1

Ich verwende den ersten Halbcode unten, um eine eindeutige ID zu generieren. Dann verwende ich den in der ersten Hälfte generierten Eintrag als eine Variable für den zweiten Code, der eine andere eindeutige ID generiert, die kürzer ist, wird der Code, den ich verwende, 100% ige Eindeutigkeit garantieren. Ich bin so wenden Sie sich bitte mit mir gebarEindeutigkeit in ID

PHP:

// 1st Piece of code 

// Generate Guid 
function NewGuid() { 
    $s = strtoupper(uniqid(rand(),true)); 
    $guidText = 
     substr($s,0,8) . '-' . 
     substr($s,8,4) . '-' . 
     substr($s,12,4). '-' . 
     substr($s,16,4). '-' . 
     substr($s,20); 
    return $guidText; 
} 
// End Generate Guid 

$Guid = NewGuid(); 

//2nd Piece of code 

$alphabet = '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ';  

function base_encode($num, $alphabet) { 
    $base_count = strlen($alphabet); 
    $encoded = ''; 

    while ($num >= $base_count) { 

     $div = $num/$base_count; 
     $mod = ($num-($base_count*intval($div))); 
     $encoded = $alphabet[$mod] . $encoded; 
     $num = intval($div); 
    } 

    if ($num) $encoded = $alphabet[$num] . $encoded; 
     return $encoded; 
} 


function base_decode($num, $alphabet) { 
    $decoded = 0; 
    $multi = 1; 

    while (strlen($num) > 0) { 
     $digit = $num[strlen($num)-1]; 
     $decoded += $multi * strpos($alphabet, $digit); 
     $multi = $multi * strlen($alphabet); 
     $num = substr($num, 0, -1); 
    } 

    return $decoded; 
} 

ob_start(); 
echo base_encode($Guid, $alphabet); //should output: bUKpk 
$ider = ob_get_contents(); 
ob_end_clean(); 
+0

Was ist los mit 'uniqid (')? – Maerlyn

Antwort

4

Wird der Code Ich bin mit Garantie 100% Einzigartigkeit?

Natürlich ist es nicht möglich, die Eindeutigkeit mit einer zufälligen GUID zu 100% zu garantieren. Es ist sehr wahrscheinlich, dass jede GUID eindeutig sein wird, aber es gibt nur eine endliche (aber sehr große) Anzahl von GUIDs. Wenn Sie genug von ihnen generieren, werden Sie schließlich nicht verwendete GUIDs ausführen und gezwungen sein, ein Duplikat zu generieren. Und die birthday paradox bedeutet, dass die zufällige Auswahl von GUIDs Ihnen im Durchschnitt ein Duplikat schneller gibt, als Sie vielleicht denken.

Aber es ist wahrscheinlich nicht wert, sich in der Praxis Sorgen zu machen, denn selbst mit dem Geburtstagsparadox ist es immer noch äußerst unwahrscheinlich, dass es passiert.

+0

Ich benutze das als eine Möglichkeit, mit Benutzern in der Datenbank und dem Inhalt, den sie generieren, zu verbinden. – AAA

+0

Welche Datenbank-Engine verwenden Sie? MySQL und PostgreSQL unterstützen beide automatisch inkrementierende Primärschlüssel. Ich würde das untersuchen. – sberry

+0

@Mark wie kann ich eine Zeile Code schreiben, die die Datenbank überprüft, um zu sehen, ob was Generieren einzigartig ist und wenn es nicht erneut ausgeführt wird und bis es eine eindeutige ID generiert hat .. – AAA

Verwandte Themen