Opened 7 years ago

Last modified 7 years ago

#1602 closed Bug/Fehler

Bankdaten-Prüfmethode 16 unvollständig — at Initial Version

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

Description

Aufgefallen, weil eine korrekte Kontonr der Fidor-Bank in der Bankdatenprüfung hängenblieb. Ursache war Prüfmethode 16, hier definiert:
https://www.bundesbank.de/resource/blob/603320/16a80c739bbbae592ca575905975c2d0/mL/pruefzifferberechnungsmethoden-data.pdf und in /includes/classes/banktransfer_validation.php implementiert.

Der Sonderfall, dass die Kontonr auch dann ok ist, wenn zwar die Prüfsumme 1 ist, aber die beiden letzten Ziffern der Kontonr gleich sind, wird im Code bisher nicht berücksichtigt. Es wird dann zwar die Prüfsumme mit der vorletzte Ziffer verglichen, aber nicht die beiden letzten Ziffern untereinander, und das ist hier die Ergänzung.

Neue Version der Methode16:

private function Method16($AccountNo, $Significance, $Checkpoint) {
    $Help = 0;
    $Method16 = 1;
    $AccountNo = $this->ExpandAccount($AccountNo);
    for ($Run = 0; $Run < strlen($Significance); $Run++) {
      $Help += (substr($AccountNo, $Run, 1) * substr($Significance, $Run, 1));
    }
    $Help = $Help % 11;
    $Checksum = 11 - $Help;
    if ($Help == 0) {
      $Checksum = 0;
    }
    if ($Checksum == substr($AccountNo, $Checkpoint - 1, 1)) {
       $Method16 = 0;
    }
    if ($Help == 1) {
      if ($Checksum == substr($AccountNo, $Checkpoint - 2, 1)) {
        $Method16 = 0;
      }
      
      // BOF Sonderfall fehlte: Vergleich der letzten beiden Stellen (9. und 10. bei Mark16 bzw 6. und 7. bei Mark23) 7.3.2019 vr
      $Checksum = substr($AccountNo, $Checkpoint - 1, 1);
      if ($Checksum == substr($AccountNo, $Checkpoint - 2, 1)) {
        $Method16 = 0;
      }
      // EOF
      
    }
    return $Method16;
  }  /* End of Method16 */

Change History (0)

Note: See TracTickets for help on using tickets.