Opened 3 months ago

Closed 3 months ago

Last modified 3 months ago

#1803 closed Bug/Fehler (fixed)

Bankdaten-Prüfmethode Method06 unvollständig

Reported by: vr Owned by: somebody
Priority: hoch Milestone: modified-shop-2.0.5.1
Component: Shop Version: 2.0.5.0

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 Tomcraft 3 months ago.

Download all attachments as: .zip

Change History (3)

comment:1 Changed 3 months ago by GTB

  • Resolution set to fixed
  • Status changed from new to closed

In 12700:

fix #1803 - fix banktransfer validation method Method06

comment:2 Changed 3 months ago by Tomcraft

  • Milestone set to modified-shop-2.0.5.1

Changed 3 months ago by Tomcraft

Add Comment

Modify Ticket

Action
as closed
The resolution will be deleted. Next status will be 'reopened'
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.