KontoNr. Prüfziffern berechnen.

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

  • KontoNr. Prüfziffern berechnen.

    Hallo zusammen,

    ich habe das Gefühl ich verstehe die Logik nicht ganz, oder irgend etwas anderes...

    Ich versuche mittels der Prüfziffernberechnungsmethoden von der Deutschen Bundesbank diverse Kontonummern zu validieren.


    Für das Kennzeichen 00 habe ich folgende PHP Funktion geschrieben:

    PHP-Code:

    protected function _calcMethod_00($iACN)
    {
        
    settype($iACN"string");
        
    $iACN strrev($iACN);
        
    $sCheck =
            
    $this->crossfoot($iACN[0]*2) + $iACN[1] +
            
    $this->crossfoot($iACN[2]*2) + $iACN[3] +
            
    $this->crossfoot($iACN[4]*2) + $iACN[5] +
            
    $this->crossfoot($iACN[6]*2) + $iACN[7] + 
            
    $this->crossfoot($iACN[8]*2) + $iACN[9];
                          
        
    settype($sCheck"string");
        print 
    "Checknum: " $sCheck "<br />";
        
    $sPruefSum    10 $sCheck[1];
        print 
    "Prüfsumme: " $sPruefSum " (10 - " $sCheck[1] . ")<br />";
        if (
    $sPruefSum == '10') { $sPruefSum 0; }
        
        if (
    $sPruefSum == $iACN[0]) {
            print 
    'VALID';
        } else {
            print 
    'INVALID';
        }

    Die Funktion "crossfoot" berechnet mir die Quersumme.

    PHP-Code:
    protected function crossfoot($iNumber)
    {
        if (
    strlen($iNumber) == 2) {
            
    settype($iNumber"string");
            
    $res 0;
            for(
    $i=0$i<strlen($iNumber); $i++)
            {
                
    $res $res $iNumber[$i];
            }
            print 
    "Crossfoot from " $iNumber " = " $res"<br />";
        } else {
            print 
    "Number: " $iNumber  "<br />";
            
    $res $iNumber;
        }
        return 
    $res;

    Test von der Deutschen Bank zur Kennziffer 00:

    Modulus 10, Gewichtung 2, 1, 2, 1, 2, 1, 2, 1, 2
    Die Stellen der Kontonummer sind von rechts nach links mit
    den Ziffern 2, 1, 2, 1, 2 usw. zu multiplizieren. Die jeweiligen
    Produkte werden addiert, nachdem jeweils aus den
    zweistelligen Produkten die Quersumme gebildet wurde (z. B.
    Produkt 16 = Quersumme 7). Nach der Addition bleiben
    außer der Einerstelle alle anderen Stellen unberücksichtigt.
    Die Einerstelle wird von dem Wert 10 subtrahiert. Das
    Ergebnis ist die Prüfziffer (10. Stelle der Kontonummer).
    Ergibt sich nach der Subtraktion der Rest 10, ist die
    Prüfziffer 0.
    Testkontonummern: 9290701, 539290858, 1501824, 1501832


    Habe ich etwas vergessen?

  • #2
    Fehler gefunden, die Prüfziffer (10te Stelle) wird nicht mit in die Berechnung einbezogen:

    PHP-Code:
    $sCheck $this->crossfoot($iACN[1]*2) + $iACN[2] +
            
    $this->crossfoot($iACN[3]*2) + $iACN[4] +
            
    $this->crossfoot($iACN[5]*2) + $iACN[6] +
            
    $this->crossfoot($iACN[7]*2) + $iACN[8] + 
            
    $this->crossfoot($iACN[9]*2); 

    Kommentar


    • #3
      Noch ein Problem

      Aloah!

      Hänge grade wieder, diesmal bei der Kennziffer 06:


      http://api.xeony.eu/admin/index.php?...rg2=5073321010

      Da steht alles mögliche, inkl. dem aktuellen Status der Berechnung, aber irgendwie passt das hinten und vorne nicht! :-/


      Woran liegt es diesmal?

      LG Toby

      Kommentar


      • #4
        Ich seh das grad nur von meinem mobilen gerät, weswegen das ganze etwas schwer zu überblicken ist, aber mir scheint, du teilst einfach durch den modulus statt eine modulo operation durchzuführen
        [FONT="Helvetica"]twitter.com/unset[/FONT]

        Shitstorm Podcast – Wöchentliches Auskotzen

        Kommentar


        • #5
          "Die Summe ist durch 11 zu dividieren.", deshalb Teile ich das und nicht mit dem Modulus.

          Kommentar


          • #6
            wer lesen kann ist kalr im Vorteil

            die 10. Stelle ist die Prüfziffer! die wird NIE in die Berechnung mit hineingezogen, daher ist dieses schon falsch:

            Char 0 * 2 = + 0
            Char 1 * 3 = + 3
            Char 0 * 4 = + 0
            Char 1 * 5 = + 5
            Char 2 * 6 = + 12
            Char 3 * 7 = + 21
            Char 3 * 2 = + 6
            Char 7 * 3 = + 21
            Char 0 * 4 = + 0
            Char 5 * 5 = + 25
            TBT

            Die zwei wichtigsten Regeln für eine berufliche Karriere:
            1. Verrate niemals alles was du weißt!


            PHP 2 AllPatrizier II Browsergame

            Kommentar


            • #7
              Original geschrieben von Skaschy
              "Die Summe ist durch 11 zu dividieren.", deshalb Teile ich das und nicht mit dem Modulus.
              Im nächsten Satz wird aber vom Rest geredet, und einen Rest erhälst du nur durch eine Modulo-Operation.
              [FONT="Helvetica"]twitter.com/unset[/FONT]

              Shitstorm Podcast – Wöchentliches Auskotzen

              Kommentar


              • #8
                PHP-Code:
                    private function _checkMethod06$_konto$_gew '234567234' ) {
                        
                // vorne Null auffuellen
                        
                if( strlen$_konto ) < 10 ) {
                            
                $_konto str_repeat'0'10 strlen$_konto ) ).$_konto;
                        }
                        
                // relevante Stellen ermitteln
                        
                $relevant substr$_konto09);
                        
                //
                        
                $summe $this->_produktSumme$relevante$_gew );
                        
                $check = (11 - ( $summe 11 ))%10;
                        if( 
                $_konto[9] == $check ) {
                            return 
                true;
                        }
                        return 
                false;
                    }

                    
                /**
                     * Pruefziffernberechnung
                     * - Produkt der Stellen mit Gewichtung
                     * - Summe der Produkte
                     *
                     * @param    string $_nr
                     * @param    string $_gew
                     * @return   bool
                     * @todo
                     */
                    
                private function _produktSumme$_nr$_gew ) {
                        
                $max strlen$_nr ) - 1;
                        
                $summe 0;
                        for( 
                $i=$max$i>=0; --$i ) {
                            
                $f =  $_gew[$max-$i];
                            
                $produkt $_nr[$i] * $f;
                            
                $summe += $produkt;
                        }
                        return 
                $summe;
                    } 
                TBT

                Die zwei wichtigsten Regeln für eine berufliche Karriere:
                1. Verrate niemals alles was du weißt!


                PHP 2 AllPatrizier II Browsergame

                Kommentar


                • #9
                  Danke!

                  Ich werd mir deinen Code mal sorgfältig durch schauen, die Funktion _produktSumme ist wirklich einfacher, als jede Zahl manuel durch zu gehen.

                  Klar, ich war definitiv auf dem Falschen weg mit der Berechnung. Danke für die Lehre :-)

                  Kommentar

                  Lädt...
                  X