Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Brauch hilfe bei Mathematischer formel (https://www.delphipraxis.net/78550-brauch-hilfe-bei-mathematischer-formel.html)

Gehstock 6. Okt 2006 20:22


Brauch hilfe bei Mathematischer formel
 
also in ein Tmaskedit wird eine imei eingegeben (14 stellig) dabei soll dann automatisch die 15. stelle berechnet werden

die berechnung funktioniert so-
{Beispiel-IMEI: 49 06 49 40 31 41 72
Jede 2. Ziffer verdoppeln (beginnend bei 2.):
9, 6, 9, 0, 1, 1, 2
verdoppelt: 18, 12, 18, 0, 2, 2, 4
Alle einzelnen Ziffern addieren:(1 + 8) + (1 + 2) + (1 + 8) + 0 + 2 + 2 + 4 =
28
Jede 2. Ziffer addieren (beginnend bei 1.):
4 + 0 + 4 + 4 + 3 + 4 + 7 =
27
Beide Ergebnisse addieren:
28 + 27 =
55
Ergebnis modular 10*:
55 mod 10 = 5, Rest =
5
* 10 so oft subtrahieren, wie möglich
Differenz zu 10:
10 - 5 = 5 Ergebnis = 5}

nur wie pack ich das am besten in einen Code

mkinzler 6. Okt 2006 20:37

Re: Brauch hilfe bei Mathematischer formel
 
Ich würde den string anhand der trenner Leerzeichen aufpitten:

Delphi-Quellcode:
var
   sl: TStrings;
   zahl: string;
   imei: Integer;
   i: integer;
...
begin
  imei := 0;
  sl := TStringList.Create;
  sl.Delimiter := ' ';
  sl.DelimitedText := EditIMEI.Text;
  for i := 0 to 6 do //
  begin
      zahl := IntToStr(Ord( sl.Strings[2])-48)*2);
      imei := imei + zah[1] + zahl[2] + Ord( sl.Strings[i]-48);
  end;
  imei := imei mod 5;
...
getippt und nicht getestet.

bttb930 6. Okt 2006 21:13

Re: Brauch hilfe bei Mathematischer formel
 
das ist ein algorithmus und keine mathematische formel.

und wie sollen wir dir helfen? sollen wir dir das in code formulieren? mach's doch lieber selbst und frag bei spezifischeren problemen. das hier ist ja kein hausaufgabenforum...

Gehstock 6. Okt 2006 23:57

Re: Brauch hilfe bei Mathematischer formel
 
ok dann anders


wie kann ich einzelnen strings bestimmte stellen in einen tedit zuweisen

Delphi-Quellcode:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Mask, StdCtrls;

type
  TForm3 = class(TForm)
    MemoInfo: TMemo;
    Button1: TButton;
    EditIMEI: TEdit;
    Check: TEdit;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure EditIMEIChange(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
begin
MemoInfo.lines.add('Prüfe eingegebene IMEI');
If length(EditIMEI.Text)<14 then begin
MemoInfo.lines.add('Falsche IMEI eingegeben');
// später dann die eigentliche berechnung (unlockcode) an dieser  stelle
end;


end;
//berechnung Checksumme  is eigendlich nicht so wichtig aber der effekthascherei wegen(könnte man ja eingeben lassen)
{Beispiel-IMEI: 49 06 49 40 31 41 72
Jede 2. Ziffer verdoppeln (beginnend bei 2.):
9, 6, 9, 0, 1, 1, 2 
verdoppelt: 18, 12, 18, 0, 2, 2, 4 
Alle einzelnen Ziffern addieren:(1 +  + (1 + 2) + (1 +  + 0 + 2 + 2 + 4 =
28
Jede 2. Ziffer addieren (beginnend bei 1.):
4 + 0 + 4 + 4 + 3 + 4 + 7 =
27
Beide Ergebnisse addieren:
28 + 27 =
55
Ergebnis modular 10*:
55 mod 10 = 5, Rest =
5
* 10 so oft subtrahieren, wie möglich
Differenz zu 10:
10 - 5 = 5 Ergebnis = 5}
procedure TForm3.EditIMEIChange(Sender: TObject);
var
p : String;
Diff : String;
Sub : string;
Zwei : string;
vier : string;
sechs : string;
acht : string;
zehn : string;
zwölf : string;
vierzehn : string;
begin
zwei = editImei.
p := (sub)-(diff);// nur zum test später dann mit formel
EditIMEI.MaxLength:=14;
If length(EditIMEI.Text)=14 then begin
  Check.Text:=(p) // das soll die checksumme werden
end;
end;

end.

marabu 7. Okt 2006 07:56

Re: Brauch hilfe bei Mathematischer formel
 
Liste der Anhänge anzeigen (Anzahl: 1)
Guten Morgen.

Ich gehe davon aus, dass eine IMEI-Nummer geprüft und nicht erzeugt werden soll. Dann allerdings ist die Eingabe von allen 15 Stellen obligatorisch - wie sollte sonst der Zahlendreher (oder Lesefehler oder Schreibfehler) bei der Eingabe nur der ersten 14 Stellen festgestellt werden, was ja die eigentliche Funktion der Prüfziffer ist?

Ich würde den Benutzer die IMEI eingeben lassen, anschließend die Leerstellen entfernen (falls er sich die Mühe gemacht hat diese einzugeben) und ihn dann über die Integrität der IMEI informieren. Die Berechnung der Prüfziffer selbst macht nur Sinn für maschinell vorgegebene Seriennummern.

Grüße vom marabu

Gehstock 7. Okt 2006 15:44

Re: Brauch hilfe bei Mathematischer formel
 
wie bekomme ich daas jetzt verdoppelt
also er nimmt die zahl von der 2. stelle und soll sie gleich verdoppeln

Delphi-Quellcode:
Zwei := EditIMEI.text[2]*2;
geht nicht

ups erledigt
Delphi-Quellcode:
Zwei := EditIMEI.text[2*2];

marabu 7. Okt 2006 16:09

Re: Brauch hilfe bei Mathematischer formel
 
Delphi-Quellcode:
 
// var Zwei: String;
Zwei := IntToStr(StrToInt(EditIMEI.Text[2]) * 2);
Aber bist du sicher, dass du so arbeiten möchtest?

Freundliche Grüße vom marabu

Gehstock 7. Okt 2006 16:17

Re: Brauch hilfe bei Mathematischer formel
 
Liste der Anhänge anzeigen (Anzahl: 1)
Bin ja froh das es läuft aber jetzt anderes problem
hab die imei jetzt in strings aufgeteilt und die sollen jetzt miteinander addiert werden

also a+b+c+d führt zu abcd
also hab ichs so versucht bitte nicht hauen
Delphi-Quellcode:
ADD2 := inttostr(strtoint(eins)+strtoint(drei)+strtoint(funf)+strtoint(sieben)+strtoint(neun)+strtoint(elf)+strtoint(dreizehn));
klappt auch aber bei jeder eingabe erscheint eine fehlermeldung mit einen komma drin funzt aber trotzdem

DP-Maintenance 9. Okt 2006 01:01

DP-Maintenance
 
Dieses Thema wurde von "alcaeus" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Ist ebenfalls eine Delphi-Frage.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 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