Volker Englisch
2016-03-24 09:41:51 UTC
Ich versuche gerade, die Prüfsumme der Banken-IBAN zu berechnen. Ein
Beispiel im Netz führt dazu, dass aus der Zahlenfolge
700901001234567890131400 nach Modulo 97 ein Wert von 90 übrig bleiben
soll:
IDENTIFICATION DIVISION.
PROGRAM-ID. T.
AUTHOR. EH.
DATE-WRITTEN. 2016/03/24.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 W-ZAHL PIC 9(24).
01 W-ERGEBNIS PIC 9(24)V999.
01 W-ERG-DEZ PIC 9(24).999.
01 W-MOD PIC 9(2).
PROCEDURE DIVISION.
MOVE 700901001234567890131400 TO W-ZAHL.
DIVIDE W-ZAHL BY 97 GIVING W-ERGEBNIS.
MOVE W-ERGEBNIS TO W-ERG-DEZ.
MOVE FUNCTION MOD(W-ZAHL, 97) TO W-MOD.
DISPLAY "ERGEBNIS NACH DIVISION: " W-ERG-DEZ.
DISPLAY "ERGEBNIS NACH MODULO : " W-MOD.
STOP RUN.
Heraus kommt:
ERGEBNIS NACH DIVISION: 007225783517882143197230.927
ERGEBNIS NACH MODULO : 57
Nach der Division durch 97 bleibt ein Rest von 927 - je nach Rundung
auf zweistellig bleibt 92 oder 93 übrig. Leider nicht 90, wie erwartet.
Die interne COBOL-Modulo-Funktion bringt ganz andere Werte zu Tage.
Erkennt jemand auf Anhieb meinen Denkfehler?
V*
Beispiel im Netz führt dazu, dass aus der Zahlenfolge
700901001234567890131400 nach Modulo 97 ein Wert von 90 übrig bleiben
soll:
IDENTIFICATION DIVISION.
PROGRAM-ID. T.
AUTHOR. EH.
DATE-WRITTEN. 2016/03/24.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 W-ZAHL PIC 9(24).
01 W-ERGEBNIS PIC 9(24)V999.
01 W-ERG-DEZ PIC 9(24).999.
01 W-MOD PIC 9(2).
PROCEDURE DIVISION.
MOVE 700901001234567890131400 TO W-ZAHL.
DIVIDE W-ZAHL BY 97 GIVING W-ERGEBNIS.
MOVE W-ERGEBNIS TO W-ERG-DEZ.
MOVE FUNCTION MOD(W-ZAHL, 97) TO W-MOD.
DISPLAY "ERGEBNIS NACH DIVISION: " W-ERG-DEZ.
DISPLAY "ERGEBNIS NACH MODULO : " W-MOD.
STOP RUN.
Heraus kommt:
ERGEBNIS NACH DIVISION: 007225783517882143197230.927
ERGEBNIS NACH MODULO : 57
Nach der Division durch 97 bleibt ein Rest von 927 - je nach Rundung
auf zweistellig bleibt 92 oder 93 übrig. Leider nicht 90, wie erwartet.
Die interne COBOL-Modulo-Funktion bringt ganz andere Werte zu Tage.
Erkennt jemand auf Anhieb meinen Denkfehler?
V*