Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - lizenzkey erzeugen
Apo95 - Mi 25.12.13 00:43
Titel: lizenzkey erzeugen
Hi,
was ich suche, steht zwar schon oben ^^, aber ich bräuchte trotzdem noch Infos; und zwar möchte ich so viele Keys erzeugen lassen, wie in einem Textfeld steht. Gedacht habe ich mir das so :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:
| type TPasswordMode = set of (pmUpper, pmNumbers);
function GeneratePassword(ALength: Integer; Mode: TPasswordMode):string; const cUpper = 'BCDEFGHIJKLMNOPQRSTUVWXY'; cNumbers = '123456789'; var i : Integer; S : string; iM: BYTE; begin
if Mode = [] then Exit;
i := 0; Randomize; while (i < ALength) do begin iM := RANDOM(4); case iM of 1: if (pmUpper in Mode) then begin S := S + cUpper[1+RANDOM(Length(cUpper))]; Inc(i); end; 2: if (pmNumbers in Mode) then begin S := S + cNumbers[1+RANDOM(Length(cNumbers))]; Inc(i); end; end; end; Result := S; end; |
Was fehlt noch, damit ich den KeyGen verwenden kann? Ferner soll jeder Block aus 5 Zeichen mit einem Bindestrich getrennt werden.
Gruß,
Apo95
ub60 - Sa 28.12.13 16:59
Prinzipiell hast Du alle Teile, die Du benötigst, aber es sind noch eine Reihe Denkfehler dabei:
- Was wird zurückgegeben, wenn eine leere Eingabe im Set erfolgt?
- Warum werden bei Random(4) nur die Werte 1 und 2 behandelt?
- Wie kann man bis 5 zählen :lol: ?
So sollte es funktionieren:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| type TPasswordMode = set of (pmUpper, pmNumbers);
function GeneratePassword(ALength: Integer; Mode: TPasswordMode):string; const cUpper : String = 'ABCDEFGHIJKLMNPQRSTUVWXYZ'; cNumbers : String = '123456789'; var i, iM: Integer; cSelect, S : string; begin if Mode = [] then begin Result:='ungültige Auswahl'; Exit; end; Randomize; cSelect:=''; if (pmUpper in Mode) then cSelect:=cSelect+cUpper; if (pmNumbers in Mode) then cSelect:=cSelect+cNumbers; s:=''; for i:=1 to ALength do begin iM := Random(Length(cSelect))+1; s:=s+cSelect[iM]; if ((i mod 5)=0) and (i<ALength) then s:=s+'-'; end; Result:=s; end;
procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(GeneratePassword(10, [])); ShowMessage(GeneratePassword(10, [pmUpper])); ShowMessage(GeneratePassword(15, [pmNumbers])); ShowMessage(GeneratePassword(20, [pmUpper, pmNumbers])); end; |
ub60
Apo95 - Sa 28.12.13 22:16
Aha... ;-) schau schau... danke vielmals für den Tipp! Um die Anzahl der im Edit Feld stehenden Key zu erzeugen, reicht es doch aus, die Methode aufzurufen, oder ?
Apo95 - So 29.12.13 01:12
Achso , nur zur Info:
Der Key darf kein A,Y und 0 enthalten; das Programm soll überprüfen, ob der eingegebene Key zu dem Algorithmus paßt oder fehlerhaft ist.
jaenicke - So 29.12.13 09:55
Apo95 hat folgendes geschrieben : |
| Der Key darf kein A,Y und 0 enthalten; das Programm soll überprüfen, ob der eingegebene Key zu dem Algorithmus paßt oder fehlerhaft ist. |
Zu welchem Algorithmus? Wenn du rein zufällig einen Key erzeugst, kannst du auch nix prüfen...
// EDIT:
Und wenn du nur ein paar Buchstaben verbietest, ist sehr schnell ein passender Key ausprobiert...
Du solltest dir da schon mehr Gedanken machen oder eine kommerzielle Lösung benutzen. Oder besser ohne Seriennummern arbeiten (eine Vollversion, eine eingeschränkte, fertig), denn ein so geringer Schutz nervt nur die Käufer, ist aber sehr leicht geknackt, so dass er Raubkopien nicht verhindert.
Davon abgesehen frage ich mich wie du ein schützenswertes Programm geschrieben haben willst, wenn du mit so einfachen Dingen überfordert bist...
OlafSt - So 29.12.13 12:36
Habe ich mich auch schon gefragt... Letzlich ist es ja faktisch unmöglich, einen so generierten Key auf seine Gültigkeit zu prüfen. Natürlich ginge das mit einem Lizenzkey-Server, bei dem die Keys alle hinterlegt sind und das Programm dann Online verifiziert. Aber dann hat das Programm plötzlich einen Online-Zwang und ob das so gut ankommt...
Manchmal ist es einfacher, einfach nur eine Demo-Version zu spreaden und wenn jemand eine Lizenz erwerben will, bekommt er eine Non-Demo-
Version zugemailt, die man dann einfach an die Harddisk-ID oder sowas bindet.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!