Ankündigung

Einklappen
Keine Ankündigung bisher.

Modulo10-Verfahren - Prüfziffer erstellen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Modulo10-Verfahren - Prüfziffer erstellen

    Guten Tag
    und zwar hocke ich bei einer PHP Hausaufgabe fest. Die lautet:

    In einem Onlineshop werden Kundennummern verwendet (maximal 13 Stellen inklusive der Prüfziffer), die mit einer Prüfziffer nach dem Modulo10-Verfahren gesichert sind. Dabei wird das Verfahren angewandt, mit dem auch Prüfziffern einer EAN-Nummer gebildet werden. Es ist eine Anwendung zu erstellen, die eine übermittelte Kundennummer auf Gültigkeit überprüft. Das Ergebnis der Überprüfung ist durch einen entsprechenden Hinweis auszugeben.
    Für das Modulo10-Verfahren habe ich mir folgende Anleitung von "arndt-bruenner.de" hinzugezogen:

    Die Prüfziffer der EAN-Nummern (13. Ziffer) berechnet sich, indem man die ersten zwölf Ziffern abwechselnd mit 1 und 3 multipliziert (links mit 1 anfangen) und diese Produkte summiert. Die Prüfziffer ist die Differenz der Summe zum nächsten Vielfachen von 10. Falls die Summe durch 10 teilbar ist, ist die Prüfziffer die 0.
    Mein Versuch sieht bis jetzt so aus:

    PHP-Code:
        <?php
            
    if ((isset($_GET['kundenn'])) && $_GET['kundenn'] <> "")
            {
                
    $entered_number $_GET['kundenn'];


                echo 
    "<br> <hr noshade width='500' size='3' align='left'> <br>";
                echo 
    "<b>Zu pr&uuml;fende Kundennummer:</b>  $entered_number <br><br> ";

                
    $without_checkdigit substr($entered_number0, -1);
                
    $mult                 = array( 1);
                
    $withmultiplication 0;
                
    $checked_number        0;

                for (
    $i 0$i strlen($without_checkdigit); $i++)
                {
                    
    $withmultiplication += substr$without_checkdigit$i) * $mult[$i 2];

                }

                
    $checked_number 
                    
            }
        
    ?>
    Meine Fragen sind:

    1. Ist der Anfang sprich die Summierung der Produkte und die Multiplikation der einzelnen Ziffern mit 1 und 3 so korrekt?

    2. Wie setze ich den Part:
    Code:
    Die Prüfziffer ist die Differenz der Summe zum nächsten Vielfachen von 10.
    aus der Erklärung um?

    Meine Idee wäre gewesen:

    PHP-Code:
         $checked_number 10 - ($withmultiplication 10): 
    Aber bin mir nicht sicher.

    Ich hoffe ihr könnt mir da weiterhelfen!

  • #2
    Edit:

    Habe die Aufgabe so gelöst:

    Ist das so wie die Aufgabe es verlangt? Oder habe ich da was missverstanden?

    PHP-Code:
    <html>

    <head>

        <title>Aufgabe: S. 259 Nr. 7.11</title>

        <?php

            $kundennummern 
    = array(
                                    
    1234567891231,
                                    
    4321987654328,
                                    
    9876543219879,
                                    
    6789123456782
                                    
    );
        
    ?>

    </head>


        <form action="Aufgabe 7.11.php" method="get">

            <p>
                <b>Kundernummer: </b>
                </br></br>
                <input name="kundenn" type"number" size="15" maxlength="13">
            </p>

            <input type="submit" value="&Uuml;berpr&uuml;fen">

        </form>

        <?php
            
    if ((isset($_GET['kundenn'])) && $_GET['kundenn'] <> "")
            {
                
    $entered_number $_GET['kundenn'];


                echo 
    "<br> <hr noshade width='500' size='3' align='left'> <br>";
                echo 
    "<b>Zu pr&uuml;fende Kundennummer:</b>  $entered_number <br><br> ";

                
    $without_checkdigit  substr($entered_number0, -1);
                
    $multiplication         = array( 1);
                
    $with_multiplication 0;
                
    $checked_number         0;

                for (
    $i 0$i strlen($without_checkdigit); $i++)
                {
                    
    $with_multiplication += substr$without_checkdigit$i) * $multiplication[$i 2];

                }

                
                
    $check_digit 10 - ($with_multiplication 10);

                if (
    $check_digit == 10
                    
    $check_digit 0;

                echo 
    "<b>Berechnete Pr&uuml;fziffer:</b> $check_digit <br><br><br>";
                
                
    $checked_number $without_checkdigit $check_digit;



                if (
    in_array($checked_number$kundennummern))
                {
                    echo 
    "<b> <span style='color:green'>Kundennummer ist korrekt! </span> <b>";
                }
                else
                {
                    echo 
    "<b> <span style='color:red'>Kundennummer ist nicht korrekt! </span> <b>";
                }


            }
        
    ?>

    <body>
    </body>
    </html>

    Kommentar


    • #3
      PHP-Code:
                  $check_digit 10 - ($with_multiplication 10); 

                  if (
      $check_digit == 10)  
                      
      $check_digit 0
      Das ist nicht nur doppelt sondern dreifach gemoppelt.

      PHP-Code:
      10 - ($with_multiplication 10
      ist für alle Zahlen >= 10 das gleiche wie
      PHP-Code:
      $with_multiplication 10 
      , bei Zahlen <10 ist das Ergebnis jedoch eine negative Zahl, nicht was du willst.
      Außerdem kann bei X%10 keine 10 rauskommen, daher ist die if auch unnötig.
      [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

      Kommentar


      • #4
        Zitat von tkausl Beitrag anzeigen
        PHP-Code:
                    $check_digit 10 - ($with_multiplication 10); 

                    if (
        $check_digit == 10)  
                        
        $check_digit 0
        Das ist nicht nur doppelt sondern dreifach gemoppelt.

        PHP-Code:
        10 - ($with_multiplication 10
        ist für alle Zahlen >= 10 das gleiche wie
        PHP-Code:
        $with_multiplication 10 
        , bei Zahlen <10 ist das Ergebnis jedoch eine negative Zahl, nicht was du willst.
        Außerdem kann bei X%10 keine 10 rauskommen, daher ist die if auch unnötig.
        Da kann ich dir nicht zustimmen
        PHP-Code:
        $with_multiplication 12;
        $check_digit 10 - ($with_multiplication 10); 

        if (
        $check_digit == 10)  
            
        $check_digit 0;
            
        echo 
        $check_digit."\n";

        $with_multiplication 12;
        $check_digit $with_multiplication 10
            
        echo 
        $check_digit
        erzeugt als Ausgabe:
        Code:
        8
        2
        [URL="http://php.net/manual/en/migration55.deprecated.php"]mysql ist veraltet[/URL] [URL="http://php-de.github.io/jumpto/mail-class/"]Mails senden: Ohne Probleme und ohne mail()[/URL]
        [PHP]echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>';[/PHP]

        Kommentar


        • #5
          Oh verdammt, ich bin davon ausgegangen, dass zuerst subtrahiert wird. Ich sollte meine Gedanken ordnen

          Edit: Und auch, dass 10 von $with_multiplication abgezogen wird und nicht andersrum. Was hab ich da nur gedacht? Ich bin raus
          [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

          Kommentar


          • #6
            Zitat von ChrisB. Beitrag anzeigen
            Meine Fragen sind:

            1. Ist der Anfang sprich die Summierung der Produkte und die Multiplikation der einzelnen Ziffern mit 1 und 3 so korrekt?
            Hier sofort die Gegenfrage: Hast du es ausprobiert und nachgerechnet?
            Damit beantwortet sich die Frage aus sich selbst...

            Auch Frage 2 beantwortet sich so... keine Ahnung, warum du keine Ahnung hast, wenn der Code wirklich von dir ist, musst du dir dabei irgendwas gedacht haben. So einen Code schüttelt man nicht mit "keine Ahnung" aus dem Ärmel.
            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

            Kommentar


            • #7
              Die ersten zwei Fragen erübrigte sich nach dem zweiten Post, da ich dort ja das fertige Ergebnis hatte.
              Nur stell ich die richtige Umsetzung in Frage, sprich ob das wirklich das war, was verlangt war, oder ich einfach nur die Aufgabe falsch verstanden habe und somit da einen Denkfehler habe.

              Weil man könnte die Aufgabe auch so verstehen, dass man nur 12 Zahlen eingegeben muss, die dreizehnte und somit die Prüfziffer vorgegeben im Programmcode ist und diese halt immer die gleiche Prüfziffer rauskommen muss.
              Weil in meinem Beispiel hätte ich ja genauso gut die Eingabe mit dem Array Inhalt vergleichen können und keine Berechnung durchführen müssen.

              Ich hoffe du verstehst, was meine Frage und mein Problem ist.
              Also die ersten zwei Fragen hatten sich eig. damit erledigt. Nur die dritte (einen Post später) nicht.

              Kommentar

              Lädt...
              X