![]() |
Personalausweisnummer generieren
Delphi-Quellcode:
wobei x die Stelle im Maskedit darstellt und y den wert der stelle
procedure TForm7.Button1Click(Sender: TObject);
var x,y:integer; i:Integer; begin i:=0; for x := 1 to Length(Edit1.Text) do begin y:=chartoint(Edit1.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; end; i:=i+i;// Hier ist der Fehler weiß aber nicht warum er rechnet falsch zusammen end; Label1.caption:=InttoStr(i); Edit2.Text:=Cut(InttoStr(i)); end; Function TForm7.cut(a:string):string; begin if length(a)>1 then begin Result:=a[2]; end 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; aber schon bei der 1. Stelle rechnet er falsch die 1. Stelle im Maskedit ist z.B. 7 für stelle 1. Steht im Case der Multiplikator 7-> 7*7=49 Raus hat er aber 98 ![]() |
Re: Personalausweisnummer generieren
Wenn i 49 ist, macht die Zeile i:=i+i; daraus 98 ;), Du hättest auch i := i * 2 schreiben können. Außerdem kann man die Funktion CharToInt auch kürzen:
Delphi-Quellcode:
function CharToInt(const C: char): byte;
begin Result := 0; case C of '1'..'9': Result := Ord(C) - 48; end; end; |
Re: Personalausweisnummer generieren
Ers soll I von Stelle1. nehmen und mit Stelle2. addieren usw. und das für alle stellen
|
Re: Personalausweisnummer generieren
Dann nimm eine weitere Variable (z.B. erg), initialisiere diese mit 0 und addiere sie auf:
Delphi-Quellcode:
erg := erg + i;
|
Re: Personalausweisnummer generieren
Danke immer diese kleinigkeiten
|
Re: Personalausweisnummer generieren
Hallo Gehstock,
wenn du deinen Code fertig hast, dann kannst du mal vergleichen. Mehr als ein Dutzend Zeilen sind nicht nötig. EDIT: drei Fehler habe ich in meinem Code entdeckt. (1) Die Gewichte müssen in absteigender Folge angewandt werden. (2) Jeder Abschnitt muss wieder mit dem höchsten Gewicht starten. (3) Die Prüfziffern der Abschnitte tragen das Gewicht 1.
Delphi-Quellcode:
Grüße vom marabu
function ValidIdCardNumber(const s: string): Boolean;
var i, iPos, iSum, iWeight: Integer; begin Result := Length(s) = 36; if not Result then Exit; iSum := 0; iPos := 2; for i := 1 to 35 do if s[i] in ['0'..'9'] then begin if i in [10, 20, 28] then iWeight := 1 else iWeight := Pred(2 shl iPos); Inc(iSum, (Ord(s[i]) - Ord('0')) * iWeight); iPos := Pred(iPos + 3) mod 3; end else iPos := 2; Result := iSum mod 10 = Ord(s[36]) - Ord('0'); end; |
Re: Personalausweisnummer generieren
Liste der Anhänge anzeigen (Anzahl: 1)
So fertig kann bitte jemand testen Obs Klappt für meinen Perso rechnet er jetzt richtig das Beispiel vom Link nicht?
Delphi-Quellcode:
@marabu bei deinen Code seh ich erstmal gar nicht durch die Hälfte deiner Befehle kenn ich noch nichteinmal aber ich verspreche , mich damit ausführlich zu beschäftigen
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; 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 begin Result:=a[2]; end 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; |
Re: Personalausweisnummer generieren
Die Prüfziffer errechnet dein Programm für meine Ausweisnummer falsch.
|
Re: Personalausweisnummer generieren
Für meine Ausweisnummer kommt eine andere Prüfziffer raus ... eine Null um genau zu sein (statt 6). Und ich hab meinen Personalausweis auf legalem Wege erhalten :-D .
|
Re: Personalausweisnummer generieren
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:54 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