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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wollen, dass die id eindeutig sein, Sie sollten generieren einer GUID mit uniqid.
Ihre Methode nicht garantieren Einzigartigkeit überhaupt. Und wahrscheinlich erstellen Kollisionen.
Dem folgenden code erzeugen Sie eine eindeutige alphanumerische ID, die aus einer Zahl. Ich nahm es aus Flickr-Gruppen. Zwei Funktionen zum codieren und decodieren:
UPDATE
Verwendung:
uniqid
Funktion, als Byron Whitlock angeboten. Nurecho uniqid();
. Keine Notwendigkeit, um es schwierig zu machen. Den code habe ich vorausgesetzt ist geeignet für einige andere Dinge.uniqid:
<?php $substr = substr(md5(rand()),0,22);echo " $substr ";?>
Wenn es wirklich zufällig ist, dann kann man nicht garantieren Einzigartigkeit (es sei denn, Sie halten die Generierung von Zufallszahlen-Tasten und überprüfen Sie Sie gegen Ihre Datenbank, bis Sie einen neuen finden, das ist eine schreckliche Idee).
Ist es wirklich brauchen, um zufällig zu sein?
Warum nicht einfach einen autoincrement-Spalte in der Tabelle, und wandeln Sie es um die Basis-62 (oder so), wenn Sie möchten, zu verweisen, als ein alphanumerischer Wert?