Frage

Ich suche ein einfaches kurzlebig Reservierungs-System zu schaffen, und ich möchte Bestätigung Zahlen erzeugen, die

  • unique
  • zufällig aussehende
  • alphanumerische
  • Kurz ish, zumindest viel kürzer als 32 Zeichen lange Strings von SHA1 zurückgegeben

Ich suche nur ~ 500 Vorbehalte haben, so dass ich nicht vorstellen hohe Wahrscheinlichkeit von collissions.

Eine Idee, die ich hatte, ist ein SHA1-Hash generieren basierend auf einem Datum-Zeitstempel und Benutzernamen, dann ist es seine ersten 10 Zeichen abgeschnitten. Wäre so etwas sicher einzigartig genug sein, um für die Zwecke der Verarbeitung ~ 500 Reservierungen?

War es hilfreich?

Lösung

Es sollte keinen Unterschied in der Zufälligkeit eines gegebenen Bit eines SHA-1-Hash sein, so dass das möglich ist. Eine weitere Möglichkeit wäre, den Hash in sich selbst zu falten XOR, bis Sie 60 Bits im Wert von Daten, dann kodieren sie mit Base 64 ein meist alphanumerisches Ergebnis erhalten.

Dies ist nur dann erforderlich, wenn Sie die gleiche Id wiederholt für die gleichen Eingangsdaten in der Lage sein generieren möchten. Andernfalls, wenn eine zufällige ID, die Sie einmal erzeugen und auf danach halten, verwendet Anders' Vorschlag. Wenn Sie einen Konflikt erhalten, nur ein anderes erzeugen.

Andere Tipps

Sie können mit was auch immer, sogar einem einfachen Zufallszahlengenerator; jedoch sollten Sie prüfen, ob der Reservierungscode nicht bereits vorhanden ist. Wenn dies der Fall ist, fügen Sie Zeichen ( ‚x‘) auf den String (Datum + Benutzer), bis Sie einen neuen Zufall / SHA1 bekommen / etc.

  

Ich suche nur ~ 500 Vorbehalte haben, so dass ich mich nicht vorstellen, hohe Wahrscheinlichkeit von collissions.

Eine weitere dumme Idee: erzeugen 1000 oder 2000 einzigartige Zufallszahlen mit den gewünschten Eigenschaften, speichern Sie sie irgendwo, und ordnen sie für die Nutzer, wie sie registrieren:)

Hier ist eine Möglichkeit, es in Perl zu tun:

sub get_random_name()
{
  my @chars=('a'..'z','A'..'Z');
  my $random_string;

foreach (1..22) { # rand @chars will generate a random # number between 0 and scalar @chars $random_string .= $chars[rand @chars]; } return $random_string . "-" . time(); }

Ich erinnere mich nicht, wie lange die Zeit () Teil ist, so dass Sie die Zahlen anpassen müssen Ihre Länge passen. Sie können auch den Teil entfernen, wenn Sie es nicht brauchen.

Wenn es wirklich nur 500, dann 20.000 von ihnen vorge erzeugen, in eine Tabelle, dann bekommen die „nächste nicht verwendete ein“, wenn Sie es brauchen.

Einige gute Tipps zu dieser Frage: Wie erstelle ich eine zufällige alphanumerische Zeichenfolge in C ++?

würde ich mit Zeichen wie "1", "l" und "O", "0" und "5", "S" und "Z", "2" in der Zeichenfolge, vermeiden Sie es zu machen einfacher für Kunden, wenn sie benötigen, um Ihren Reservierungscode über das Telefon zu lesen. Der Algorithmus zu diesem Link präsentiert sollen Ihnen helfen, dies zu tun.

einen guid verwenden? 16 Zeichen, aber wenn Sie wirklich über Kollision nicht kümmern, könnten Sie nur die ersten n Zeichen wählen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top