Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Personalausweisnummer generieren (https://www.delphipraxis.net/96367-personalausweisnummer-generieren.html)

Gehstock 23. Jul 2007 10:21


Personalausweisnummer generieren
 
Delphi-Quellcode:
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;
wobei x die Stelle im Maskedit darstellt und y den wert der stelle

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

Algo ist hier zu finden

DeddyH 23. Jul 2007 10:38

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;

Gehstock 23. Jul 2007 10:41

Re: Personalausweisnummer generieren
 
Ers soll I von Stelle1. nehmen und mit Stelle2. addieren usw. und das für alle stellen

DeddyH 23. Jul 2007 10:42

Re: Personalausweisnummer generieren
 
Dann nimm eine weitere Variable (z.B. erg), initialisiere diese mit 0 und addiere sie auf:
Delphi-Quellcode:
erg := erg + i;

Gehstock 23. Jul 2007 10:47

Re: Personalausweisnummer generieren
 
Danke immer diese kleinigkeiten

marabu 23. Jul 2007 11:12

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:
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;
Grüße vom marabu

Gehstock 23. Jul 2007 16:12

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:
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;
@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

Matze 23. Jul 2007 17:47

Re: Personalausweisnummer generieren
 
Die Prüfziffer errechnet dein Programm für meine Ausweisnummer falsch.

Polynom 23. Jul 2007 17:54

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 .

Matze 23. Jul 2007 17:56

Re: Personalausweisnummer generieren
 
Zitat:

Zitat von Polynom
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 .

Genau wie bei mir. Auch 'ne 0 statt 'ne 6. Ist ja lustig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:16 Uhr.
Seite 1 von 3  1 23      

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