![]() |
Re: Personalausweisnummer generieren
Zitat:
Jede einzelne Zahl wird mit 7, 3 oder 1 multipliziert. Und wie du richtigerweise gesagt hast ist die größtmögliche Zahl, die hierbei entstehen kann 63. Jetzt nimmt man die letzten Stellen dieser Zahlen und addiert sie (bei deinem Code entspricht die Variable "l" dieser Zahl). Das hierbei größte Ergebnis ist allerdings 216. (Wenn jede Zahl, welche mit 7 multipliziert werden muss 7 ist, jede, die mit 3 multipliziert werden muss 3 ist und wenn jede Zahl, welche mit 1 multipliziert werden muss 9 ist. Dann wären das 24 Zahlen mit dem Wert 9 = 216) Außerdem würde ich beim "case ... of"-Bereich noch ein "else i:=0;" einfügen. Dann funktioniert der Code bei meinem Personalausweis. |
Re: Personalausweisnummer generieren
Liste der Anhänge anzeigen (Anzahl: 1)
Ja hatte ich untedessen auch bemerkt mit der 216
Zitat:
Delphi-Quellcode:
Danke
procedure TForm7.Button1Click(Sender: TObject);
var x,y:integer; i,l:Integer; begin i:=0; l:=0; for x := 1 to Length(MaskEdit1.Text)do begin y:=chartoint(MaskEdit1.Text[x]); case x of 1:i:=y * 7; 2:i:=y * 3; 3:i:=y * 1; 4:i:=y * 7; 5:i:=y * 3; 6:i:=y * 1; 7:i:=y * 7; 8:i:=y * 3; 9:i:=y * 1; 10:i:=y * 7; //- // Ausgabeland //- 14:i:=y * 3; 15:i:=y * 1; 16:i:=y * 7; 17:i:=y * 3; 18:i:=y * 1; 19:i:=y * 7; 20:i:=y * 3; //- 22:i:=y * 1; 23:i:=y * 7; 24:i:=y * 3; 25:i:=y * 1; 26:i:=y * 7; 27:i:=y * 3; 28:i:=y * 1 else i:=0; end; l:=l+strtoint(cut(inttostr(i))); end; Edit2.Text:=cut(inttostr(l)); end; Function TForm7.cut(a:string):string; begin if length(a)>1 then Result:=a[2]; if length(a)>2 then Result:=a[3] else Result:=a; end; function TForm7.CharToInt(C: Char):integer; begin Result := 0; if C = '0' then Result := 0; if C = '1' then Result := 1; if C = '2' then Result := 2; if C = '3' then Result := 3; if C = '4' then Result := 4; if C = '5' then Result := 5; if C = '6' then Result := 6; if C = '7' then Result := 7; if C = '8' then Result := 8; if C = '9' then Result := 9; end; @marabu mod war eig net gemeint eher "Pred" |
Re: Personalausweisnummer generieren
Zitat:
Das sind die typischen TForm1-ButtonKlick Programmier. Wenn es wenigstens einen Hauch von funktionaler Programmierung hätte. Von Objektorientiertheit mal gar nicht zu reden. Die armen Anfänger, die immer wieder mit so einem Code "belastet" werden ... *seufz* (Ich gehörte auch mal dazu) |
Re: Personalausweisnummer generieren
mag sein aber ich bin am lernen und ich glaub kaum das dei Code am Anfang viel anders aussah
davon abgesehen bei einen Testprogramm bei den ich nur mahl wissen wollte ob und wie ich das hinbekomme reicht mir "Button1Click" zu. Nennt sich Aufwand und Nutzen |
Re: Personalausweisnummer generieren
Zitat:
Vielleicht sollte man in Zukunft TForm1 und ButtonClick Beispiele einfach verbieten :-) kannst froh sein, dass ich nicht der Boardbetreiber bin :lol: |
Re: Personalausweisnummer generieren
Üblicherweise sehen Projekte mit mehr als 1 Button und 2 Edits bei mir so aus
Delphi-Quellcode:
procedure TFormMain.btnCalcClick(Sender: TObject);
var sie:Integer; begin editPhonetyp.Visible:=false; btnReport.Visible:=false; memo1.clear; sie:=strtoint(Copy(editIMEI.Text,1,2)); if ed = false then begin Memo1.Lines.add('Insert IMEI first'); editIMEI.SetFocus; exit; end; if Length(editIMEI.Text) < 17 then begin Memo1.Lines.add('Insert IMEI first'); editIMEI.SetFocus; exit; end; CalkImei15; taco:=StrToInt(Copy(editIMEI.Text,1,6)+Copy(editIMEI.Text,8,2)); ADOQuery1.Close; if sie < 35 then begin ADOQuery1.SQL.Text := 'select * from Babt00'; Database; end; if sie = 35 then begin ADOQuery1.SQL.Text := 'select * from Babt35'; Database; end; if sie >= 36 then begin ADOQuery1.SQL.Text := 'select * from Babt36'; Database; end; end; procedure TFormMain.Timer1Timer(Sender: TObject); begin AlphaBlendValue := AlphaBlendValue + 3; Timer1.Enabled := AlphaBlendValue < 255; if AlphaBlendValue = 255 then editIMEI.SetFocus; end; procedure TFormMain.Database; begin ADOQuery1.Open; While Not ADOQuery1.Eof do begin if ADOQuery1.FieldByName('Feld1').asinteger =(Taco) then begin hst:= ADOQuery1.FieldValues['Feld2']; modell:=ADOQuery1.FieldValues['Feld3']; zula:=ADOQuery1.FieldValues['Feld4']; land:=ADOQuery1.FieldValues['Feld5']; end; ADOQuery1.Next; end; if i15=y then begin lblCheck.Font.Color := clgreen; lblCheck.Caption := 'Valid'; btnCorrect.enabled := False; end else if i15<>y then begin lblCheck.Font.Color :=clred; lblCheck.Caption := 'Invalid'; btnCorrect.enabled := True; end; if Length(hst) =0 then begin memo1.clear; memo1.Lines.add('Phone not found. Please Report your TAC '); memo1.Lines.add('and your Phonemodel '); editPhonetyp.Visible:=true; btnReport.Visible:=true; editPhonetyp.SetFocus; exit; end else memo1.Lines.add('IMEI : '+editIMEI.Text+' is '+lblCheck.Caption); memo1.Lines.add('Manufacturer :'+hst); memo1.Lines.add('Model :'+modell); memo1.Lines.add('Reg. :'+zula); memo1.Lines.add('Country :'+land); editIMEI.SetFocus; end; function TFormMain.GetEnv(Variable:string):string; var buffer:array[1..1024] of char; begin if GetEnvironmentVariable( pChar(variable) , @Buffer, Sizeof(buffer) )=0 then result:='' else result:=PathGetLongName(buffer); end; function TFormMain.PathGetLongName(const ShortPath: String): String; var GetLongPathName: TGetLongPathName; hKernel32: THandle; begin hKernel32 := LoadLibrary(kernel32); try GetLongPathName := GetProcAddress(hKernel32, 'GetLongPathNameA'); if not Assigned(GetLongPathName) then RaiseLastWin32Error; //RaiseLastOSError NT / RaiseLastWin32Error 9X SetLength(Result, GetLongPathName(PChar(ShortPath), nil, 0)); SetLength(Result, GetLongPathName(PChar(ShortPath), PChar(Result), Length(Result))); finally FreeLibrary(hKernel32); end; {end try/finally} end; |
Re: Personalausweisnummer generieren
Zitat:
mach Dir echt mal Gedanken, lese paar Bücher, oder such im Netz. Versuch mal als erstes, Deinen Code wiederzuverwenden, indem Du einfach mal ein neues Projekt erzeugst, und dort dasselbe integrieren willst. Aber bitte ohne copy und paste und mit völlig anderen Edit Feldern. Wenn Du das dann gemacht hast, weißt Du, wieviel Aufwand es ist, den Code zu ändern und wiederzuverwenden. Und vor allen Dingen wirst Du merken, wie schwer es ist, ihn fehlerfrei wiederzuverwenden. Die 3 Dinge: Layout - Logik und Datenhaltung immer voneinander trennen, da diese flexibel austauschbar sein müssen und sollen... |
Re: Personalausweisnummer generieren
Ach lass gut sein
|
Re: Personalausweisnummer generieren
wollte Dich nicht vergraulen, im Gegenteil ...
Du solltest Dir angewöhnen im TMainForm überhaut nix zu kalkulieren, das ist der falsche Platz dafür. Ich weiß, der Objektinspektor verführt zu solch einem schlechten Programmierstiel. Ein Klick ist ja leicht gemacht. In eine Form Unit kommt wirklich nur das allernötigste rein, was man irgendwie zum Anzeigen braucht. Da wird weder was berechnet, noch mit Daten irgendwas gemacht. Wenn Du mal auf eine andere Programmiersprache umsteigst, kannst Du mit Deinem Code noch nichtmal was gebrauchen, indem Du was umschreibst .. Weil, Du wirst dann alles neu machen .... |
Re: Personalausweisnummer generieren
Zitat:
ich bin der Meinung, das man erst mal lernen sollte auf eigenen Füßen zu stehen, als gleich mit dem gehen oder sogar rennen anzufangen. Das was Gehstock da macht ist schon in Ordnung, für den Anfang. Er muß ja erst mal verstehen, wie das Ganze überhaupt funktioniert und zusammenhängt. Wie willst Du z.B. Layout, Logik und Datenhaltung trennen, wenn Du noch gar nicht so genau weißt wie das eigentlich genau funktioniert. Du hast doch sicherlich auch nicht gleich mit Mutli Tier Anwendungen angefangen um die von Dir angesprochenen 3 Dinge auf 3 verschiedene PCs zu verteilen (Layout auf den Client, Logik in den Application Server und Daten in den SQL Server), sondern mit einem einfachen "Hello World". Und dort ist ja auch der "Hello World" String fest im Code verankert und nicht ausgelagert. Also erst mal den Leuten erlauben zu stehen, dann durch Beispiele (z.B. ![]() Zitat:
Jeder verwendet nur die Mittel die er kennt. So entstehen manchmal Lösungen die nicht optimal sind. Ich würde aber deshalb nicht von "belastenden" Code sprechen. Du solltest also lieber Beispiele nach meinem oben genannten Motto erstellen. Dann gibt es auch mehr "unbelastenden" Code: Zitat:
Das Zitat ist auf dem oben erwähnten Beitrag #15 in diesem Thema. Zitat:
Ich finde es gut, wenn Du versuchst Leuten zu helfen und Tips zu geben. Also versteh meine Antwort bitte nicht als dumme Anmache, sondern auch nur als freundlichen Hinweis, bzw. freundlich gemeinte Hilfe von mir. Danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:49 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