AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

PINs erzeugen und vergleichen

Ein Thema von ickehausen · begonnen am 26. Okt 2009 · letzter Beitrag vom 26. Okt 2009
Antwort Antwort
ickehausen

Registriert seit: 29. Jul 2004
85 Beiträge
 
Delphi 2010 Enterprise
 
#1

PINs erzeugen und vergleichen

  Alt 26. Okt 2009, 15:43
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.
Es gibt keine dummen Fragen ...
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#2

Re: PINs erzeugen und vergleichen

  Alt 26. Okt 2009, 16:00
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.
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: PINs erzeugen und vergleichen

  Alt 26. Okt 2009, 16:05
Du könntest eine Hashmap verwenden, um zu prüfen, ob eine PIN (eigentlich ja ein Kennwort, denn eine PIN ist eine Persönliche Identifikations Nummer, während ein Pin eine Nadel ist) bereits erzeugt wurde.

Hier werden verschiedene Suchverfahren verglichen: Dabei werden mehrere Millionen Einträge gemacht: Mach Dir also keine Gedanken wegen ein paar Tausend.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.048 Beiträge
 
Delphi 12 Athens
 
#4

Re: PINs erzeugen und vergleichen

  Alt 26. Okt 2009, 16:22
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
ickehausen

Registriert seit: 29. Jul 2004
85 Beiträge
 
Delphi 2010 Enterprise
 
#5

Re: PINs erzeugen und vergleichen

  Alt 26. Okt 2009, 17:48
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!!!
Es gibt keine dummen Fragen ...
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: PINs erzeugen und vergleichen

  Alt 26. Okt 2009, 18:04
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz