tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
4477
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    funnyluke funnyluke ist offline Grünschnabel
    Registriert seit
    Apr 2007
    Beiträge
    1
    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!
     

  2. #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

  1. TAPI - Nummer auslesen
    Von H2SO4 im Forum .NET Web und Kommunikation
    Antworten: 2
    Letzter Beitrag: 21.12.07, 13:51
  2. Plugin Erkennung und Versions Nummer im IE auslesen
    Von FipsTheThief im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 17.12.07, 11:30
  3. Nummer auslesen und an den PC übertragen
    Von tobee im Forum Handy, PDA & mobile Welt
    Antworten: 1
    Letzter Beitrag: 30.05.06, 00:17
  4. IP-Nummer Speichern
    Von Schattentänzer im Forum HTML & XHTML
    Antworten: 6
    Letzter Beitrag: 07.07.04, 14:09
  5. reihen nummer
    Von mr_d2254 im Forum PHP
    Antworten: 4
    Letzter Beitrag: 31.01.02, 14:39