Master Mainframe Technologies - COBOL, JCL, DB2, VSAM, CICS & More
ABEND Codes SQLCODEs File Status Interview Prep Contact
← Back to Real-World Scenarios
Real-World Scenarios | Intermediate | COBOL

Credit Card Validation

Problem Description

Validate credit card number using Luhn algorithm. Check: 16 digits, valid checksum, identify card type (Visa/Master/Amex).

Expected Output

VALID or INVALID with card type

Hints

Luhn: double every second digit from right, sum digits, must be divisible by 10.

Solution

IDENTIFICATION DIVISION. PROGRAM-ID. CCVALID. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-CARD-NUM PIC X(16). 01 WS-DIGIT PIC 9. 01 WS-DOUBLED PIC 99. 01 WS-SUM PIC 999 VALUE 0. 01 WS-IDX PIC 99. 01 WS-CARD-TYPE PIC X(10). 01 WS-REMAINDER PIC 99. PROCEDURE DIVISION. DISPLAY "ENTER 16-DIGIT CARD NUMBER: ". ACCEPT WS-CARD-NUM. IF WS-CARD-NUM(1:1) = "4" MOVE "VISA" TO WS-CARD-TYPE ELSE IF WS-CARD-NUM(1:1) = "5" MOVE "MASTERCARD" TO WS-CARD-TYPE ELSE MOVE "UNKNOWN" TO WS-CARD-TYPE END-IF. MOVE 0 TO WS-SUM. PERFORM VARYING WS-IDX FROM 16 BY -1 UNTIL WS-IDX < 1 MOVE WS-CARD-NUM(WS-IDX:1) TO WS-DIGIT IF FUNCTION MOD(16 - WS-IDX, 2) = 1 MULTIPLY WS-DIGIT BY 2 GIVING WS-DOUBLED IF WS-DOUBLED > 9 SUBTRACT 9 FROM WS-DOUBLED END-IF ADD WS-DOUBLED TO WS-SUM ELSE ADD WS-DIGIT TO WS-SUM END-IF END-PERFORM. DIVIDE WS-SUM BY 10 GIVING WS-IDX REMAINDER WS-REMAINDER. IF WS-REMAINDER = 0 DISPLAY "VALID " WS-CARD-TYPE " CARD" ELSE DISPLAY "INVALID CARD NUMBER" END-IF. STOP RUN.

Explanation:

Luhn algorithm implementation with card type detection.