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 3 von 3     123   
Polynom

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

Re: Personalausweisnummer generieren

  Alt 24. Jul 2007, 16:16
Zitat von Gehstock:
Die Maximale Zahl kann nur 9*7 sein also 63
Richtig, aber nur für jede einzelne Zahl ...
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.
  Mit Zitat antworten Zitat
Gehstock

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

Re: Personalausweisnummer generieren

  Alt 24. Jul 2007, 17:27
Ja hatte ich untedessen auch bemerkt mit der 216

Zitat:
Außerdem würde ich beim "case ... of"-Bereich noch ein "else i:=0;" einfügen.
Dann funktioniert der Code bei meinem Personalausweis
Das war der Fehler
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
  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 = '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;
Danke

@marabu mod war eig net gemeint eher "Pred"
Angehängte Dateien
Dateityp: exe personal_181.exe (168,5 KB, 5x aufgerufen)
Marcel
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#23

Re: Personalausweisnummer generieren

  Alt 24. Jul 2007, 17:30
Zitat:
@marabu mod war eig net gemeint eher "Pred"
die ganze Procedure ist ein Fehler *grusel*
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)
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Gehstock

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

Re: Personalausweisnummer generieren

  Alt 24. Jul 2007, 17:33
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
Marcel
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#25

Re: Personalausweisnummer generieren

  Alt 24. Jul 2007, 17:40
Zitat von Gehstock:
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
gerade das ist falsch, der Aufwand wird bei Deinem Stil irgendwann unkalkulierbar. Vielleicht, weil Du dann ein Projekt nochmal ganz von vorn anfangen musst ....

Vielleicht sollte man in Zukunft TForm1 und ButtonClick Beispiele einfach verbieten
kannst froh sein, dass ich nicht der Boardbetreiber bin
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Gehstock

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

Re: Personalausweisnummer generieren

  Alt 24. Jul 2007, 17:49
Ü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;
Marcel
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#27

Re: Personalausweisnummer generieren

  Alt 24. Jul 2007, 17:54
Zitat von Gehstock:
Üblicherweise sehen Projekte mit mehr als 1 Button und 2 Edits bei mir so aus
ach heije ... is ja noch schlimmer!
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...
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Gehstock

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

Re: Personalausweisnummer generieren

  Alt 24. Jul 2007, 18:01
Ach lass gut sein
Marcel
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#29

Re: Personalausweisnummer generieren

  Alt 24. Jul 2007, 18:04
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 ....
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#30

Re: Personalausweisnummer generieren

  Alt 25. Jul 2007, 07:31
Zitat von stoxx:
ach heije ... is ja noch schlimmer!
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...
Hallo Stoxx,
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. Beitrag #15) zeigen wie man gehen kann und wenn die zügig gehen können, kann man ihnen erklären wie mann laufen und rennen kann.
Zitat von stoxx:
Die armen Anfänger, die immer wieder mit so einem Code "belastet" werden ... *seufz*
(Ich gehörte auch mal dazu)
Siehst Du, Du hast auch erst mal versucht zu stehen, bevor Du losgerannt bist
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 von MaBuSE:
Zitat von Gehstock:
Ich habe Dir mal den Algorithmus in Pascal geschrieben.
Ich habe versucht ihn möglichst einfach und leicht zu verstehen zu implementieren.
...
Der Algotithmus ist einfach aufgebaut und die Prüfsummenberechnung in eine Funktion ausgelagert.
Das Zitat ist auf dem oben erwähnten Beitrag #15 in diesem Thema.

Zitat von stoxx:
wollte Dich nicht vergraulen, im Gegenteil ...
Das will ich Dir hier auch nicht unterstellen.
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
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 07:05 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