Opened 7 years ago
Last modified 7 years ago
#1602 closed Bug/Fehler
Bankdaten-Prüfmethode 16 unvollständig — at Version 2
| 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 (last modified by )
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 */
Change History (2)
comment:1 by , 7 years ago
| Component: | Admin → Shop |
|---|
comment:2 by , 7 years ago
| Description: | modified (diff) |
|---|
