AGB  ·  Datenschutz  ·  Impressum  







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

Personalausweisnummer generieren

Ein Thema von Gehstock · begonnen am 23. Jul 2007 · letzter Beitrag vom 25. Jul 2007
Antwort Antwort
Seite 1 von 3  1 23      
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#1

Personalausweisnummer generieren

  Alt 23. Jul 2007, 10:21
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 = '0then Result := 0;
  if C = '1then Result := 1;
  if C = '2then Result := 2;
  if C = '3then Result := 3;
  if C = '4then Result := 4;
  if C = '5then Result := 5;
  if C = '6then Result := 6;
  if C = '7then Result := 7;
  if C = '8then Result := 8;
  if C = '9then 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
Marcel
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Personalausweisnummer generieren

  Alt 23. Jul 2007, 10:38
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Personalausweisnummer generieren

  Alt 23. Jul 2007, 10:41
Ers soll I von Stelle1. nehmen und mit Stelle2. addieren usw. und das für alle stellen
Marcel
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Personalausweisnummer generieren

  Alt 23. Jul 2007, 10:42
Dann nimm eine weitere Variable (z.B. erg), initialisiere diese mit 0 und addiere sie auf:erg := erg + i;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Personalausweisnummer generieren

  Alt 23. Jul 2007, 10:47
Danke immer diese kleinigkeiten
Marcel
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Personalausweisnummer generieren

  Alt 23. Jul 2007, 11:12
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
  Mit Zitat antworten Zitat
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Personalausweisnummer generieren

  Alt 23. Jul 2007, 16:12
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 = '0then Result := 0;
  if C = '1then Result := 1;
  if C = '2then Result := 2;
  if C = '3then Result := 3;
  if C = '4then Result := 4;
  if C = '5then Result := 5;
  if C = '6then Result := 6;
  if C = '7then Result := 7;
  if C = '8then Result := 8;
  if C = '9then 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
Angehängte Dateien
Dateityp: exe personal_743.exe (168,5 KB, 25x aufgerufen)
Marcel
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Personalausweisnummer generieren

  Alt 23. Jul 2007, 17:47
Die Prüfziffer errechnet dein Programm für meine Ausweisnummer falsch.
  Mit Zitat antworten Zitat
Polynom

Registriert seit: 1. Jun 2007
Ort: Markdorf
17 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Personalausweisnummer generieren

  Alt 23. Jul 2007, 17:54
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 .
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Personalausweisnummer generieren

  Alt 23. Jul 2007, 17:56
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 .
Genau wie bei mir. Auch 'ne 0 statt 'ne 6. Ist ja lustig.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 08:01 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