Einzigartige Alpha-numerische generator

Möchte ich unsere user in der Datenbank eine eindeutige alpha-numerische id. Ich bin mit dem code unten, wird diese erzeugen immer eine eindeutige id? Unten ist die aktualisierte version des Codes:

alten php:

//Generate Guid 
function NewGuid() { 
    $s = strtoupper(md5(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();
echo $Guid;
echo "<br><br><br>";

Neuen PHP:

//Generate Guid 
function NewGuid() { 
    $s = strtoupper(uniqid("something",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();
echo $Guid;
echo "<br><br><br>";

Wird die zweite (php -) code garantieren 100% Einzigartigkeit.

Endgültige code:

PHP

//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();
echo $Guid;

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

echo base_encode($Guid, $alphabet); 

}

Also für stärker Einzigartigkeit, ich bin mit dem $Guid als Schlüssel-generator. Das sollte ok sein richtig?

  • Dies ist eine regelmäßig gestellte Frage: siehe stackoverflow.com/questions/2799495/... für eine Antwort, obwohl warum brauchen Sie eine alphanumerische ID, anstatt eine einfache fortlaufende Nummer?
  • "einzigartig" und "Zufall" sind nicht die gleiche Sache.
  • Bei der Bearbeitung Ihrer Frage, sollten Sie die alte info, dann fügen Sie die neuen Sachen nach, unter einer überschrift Bearbeiten. Ansonsten ist es verwirrend und Antworten stop making sense.
  • Und wenn Sie einfach anrufen uniqid("myserver",true) Sie haben eine eindeutige Nummer. Das tun die extra rand() in die prefix-variable ist unnötig. Zusätzlich mit MD5 lässt Ihre einzigartige ID, wahrscheinlicher, eine Kollision zu haben, weil es möglich ist (sehr kleine Möglichkeit), dass 2 Nachrichten haben den gleichen md5-hash. Quintessenz ist, verwenden Sie einfach uniqid die Art und Weise es entworfen wurde, um eine eindeutige id generator.
  • danke. wird sicherzustellen, dass ich korrekt aktualisiert. OK. So nach und nach entfernen Sie die md5 -, das ist, wie es Aussehen sollte, rechts: // Generieren der Guid Funktion 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; } // Ende Generieren der Guid $Guid = NewGuid(); echo $Guid; echo "<br><br><br>";
  • ich bin versuchen, um Benutzern eine eindeutige id
  • aber eine eindeutige ID kann eine einfache Inkrementierung der Anzahl eher als eine zufällige alphanumerische Sequenz
  • gibt es ein Beispiel, das ich verwenden kann?
  • die Methode, die die meisten Menschen verwenden, ist eine einfache autoincrement-Spalte in Ihrer Datenbank

InformationsquelleAutor AAA | 2010-12-22
Schreibe einen Kommentar