![]() |
PINs erzeugen und vergleichen
Hallo,
ich möchte PINs, deren Länge und Anzahl ich frei bestimmen kann, erzeugen und anschließend vergleichen, damit kein PIN zweimal vorkommt. Das Erzeugen ist schon erledigt. Aber wie vergleiche ich die PINs am besten. Wenn ich sie in ein dyn.Array schreibe, wird das Array dann nicht zu groß, wenn ich einige tausend PINs erzeuge? Wie gehe ich am elegantesten an die Sache? Hier der Code, mit dem ich die PINs erzeuge und in eine PIN-Liste (Text_Datei) schreibe:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin Randomize; end; function RandPW(iPWLen: Integer): String; var sPW: string; begin sPW := 'abcdefghijklmnopqrstuvwxyz123456789'; Result := ''; repeat Result := Result + sPW[Random(Length(sPW)) + 1]; until (Length(Result) = iPWLen); end; procedure TForm1.Button1Click(Sender: TObject); begin if Speicherort.Execute then begin AssignFile(Text_Datei,Speicherort.FileName); ReWrite(Text_Datei); for i := 1 to StrToInt(EditAnzahl.Text) do begin PIN := RandPW(StrToInt(EditLaenge.Text)); WriteLn(Text_Datei, PIN); end; CloseFile(Text_Datei); StatusBar1.Panels[0].Text := 'Pins sind erzeugt!'; end; end; end. |
Re: PINs erzeugen und vergleichen
Am bequemsten wäre da sicherlich eine TStringList, die hat ein paar Eigenschaften die man nur passend setzen muss, dann wird das Hinzufügen von bereits in der Liste enthaltenen Elementen entweder mit oder ohne Exception verweigert. Im Prinzip müsstest Du dann nur noch die Erzeugung durchlaufen lassen bis die Stringlist dann ausreichend viele Elemente enthält (also die gewünschte Anzahl eindeutiger PINs erzeugt wurde). Kleiner Nachteil: Damit der Doublettencheck funktioniert, muss die Eigenschaft "Sorted" auf true gestellt sein, d.h. Deine PIN-Liste ist danach standardmäßig aufsteigend sortiert. Wenn das kein Problem ist, dürfte das die schnellste Lösung sein: ca. 5 Minuten Hilfe zu TStringList lesen und nochmal 5 Minuten für die Implementierung.
Was die Performance angeht, kann ich nur sagen: Ausprobieren. Bei ein paar tausend Lines dürfte das aber noch nicht so dramatisch ins Gewicht fallen. |
Re: PINs erzeugen und vergleichen
Du könntest eine
![]() ![]() |
Re: PINs erzeugen und vergleichen
Wenn du es über die Datei machen willst, dann mußt du vor dem Einfügen eines neuen OINs erstmal alle vorherigen Einträge der Datei prüfen, ob dieser schon existiert.
Ich geh mal davon auß, daß deine kleine List nicht gleich den RAM vollmacht, also wäre hier eine StringList wirklich einfacher. Hier könnte man grundsätzlich erstmal genauso vorgehn und erstmal nachsehn, ob der "neue" PIN schon vorhanden ist, aber hier lassen sich auch ganz praktisch einige Funktionen der TStringList verwenden. Also Sortieren und beim Einfügen Dupplikate ignorieren lassen und dann die Schleife so oft durchlaufen lassen, bis .Count deiner Anzahl entspricht. Die Liste groß zu optimieren lohnt sich eh nicht, oder willst du dieses sehr oft machen? Außerdem ist die Funktion RandPW auch nicht grad die Optimalste, also was soll's. :stupid: |
Re: PINs erzeugen und vergleichen
Danke für Eure Antworten.
Ich werde es wohl mit der StringList versuchen. At alzaimar: Ich bin leider Delphi-Amateur und verstehe Deine Vorschlag mit der HAshmap nicht. Ich bin froh, wenn ich das mit der StringList hin bekomme, aber trotzdem vielen Dank!!! |
Re: PINs erzeugen und vergleichen
Hi ickehausen,
mit einer TStringList geht das genauso gut, wäre aber langsamer. Probier's mal und wenn Du nicht weiterkommst, frag einfach. Dazu ist so ein Forum schließlich da. PS: Eine Hashmap ist einfach nur ein fürchterlich schneller Such-Und-Find-O-Mat. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz