ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
4477
4477
EMPFEHLEN
-
Ich versuche seid geraumer Zeit ein Programm zu entwickeltn, welches für mich EAN Nummern nach meinen Ansprüchen ausließt.
Dabei ist zu erst zu erklären die EAN Nummer ist eine Nummer die auf jedem Produkt zu finden ist, und es eindeutig identifiziert, änhlich der ISBN nummer bei Büchern.
Bsp:
Land Hersteller Artikel Prüfziffer
04 12978 99214 8
(Eine zusammenhängende Nummer versuche es nur im Forum deutlicher zu machen)
Dabei bestehen die ersten 2 Ziffern aus dem Herkunftsland:
Für mich interessant wären dabei nur:
00-09 USA/Kanada
40-43 Deutschland
49 Japan
90/91 Österreich
93 Australien
alles andre: Unbekanntes Land
Die nächsten 5 Ziffern sind die Herstellernummer
Dann eine 5 stellige Artikelnummer und zum schluß eine Prüfziffer.
Dabei soll die Herstellernummer und Artikelnummer lediglich ausgegeben werden.
Das alles wäre kein Problem aber:
Es soll überprüft werden ob die Eingabe die korrkte Länge, 13 Zeichen hat!
Ob die Eingabe nur aus Zahlen besteht!
Falls nach diesen kriterien kein Fehler besteht soll er halt wie gesagt die hersteller und Artikelnummer auslesen und ausgeben.
Im Anschluss soll er schaun ob die Nummer insgesammt mit der Prüfziffer zusammen zu einem richtigen ergebnis kommt, um auszuschließen das sich ein Zahlendreher eingemogelt hat.
Bsp
041297899214 Prüfziffer 8
Dabei wird nun immer abwechselnd mal 1 und mal 3 Multipliziert, d.h alle ungeraden Stellen in unserem Bsp: 0,1,9,8,9,1 mit 1 und alle Geraden mit 3 multiplizieren.
Diese dann alle addieren und dabei kommt in unserem Bsp 112 heraus.
Diese 112 dann mit unserer Prüfziffer adiert macht 120 und somit ist die Eingabe ohne Zahlendreher erfolgt. Die Prüfziffer dient dazu, auf die nächste glatte durch 10 teilbare Zahl aufzustocken. D.h für 94 wäre die Prüfziffer 6 usw. (Ich hoffe ihr habt es verstanden)
Als entgültige Ausgabe hätten wir dann.
Herkunftsland
Artikelnummer
Herstellernummer
Prüfsummenkorrektheit
Nun zu meinen ersten Lösungsansätzen:
Längenfunktion um länge zu ermitteln
Dann die ersten beiden Zeichen rauskopieren diese per Case Of Entscheidung zuordnen, dann ausgeben
Dann die Herstellernummer rauskopieren und ausgeben
Die Artikelnummer rauskopieren und ausgeben
Dann per Zählschleife
For i=1 To 13 Do
S:=Copy(Art,i,1)
If odd(i)
then Sum:=Sum+S
else Sum:=Sum+(3*S)
(Art ist meine Variable für die komplette Eingabe, S hier eine Zwischenvariable)
Dann kopiert er die Prüfziffer addiert sie mit meiner Variable "Sum" und schaut dann per If entscheidung ob
B mod 10=0 ist (mod überprüft ja nur alles nach dem Komma)
Dann halt die Ausgabe ob die Prüfsumme stimmt oder nicht.
Was ich nicht hinkriege:
Die Überprüfung ob es nur Zahlen sind
und traurig aber wahr, einen funktionierenden Quelltext
Falls mir wer mit der Überprüfung oder dem ganzen Quelltext helfen kann wäre super nett. Bastle schon eine weile daran, kriege es aber einfach nicht zum laufen. Habe es mit absicht sehr ausfühlrich beschrieben, damit ihr auch sofort wisst, wie es genau aussehen soll!
-
16.05.07 09:36 #2
- Registriert seit
- Mar 2004
- Beiträge
- 441
Wow. Ein Erstpost und das in ordentlicher Schreibweise und mit eigenen Lösungsansätzen. Also wenn ich da nicht helfe, dann brauche ich nirgends zu helfen.

Ok, Problemstellung:
- Syntaxprüfung des Eingabewertes (Länge, Zahlen)
- Aufsplitten des Eingabewertes
- Semantische Prüfung (Prüfziffer)
- Ausgabe der Einzelteile
Das klingt für mich absolut nach einer eigenen Klasse.
Ich habe mal ein kleines Testprogramm gebastelt. Die Oberfläche dazu ist supereinfach:
- Formular, Name 'Main'
- Ein TEdit, Name 'edInput'
- Ein BitButton, Name btOk, Kind btOk
- Vier Labels, Name lbLand, lbHersteller, lbArtikel, lbGueltig
Enthalten sind im Source 2 Klassen:
- TEANObject: Das ist die Klasse, die die gesamten EAN-Prüfungen vornimmt. Mittels SendEAN kriegt sie einen String, schaut ob der paßt und wenn ja, dann wird der String entsprechend verarbeitet. Ansonsten hat das Ding nur einen Konstruktor, der es mit entsprechenden Defaultwerten vorbelegt.
- TMain: Das Hauptformular mit einer einzige Funktion: Wenn auf den 'ok'-Button geklickt wird, dann wird ein lokales EANObject erstellt, der Inhalt von edInput an das EANObject geschickt und hinterher werden die Labels gemäß des Inhalts des EANObjects aktualisiert.
Ich hoffe, der Source ist einfach genug gestrickt, daß er nachvollziehbar ist.
Code delphi:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
unit EANMain_unit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, StrUtils, Buttons; type TEANObject = class(TObject) private fLand: String; fHersteller: String; fArtikel: String; fPruefziffer: String; fGueltig: boolean; public constructor Create; procedure SendEAN(EANNummer: String); property Land: String read fLand; property Hersteller: String read fHersteller; property Artikel: String read fArtikel; property Gueltig: boolean read fGueltig; end; TMain = class(TForm) edInput: TEdit; btOk: TBitBtn; lbLand: TLabel; lbHersteller: TLabel; lbArtikel: TLabel; lbGueltig: TLabel; procedure btOkClick(Sender: TObject); end; var Main: TMain; implementation {$R *.dfm} constructor TEANObject.Create; begin inherited Create; fLand := ''; fHersteller := ''; fArtikel := ''; fPruefziffer := ''; fGueltig := false; end; procedure TEANObject.SendEAN(EANNummer: String); var i: Integer; v: Integer; IsNumeric: boolean; begin // Längenprüfung if Length(EANNummer) < 13 then ShowMessage('Die übergebene EAN Nummer ist zu kurz.') else if Length(EANNummer) > 13 then ShowMessage('Die übergebene EAN Nummer ist zu lang.') else begin // Prüfung, ob alle einzelnen Zeichen der übergebene EAN Nummer auch // Ziffern sind. IsNumeric := true; for i := 1 to 13 do if TryStrToInt(MidStr(EANNummer, i, 1), v) = false then ISNumeric := false; if IsNumeric = false then ShowMessage('Der übergebene Wert ist keine gültige EAN Nummer.') else begin // Aufteilen der übergebenen EAN Nummer auf die einzelnen Bereiche fLand := MidStr(EANNummer, 1, 2); fHersteller := MidStr(EANNummer, 3, 5); fArtikel := MidStr(EANNummer, 8, 5); fPruefziffer := MidStr(EANNummer, 13, 1); v := StrToInt(fLand); // Ländercodeprüfung if not( (v < 10) or ((v >= 40) and (v <= 43)) or (v = 49) or (v = 90) or (v = 91) or (v = 93) ) then ShowMessage('Die EANNummer bezieht sich auf ein nicht relevantes Land.') else begin // Prüfziffernprüfung v := 0; for i := 1 to 12 do if odd(i) then v := v + StrToInt(MidStr(EANNummer, i, 1)) else v := v + (StrToInt(MidStr(EANNummer, i, 1)) * 3); v := v + StrToInt(MidStr(EANNummer, 13, 1)); if v mod 10 <> 0 then ShowMessage('Die Prüfziffer stimmt nicht mit der EAN Nummer überein.') else fGueltig := true; end; end; end; end; procedure TMain.btOkClick(Sender: TObject); var EANObject: TEANObject; begin EANObject := TEANObject.Create; EANObject.SendEAN(edInput.Text); lbLand.Caption := 'Land: ' + EANObject.Land; lbHersteller.Caption := 'Hersteller: ' + EANObject.Hersteller; lbArtikel.Caption := 'Artikel: ' + EANObject.Artikel; if EANObject.Gueltig = true then lbGueltig.Caption := 'EAN Nummer ist gültig.' else lbGueltig.Caption := 'EAN Nummer ist NICHT gültig.'; if (EANObject <> nil) then FreeAndNil(EANObject); end; end.
Ähnliche Themen
-
TAPI - Nummer auslesen
Von H2SO4 im Forum .NET Web und KommunikationAntworten: 2Letzter Beitrag: 21.12.07, 13:51 -
Plugin Erkennung und Versions Nummer im IE auslesen
Von FipsTheThief im Forum Javascript & AjaxAntworten: 3Letzter Beitrag: 17.12.07, 11:30 -
Nummer auslesen und an den PC übertragen
Von tobee im Forum Handy, PDA & mobile WeltAntworten: 1Letzter Beitrag: 30.05.06, 00:17 -
IP-Nummer Speichern
Von Schattentänzer im Forum HTML & XHTMLAntworten: 6Letzter Beitrag: 07.07.04, 14:09 -
reihen nummer
Von mr_d2254 im Forum PHPAntworten: 4Letzter Beitrag: 31.01.02, 14:39





Zitieren
Login





