71 lines
2.4 KiB
COBOL
71 lines
2.4 KiB
COBOL
IDENTIFICATION DIVISION.
|
|
PROGRAM-ID. AUTH.
|
|
*****************************************************************
|
|
* PROGRAM: AUTH - Transaction Authorization
|
|
* PURPOSE: Validate and authorize card transactions
|
|
* AUTHOR: Sample Application
|
|
*****************************************************************
|
|
ENVIRONMENT DIVISION.
|
|
DATA DIVISION.
|
|
WORKING-STORAGE SECTION.
|
|
|
|
01 WS-TRANSACTION-DATA.
|
|
05 WS-CARD-NUMBER PIC X(16).
|
|
05 WS-TRANSACTION-AMOUNT PIC 9(11)V99.
|
|
05 WS-AVAILABLE-BALANCE PIC 9(11)V99.
|
|
05 WS-RESPONSE-CODE PIC 9(2).
|
|
05 WS-MERCHANT-ID PIC X(15).
|
|
|
|
01 WS-HOST-RESPONSE.
|
|
05 WS-HOST-BALANCE PIC 9(11)V99.
|
|
05 WS-HOST-STATUS PIC X(2).
|
|
|
|
01 WS-FLAGS.
|
|
05 WS-VALID-CARD PIC X VALUE 'N'.
|
|
05 WS-SUFFICIENT-FUNDS PIC X VALUE 'N'.
|
|
|
|
PROCEDURE DIVISION.
|
|
|
|
0000-MAIN-PROCESS.
|
|
PERFORM 1000-INITIALIZE
|
|
PERFORM 2000-VALIDATE-CARD
|
|
IF WS-VALID-CARD = 'Y'
|
|
PERFORM 3000-CHECK-BALANCE
|
|
IF WS-SUFFICIENT-FUNDS = 'Y'
|
|
PERFORM 4000-AUTHORIZE
|
|
ELSE
|
|
MOVE 51 TO WS-RESPONSE-CODE
|
|
END-IF
|
|
ELSE
|
|
MOVE 14 TO WS-RESPONSE-CODE
|
|
END-IF
|
|
PERFORM 9000-FINALIZE
|
|
STOP RUN.
|
|
|
|
1000-INITIALIZE.
|
|
INITIALIZE WS-TRANSACTION-DATA
|
|
INITIALIZE WS-HOST-RESPONSE
|
|
MOVE 'N' TO WS-VALID-CARD
|
|
MOVE 'N' TO WS-SUFFICIENT-FUNDS.
|
|
|
|
2000-VALIDATE-CARD.
|
|
IF WS-CARD-NUMBER NOT = SPACES
|
|
MOVE 'Y' TO WS-VALID-CARD
|
|
END-IF.
|
|
|
|
3000-CHECK-BALANCE.
|
|
* BUG: WS-AVAILABLE-BALANCE is PIC 9(11)V99 but HOST returns
|
|
* PIC 9(11)V99, causing truncation on amounts > 9,999,999.99
|
|
MOVE WS-HOST-BALANCE TO WS-AVAILABLE-BALANCE
|
|
IF WS-AVAILABLE-BALANCE >= WS-TRANSACTION-AMOUNT
|
|
MOVE 'Y' TO WS-SUFFICIENT-FUNDS
|
|
ELSE
|
|
MOVE 'N' TO WS-SUFFICIENT-FUNDS
|
|
END-IF.
|
|
|
|
4000-AUTHORIZE.
|
|
MOVE 00 TO WS-RESPONSE-CODE.
|
|
|
|
9000-FINALIZE.
|
|
CONTINUE.
|