Modify

Opened 6 years ago

Closed 6 years ago

Last modified 6 years ago

#1803 closed Bug/Fehler (fixed)

Bankdaten-Prüfmethode Method06 unvollständig

Reported by: Volker Rehn Owned by: somebody
Priority: hoch Milestone: modified-shop-2.0.5.1
Component: Shop Version: 2.0.5.0
Keywords: Cc:
Blocked By: Blocking:

Description

Eine korrekte Kontonr der Sparda-Bank Ostbayern (PRZ 84) blieb in der Bankdatenprüfung hängen. Ursache war die zentrale Prüfmethode Method06, hier definiert:
​​https://www.bundesbank.de/resource/blob/603320/16a80c739bbbae592ca575905975c2d0/mL/pruefzifferberechnungsmethoden-data.pdf
und in /includes/classes/banktransfer_validation.php implementiert.

Method06 kann mit verschiedenen Modulatoren aufgerufen werden (7, 10, und 11) und hat Korrekturcode für 7 und 11, falls die Checksumme nicht mit der Prüfziffer in der Kontonr verglichen werden kann, weil die Stelligkeit nicht passt. Nur für Modulator 10 hat Method06 für diesen Fall keinen Korrekturcode.

Genau der wird aber uU benötigt, wenn Mark84 Methode C anwendet, und dafür Method06 mit Modulator 10 aufruft. Mark84 wird selten benutzt (Sparda-Bank Ostbayern, Sparda-Bank Augsburg), und der Fehler tritt nur bei manchen Kontonummern dieser Banken auf, deren letzte Stelle 0 ist. Sonst ruft keine Prüfmethode die Method06 mit Modulator 10 auf (Prüfmethode Mark90 auch, aber die wird von keiner Bank verwendet). Deswegen ist der Fehler noch nicht aufgefallen.

Der neue Code für Method06:

private function Method06($AccountNo, $Significance, $Modified, $Checkpoint, $Modulator) {
    $Help = 0;
    $Method06 = 1;
     $AccountNo = $this->ExpandAccount($AccountNo);
     switch ($Modified) {
       case FALSE :
        for ($Run = 0; $Run < strlen($Significance);$Run++) {
          $Help += (substr($AccountNo,$Run,1) * substr($Significance,$Run,1));
        }
        break;
      case TRUE  :
        for ($Run = 0; $Run < strlen($Significance);$Run++) {
          $Help += (substr($AccountNo,$Run,1) * HexDec(substr($Significance,$Run,1)));
        }
        break;
    }
    $Help = $Help % $Modulator;
    $Checksum = $Modulator - $Help;
    // Bedingung bei Modulator 7
    /* --- Fix by Christian Rothe 20110327 --- */
    if ($Help == 0 && $Modulator == 7) {
      $Checksum = 0;
    }
    // --- fix vr 20200414
    if ($Help == 0 && $Modulator == 10) {
      $Checksum = 0;
    }
    // Bedingung bei Modulator 11
    if ($Help < 2 && $Modulator == 11) {
      $Checksum = 0;
    }
    if ($Checksum == substr($AccountNo,$Checkpoint-1,1)) {
      $Method06 = 0;
    }
    return $Method06;
  }

Attachments (1)

changeset_12700.zip (21.6 KB ) - added by Torsten Riemer 6 years ago.

Download all attachments as: .zip

Change History (3)

comment:1 by Gerhard Waldemair, 6 years ago

Resolution: fixed
Status: newclosed

In 12700:

fix #1803 - fix banktransfer validation method Method06

comment:2 by Torsten Riemer, 6 years ago

Milestone: modified-shop-2.0.5.1

by Torsten Riemer, 6 years ago

Attachment: changeset_12700.zip added

Modify Ticket

Action
as closed The owner will remain somebody.
The resolution will be deleted. Next status will be 'reopened'.

Add Comment


E-mail address and name can be saved in the Preferences .
 
Note: See TracTickets for help on using tickets.