Ich möchte eine kurze, eindeutige ID generieren, ohne auf Kollisionen prüfen zu müssen.PHP kurze eindeutige ID-Generierung mit auto_increment?
ich zur Zeit so etwas wie dieses, aber die ID ich generieren derzeit wird zufällig ausgewählt und überprüft für Kollisionen in einer Schleife ärgerlich und wird teuer, wenn die Anzahl der Datensätze deutlich wächst.
Normalerweise ist die Sorge um Kollisionen kein Problem, aber die eindeutige ID, die ich erzeugen möchte, ist eine kurze eindeutige Zeichenkette mit 5-8 Zeichen, alphanumerisch, wie tinyurl.
EDIT: Ich möchte mit 5 Zeichen beginnen, und wenn ich 60 Millionen Einträge getroffen, dann weiter mit 6 .. so weiter und so fort.
Zu diesem Zweck dachte ich, ich könnte einen Auto_increment-Wert, der von den Benutzern ausgeblendet ist, und präsentieren sie stattdessen mit einer MD5
oder eine andere Methode, um eine eindeutige Zeichenfolge daraus zu generieren.
Generierte Strings sollten nicht linear erscheinen, also ist die einfache Konvertierung der auto_incremented ID in base 36
[0-9A-Z] etwas zu einfach, aber eine Funktion wie das ist, wo ich damit hingehe.
EDIT: Sicherheit ist kein Problem, da dies nicht verwendet wird, um Informationen zu sichern. Es ist einfach eine Verknüpfung zu einer längeren Zeichenfolge. Danke.
Vielen Dank für Ihre Vorschläge und Entschuldigung für die Verzögerung. Zahnarzt ..
Ich mag diese Idee. Hast du einen Code für mich? 1-60000000 Zuordnung zu einer alphanumerischen Zeichenfolge mit 5 Zeichen? –
Entschuldigung, ich vertraue meiner Mathematik zu dieser Tageszeit nicht, also ist es eine 31-Bit-Eins. Für eine 30-Bit-Version hätten Sie genau 5 (signifikante, d. H. Ohne die padding = 's) Zeichen nach base64_encode, aber ich konnte keinen Parametersatz dafür finden. – Wim
Ich denke, dass diese für eine 30-Bit-arbeiten kann: a = 357913942, c = 1, m = 1073741823 (Wenn ich mich nicht irre, erfüllt es die Kriterien in der Wikipedia-Artikel für eine vollständige Periode: m = 2 ** 31-1 = 3 ** 2 * 7 * 11 * 31 * 151 * 331, c = 1, so ist es offensichtlich mit m koprime, und a-1 = 3 * 7 * 11 * 31 * 151 * 331 was durch alle Primfaktoren von m teilbar ist ...) – Wim