﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc	blockedby	blocking
1602	Bankdaten-Prüfmethode 16 unvollständig	Volker Rehn	somebody	"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 vorletzten 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 */
}}}"	Bug/Fehler	closed	hoch	modified-shop-2.0.5.0	Shop	2.0.4.2	fixed				
