[COBOL] IBAN-Prüfsumme berechnen

24/03/2016 - 10:41 von Volker Englisch | Report spam
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*
 

Lesen sie die antworten

#1 Ulrich Korndoerfer
24/03/2016 - 12:30 | Warnen spam
Hallo,

Volker Englisch schrieb:
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.




700901001234567890131400 / 97 = 7225783517882143197230.927835051...
700901001234567890131400 mod 97 = 90
90 / 97 = 0.927835051...

Ulrich Korndoerfer

VB tips, helpers, solutions -> http://www.prosource.de/Downloads/
MS Newsgruppen Alternativen -> http://www.prosource.de/ms-ng-umzug.html

Ähnliche fragen