The ARE clause represents one of COBOL's most fundamental and versatile conditional testing mechanisms, serving as the primary tool for implementing sophisticated data validation, class testing, and logical evaluation processes that enable applications to perform comprehensive data integrity checks and business rule validation. Far more than a simple conditional operator, the ARE clause embodies COBOL's comprehensive approach to data validation by providing advanced class testing capabilities, sophisticated data type verification, comprehensive format validation, and robust error detection mechanisms that enable applications to implement enterprise-grade data quality assurance, comprehensive input validation, and sophisticated business logic verification while maintaining data integrity, processing accuracy, and robust error handling capabilities that are essential for mission-critical business applications requiring advanced data validation and comprehensive quality control processes.
In enterprise computing environments, the ARE clause serves as a critical foundation for advanced data validation implementation, enabling developers to create sophisticated data quality applications that handle complex validation requirements, implement comprehensive data integrity checks, provide robust input verification processes, and maintain high-quality data standards throughout the application lifecycle. Its capabilities extend far beyond simple data type checking to encompass sophisticated class testing strategies, advanced format validation techniques, complex business rule verification, and integration with modern data quality frameworks that are essential for applications requiring comprehensive data validation and enterprise-grade quality assurance capabilities that support complex business data requirements and advanced data integrity management across multiple data sources and sophisticated validation scenarios.
The ARE clause is a conditional testing operator in COBOL that provides sophisticated data validation and class testing capabilities. It's primarily used to test whether data items belong to specific classes (such as NUMERIC, ALPHABETIC, or ALPHANUMERIC) or meet certain validation criteria. The ARE clause enhances code readability by providing a natural language-like syntax for expressing complex validation logic.
Unlike simple comparison operators, ARE enables sophisticated class testing that goes beyond basic equality checks. It can validate data types, check for specific character classes, verify format compliance, and perform complex logical evaluations that are essential for robust data validation in business applications. This makes it particularly valuable for input validation, data quality assurance, and business rule enforcement.
The ARE clause follows the pattern: IF data-item ARE class-name
where class-name represents predefined COBOL classes like NUMERIC, ALPHABETIC, ALPHABETIC-UPPER, ALPHABETIC-LOWER, or ALPHANUMERIC. This syntax provides intuitive, readable code that clearly expresses the validation intent.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152*> Basic ARE clause syntax for class testing 01 INPUT-DATA. 05 CUSTOMER-ID PIC X(10). 05 CUSTOMER-NAME PIC X(30). 05 PHONE-NUMBER PIC X(15). 05 ZIP-CODE PIC X(10). 05 ACCOUNT-BALANCE PIC X(12). 05 BIRTH-DATE PIC X(8). *> Class testing with ARE clause IF CUSTOMER-ID ARE ALPHANUMERIC DISPLAY "Customer ID format is valid" ELSE DISPLAY "Customer ID contains invalid characters" END-IF. *> Numeric validation IF ACCOUNT-BALANCE ARE NUMERIC DISPLAY "Account balance is numeric" ELSE DISPLAY "Account balance contains non-numeric data" END-IF. *> Alphabetic validation IF CUSTOMER-NAME ARE ALPHABETIC DISPLAY "Customer name contains only letters" ELSE DISPLAY "Customer name contains non-alphabetic characters" END-IF. *> Upper case validation IF CUSTOMER-NAME ARE ALPHABETIC-UPPER DISPLAY "Customer name is in uppercase" ELSE DISPLAY "Customer name is not in uppercase" END-IF. *> Lower case validation IF CUSTOMER-NAME ARE ALPHABETIC-LOWER DISPLAY "Customer name is in lowercase" ELSE DISPLAY "Customer name is not in lowercase" END-IF. *> Multiple field validation IF CUSTOMER-ID ARE ALPHANUMERIC AND ACCOUNT-BALANCE ARE NUMERIC AND CUSTOMER-NAME ARE ALPHABETIC DISPLAY "All basic validations passed" ELSE DISPLAY "One or more validation failures" END-IF.
Basic ARE clause syntax demonstrates class testing for different data types.
The examples above show how ARE simplifies data validation by providing clear, readable tests for different character classes. ALPHANUMERIC tests for any combination of letters and numbers, NUMERIC ensures only digits (and possibly signs), while ALPHABETIC validates that data contains only letters and spaces.
Advanced ARE usage involves combining class testing with complex business logic, implementing sophisticated validation rules, and creating comprehensive data quality frameworks. These patterns enable robust input validation, data integrity checking, and business rule enforcement across complex application scenarios.
Modern COBOL applications often require validation that goes beyond simple class testing to include format verification, range checking, and business rule validation. ARE clauses can be combined with other conditional operators to create sophisticated validation frameworks that ensure data quality and business rule compliance.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192*> Advanced ARE validation patterns 01 VALIDATION-DATA. 05 SSN-INPUT PIC X(11). 05 EMAIL-INPUT PIC X(50). 05 CREDIT-CARD-INPUT PIC X(19). 05 DATE-INPUT PIC X(10). 05 CURRENCY-INPUT PIC X(15). *> Complex validation with ARE and additional checks VALIDATE-SSN. *> Check if SSN has correct format (XXX-XX-XXXX) IF SSN-INPUT(1:3) ARE NUMERIC AND SSN-INPUT(4:1) = "-" AND SSN-INPUT(5:2) ARE NUMERIC AND SSN-INPUT(7:1) = "-" AND SSN-INPUT(8:4) ARE NUMERIC DISPLAY "SSN format is valid" ELSE DISPLAY "SSN format is invalid" END-IF. VALIDATE-EMAIL. *> Basic email validation using ARE IF EMAIL-INPUT ARE ALPHANUMERIC OR EMAIL-INPUT CONTAINS "@" AND EMAIL-INPUT CONTAINS "." DISPLAY "Email format appears valid" ELSE DISPLAY "Email format is invalid" END-IF. VALIDATE-CREDIT-CARD. *> Credit card validation with ARE IF CREDIT-CARD-INPUT ARE NUMERIC AND LENGTH OF CREDIT-CARD-INPUT >= 13 AND LENGTH OF CREDIT-CARD-INPUT <= 19 DISPLAY "Credit card format is valid" ELSE DISPLAY "Credit card format is invalid" END-IF. VALIDATE-DATE-FORMAT. *> Date validation (MM/DD/YYYY format) IF DATE-INPUT(1:2) ARE NUMERIC AND DATE-INPUT(3:1) = "/" AND DATE-INPUT(4:2) ARE NUMERIC AND DATE-INPUT(6:1) = "/" AND DATE-INPUT(7:4) ARE NUMERIC DISPLAY "Date format is valid" ELSE DISPLAY "Date format is invalid" END-IF. VALIDATE-CURRENCY. *> Currency validation with optional dollar sign IF (CURRENCY-INPUT(1:1) = "$" AND CURRENCY-INPUT(2:) ARE NUMERIC) OR CURRENCY-INPUT ARE NUMERIC DISPLAY "Currency format is valid" ELSE DISPLAY "Currency format is invalid" END-IF. *> Comprehensive validation framework COMPREHENSIVE-VALIDATION. PERFORM VALIDATE-SSN. PERFORM VALIDATE-EMAIL. PERFORM VALIDATE-CREDIT-CARD. PERFORM VALIDATE-DATE-FORMAT. PERFORM VALIDATE-CURRENCY. *> Business rule validation with ARE 01 BUSINESS-RULES. 05 MIN-AGE PIC 9(2) VALUE 18. 05 MAX-AGE PIC 9(2) VALUE 65. 05 MIN-INCOME PIC 9(8) VALUE 25000. VALIDATE-BUSINESS-RULES. IF AGE-INPUT ARE NUMERIC AND FUNCTION NUMVAL(AGE-INPUT) >= MIN-AGE AND FUNCTION NUMVAL(AGE-INPUT) <= MAX-AGE DISPLAY "Age meets business requirements" ELSE DISPLAY "Age does not meet business requirements" END-IF. IF INCOME-INPUT ARE NUMERIC AND FUNCTION NUMVAL(INCOME-INPUT) >= MIN-INCOME DISPLAY "Income meets minimum requirements" ELSE DISPLAY "Income below minimum requirements" END-IF.
Advanced ARE patterns combine class testing with format validation and business rules.
These advanced examples demonstrate how ARE clauses form the foundation of comprehensive validation systems. By combining class testing with format checking and business rule validation, applications can ensure data quality at multiple levels - from basic character validation to complex business logic compliance.
To demonstrate the practical power of the ARE clause in enterprise applications, let's examine a comprehensive customer data validation system for a financial services company. This example showcases how ARE clauses enable sophisticated data quality assurance, multi-level validation processes, and comprehensive business rule enforcement across complex customer data structures.
This system validates customer information at multiple levels - from basic data type checking to complex format validation and business rule compliance. The ARE clauses provide the foundation for ensuring data quality, regulatory compliance, and business rule enforcement while maintaining high performance and comprehensive error reporting capabilities.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552IDENTIFICATION DIVISION. PROGRAM-ID. ARE-VALIDATION-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. *> Customer data structure for validation 01 CUSTOMER-INPUT-DATA. 05 CUSTOMER-ID PIC X(12). 05 FIRST-NAME PIC X(25). 05 LAST-NAME PIC X(30). 05 MIDDLE-INITIAL PIC X(1). 05 SSN PIC X(11). 05 DATE-OF-BIRTH PIC X(10). 05 PHONE-HOME PIC X(14). 05 PHONE-MOBILE PIC X(14). 05 EMAIL-ADDRESS PIC X(60). 05 STREET-ADDRESS PIC X(50). 05 CITY PIC X(30). 05 STATE-CODE PIC X(2). 05 ZIP-CODE PIC X(10). 05 ANNUAL-INCOME PIC X(12). 05 EMPLOYMENT-STATUS PIC X(15). 05 CREDIT-SCORE PIC X(3). 05 ACCOUNT-TYPE PIC X(10). 05 INITIAL-DEPOSIT PIC X(12). *> Validation results and error tracking 01 VALIDATION-RESULTS. 05 VALIDATION-STATUS PIC X(1). 88 ALL-VALIDATIONS-PASSED VALUE "Y". 88 VALIDATION-ERRORS VALUE "N". 05 ERROR-COUNT PIC 9(3) VALUE 0. 05 WARNING-COUNT PIC 9(3) VALUE 0. 05 FIELD-VALIDATION-FLAGS. 10 CUSTOMER-ID-VALID PIC X(1) VALUE "N". 10 NAME-FIELDS-VALID PIC X(1) VALUE "N". 10 SSN-VALID PIC X(1) VALUE "N". 10 DOB-VALID PIC X(1) VALUE "N". 10 PHONE-VALID PIC X(1) VALUE "N". 10 EMAIL-VALID PIC X(1) VALUE "N". 10 ADDRESS-VALID PIC X(1) VALUE "N". 10 FINANCIAL-VALID PIC X(1) VALUE "N". *> Business rules and validation parameters 01 BUSINESS-VALIDATION-RULES. 05 MIN-AGE PIC 9(2) VALUE 18. 05 MAX-AGE PIC 9(2) VALUE 100. 05 MIN-INCOME PIC 9(8) VALUE 15000. 05 MIN-CREDIT-SCORE PIC 9(3) VALUE 300. 05 MAX-CREDIT-SCORE PIC 9(3) VALUE 850. 05 MIN-INITIAL-DEPOSIT PIC 9(6) VALUE 100. 05 VALID-STATES OCCURS 50 TIMES PIC X(2). 05 VALID-ACCOUNT-TYPES OCCURS 10 TIMES PIC X(10). *> Error and warning message storage 01 VALIDATION-MESSAGES. 05 ERROR-MESSAGES OCCURS 50 TIMES. 10 ERROR-FIELD PIC X(20). 10 ERROR-DESCRIPTION PIC X(80). 05 WARNING-MESSAGES OCCURS 20 TIMES. 10 WARNING-FIELD PIC X(20). 10 WARNING-DESCRIPTION PIC X(80). *> Temporary work fields for validation 01 WORK-FIELDS. 05 WORK-NUMERIC-FIELD PIC 9(12). 05 WORK-DATE-FIELD PIC 9(8). 05 CALCULATED-AGE PIC 9(3). 05 CURRENT-DATE-WORK PIC 9(8). 05 VALIDATION-INDEX PIC 9(3). 05 TEMP-PHONE PIC X(14). 05 TEMP-EMAIL PIC X(60). *> Statistical counters 01 VALIDATION-STATISTICS. 05 CUSTOMERS-PROCESSED PIC 9(6) VALUE 0. 05 CUSTOMERS-PASSED PIC 9(6) VALUE 0. 05 CUSTOMERS-FAILED PIC 9(6) VALUE 0. 05 TOTAL-ERRORS PIC 9(8) VALUE 0. 05 TOTAL-WARNINGS PIC 9(8) VALUE 0. PROCEDURE DIVISION. MAIN-VALIDATION-PROCESSING. DISPLAY "=== ARE Clause Validation System Demonstration ===". DISPLAY " ". PERFORM INITIALIZE-VALIDATION-SYSTEM PERFORM LOAD-SAMPLE-CUSTOMER-DATA PERFORM COMPREHENSIVE-CUSTOMER-VALIDATION PERFORM DISPLAY-VALIDATION-RESULTS PERFORM DISPLAY-VALIDATION-STATISTICS DISPLAY " ". DISPLAY "ARE clause validation demonstration completed successfully". STOP RUN. INITIALIZE-VALIDATION-SYSTEM. DISPLAY "1. Initializing Validation System:". DISPLAY " ===============================". *> Initialize valid states (sample) MOVE "AL" TO VALID-STATES(1). MOVE "AK" TO VALID-STATES(2). MOVE "AZ" TO VALID-STATES(3). MOVE "CA" TO VALID-STATES(4). MOVE "FL" TO VALID-STATES(5). MOVE "NY" TO VALID-STATES(6). MOVE "TX" TO VALID-STATES(7). *> Initialize valid account types MOVE "CHECKING" TO VALID-ACCOUNT-TYPES(1). MOVE "SAVINGS" TO VALID-ACCOUNT-TYPES(2). MOVE "PREMIUM" TO VALID-ACCOUNT-TYPES(3). MOVE "BUSINESS" TO VALID-ACCOUNT-TYPES(4). ACCEPT CURRENT-DATE-WORK FROM DATE YYYYMMDD. DISPLAY " Validation rules loaded successfully". DISPLAY " Current date: " CURRENT-DATE-WORK. DISPLAY " ". LOAD-SAMPLE-CUSTOMER-DATA. DISPLAY "2. Loading Sample Customer Data:". DISPLAY " ==============================". *> Load sample customer data for validation MOVE "CUST12345678" TO CUSTOMER-ID. MOVE "JOHN" TO FIRST-NAME. MOVE "SMITH" TO LAST-NAME. MOVE "A" TO MIDDLE-INITIAL. MOVE "123-45-6789" TO SSN. MOVE "01/15/1985" TO DATE-OF-BIRTH. MOVE "(555) 123-4567" TO PHONE-HOME. MOVE "(555) 987-6543" TO PHONE-MOBILE. MOVE "john.smith@email.com" TO EMAIL-ADDRESS. MOVE "123 MAIN STREET" TO STREET-ADDRESS. MOVE "ANYTOWN" TO CITY. MOVE "CA" TO STATE-CODE. MOVE "12345-6789" TO ZIP-CODE. MOVE "75000" TO ANNUAL-INCOME. MOVE "EMPLOYED" TO EMPLOYMENT-STATUS. MOVE "720" TO CREDIT-SCORE. MOVE "CHECKING" TO ACCOUNT-TYPE. MOVE "1000" TO INITIAL-DEPOSIT. DISPLAY " Sample customer data loaded:". DISPLAY " Customer ID: " CUSTOMER-ID. DISPLAY " Name: " FIRST-NAME " " LAST-NAME. DISPLAY " Email: " EMAIL-ADDRESS. DISPLAY " State: " STATE-CODE. DISPLAY " ". COMPREHENSIVE-CUSTOMER-VALIDATION. DISPLAY "3. Comprehensive Customer Validation:". DISPLAY " ===================================". MOVE 0 TO ERROR-COUNT. MOVE 0 TO WARNING-COUNT. SET VALIDATION-ERRORS TO TRUE. PERFORM VALIDATE-CUSTOMER-ID PERFORM VALIDATE-NAME-FIELDS PERFORM VALIDATE-SSN-FORMAT PERFORM VALIDATE-DATE-OF-BIRTH PERFORM VALIDATE-PHONE-NUMBERS PERFORM VALIDATE-EMAIL-ADDRESS PERFORM VALIDATE-ADDRESS-FIELDS PERFORM VALIDATE-FINANCIAL-DATA PERFORM VALIDATE-BUSINESS-RULES IF ERROR-COUNT = 0 SET ALL-VALIDATIONS-PASSED TO TRUE ADD 1 TO CUSTOMERS-PASSED ELSE ADD 1 TO CUSTOMERS-FAILED END-IF. ADD 1 TO CUSTOMERS-PROCESSED. ADD ERROR-COUNT TO TOTAL-ERRORS. ADD WARNING-COUNT TO TOTAL-WARNINGS. VALIDATE-CUSTOMER-ID. DISPLAY " Validating Customer ID...". *> Customer ID must be alphanumeric and proper length IF CUSTOMER-ID ARE ALPHANUMERIC AND LENGTH OF CUSTOMER-ID >= 8 AND LENGTH OF CUSTOMER-ID <= 12 MOVE "Y" TO CUSTOMER-ID-VALID DISPLAY " ✓ Customer ID format valid" ELSE ADD 1 TO ERROR-COUNT MOVE "CUSTOMER-ID" TO ERROR-FIELD(ERROR-COUNT) MOVE "Customer ID must be 8-12 alphanumeric characters" TO ERROR-DESCRIPTION(ERROR-COUNT) DISPLAY " ✗ Customer ID format invalid" END-IF. VALIDATE-NAME-FIELDS. DISPLAY " Validating Name Fields...". *> First name validation IF FIRST-NAME ARE ALPHABETIC AND LENGTH OF FIRST-NAME >= 2 DISPLAY " ✓ First name valid" ELSE ADD 1 TO ERROR-COUNT MOVE "FIRST-NAME" TO ERROR-FIELD(ERROR-COUNT) MOVE "First name must be alphabetic, minimum 2 characters" TO ERROR-DESCRIPTION(ERROR-COUNT) DISPLAY " ✗ First name invalid" END-IF. *> Last name validation IF LAST-NAME ARE ALPHABETIC AND LENGTH OF LAST-NAME >= 2 DISPLAY " ✓ Last name valid" ELSE ADD 1 TO ERROR-COUNT MOVE "LAST-NAME" TO ERROR-FIELD(ERROR-COUNT) MOVE "Last name must be alphabetic, minimum 2 characters" TO ERROR-DESCRIPTION(ERROR-COUNT) DISPLAY " ✗ Last name invalid" END-IF. *> Middle initial validation (optional) IF MIDDLE-INITIAL = SPACES OR MIDDLE-INITIAL ARE ALPHABETIC-UPPER DISPLAY " ✓ Middle initial valid" MOVE "Y" TO NAME-FIELDS-VALID ELSE ADD 1 TO WARNING-COUNT MOVE "MIDDLE-INITIAL" TO WARNING-FIELD(WARNING-COUNT) MOVE "Middle initial should be uppercase letter or blank" TO WARNING-DESCRIPTION(WARNING-COUNT) DISPLAY " ⚠ Middle initial format warning" END-IF. VALIDATE-SSN-FORMAT. DISPLAY " Validating SSN Format...". *> SSN format: XXX-XX-XXXX IF SSN(1:3) ARE NUMERIC AND SSN(4:1) = "-" AND SSN(5:2) ARE NUMERIC AND SSN(7:1) = "-" AND SSN(8:4) ARE NUMERIC AND LENGTH OF SSN = 11 MOVE "Y" TO SSN-VALID DISPLAY " ✓ SSN format valid" ELSE ADD 1 TO ERROR-COUNT MOVE "SSN" TO ERROR-FIELD(ERROR-COUNT) MOVE "SSN must be in format XXX-XX-XXXX" TO ERROR-DESCRIPTION(ERROR-COUNT) DISPLAY " ✗ SSN format invalid" END-IF. VALIDATE-DATE-OF-BIRTH. DISPLAY " Validating Date of Birth...". *> Date format: MM/DD/YYYY IF DATE-OF-BIRTH(1:2) ARE NUMERIC AND DATE-OF-BIRTH(3:1) = "/" AND DATE-OF-BIRTH(4:2) ARE NUMERIC AND DATE-OF-BIRTH(6:1) = "/" AND DATE-OF-BIRTH(7:4) ARE NUMERIC AND LENGTH OF DATE-OF-BIRTH = 10 *> Calculate age for business rule validation MOVE DATE-OF-BIRTH(7:4) TO WORK-DATE-FIELD(1:4) MOVE DATE-OF-BIRTH(1:2) TO WORK-DATE-FIELD(5:2) MOVE DATE-OF-BIRTH(4:2) TO WORK-DATE-FIELD(7:2) COMPUTE CALCULATED-AGE = (CURRENT-DATE-WORK - WORK-DATE-FIELD) / 10000 IF CALCULATED-AGE >= MIN-AGE AND CALCULATED-AGE <= MAX-AGE MOVE "Y" TO DOB-VALID DISPLAY " ✓ Date of birth valid (Age: " CALCULATED-AGE ")" ELSE ADD 1 TO ERROR-COUNT MOVE "DATE-OF-BIRTH" TO ERROR-FIELD(ERROR-COUNT) MOVE "Age must be between 18 and 100 years" TO ERROR-DESCRIPTION(ERROR-COUNT) DISPLAY " ✗ Age outside acceptable range" END-IF ELSE ADD 1 TO ERROR-COUNT MOVE "DATE-OF-BIRTH" TO ERROR-FIELD(ERROR-COUNT) MOVE "Date of birth must be in MM/DD/YYYY format" TO ERROR-DESCRIPTION(ERROR-COUNT) DISPLAY " ✗ Date of birth format invalid" END-IF. VALIDATE-PHONE-NUMBERS. DISPLAY " Validating Phone Numbers...". *> Home phone validation MOVE PHONE-HOME TO TEMP-PHONE. IF (TEMP-PHONE(1:1) = "(" AND TEMP-PHONE(2:3) ARE NUMERIC AND TEMP-PHONE(5:1) = ")" AND TEMP-PHONE(6:1) = " " AND TEMP-PHONE(7:3) ARE NUMERIC AND TEMP-PHONE(10:1) = "-" AND TEMP-PHONE(11:4) ARE NUMERIC) OR (TEMP-PHONE(1:3) ARE NUMERIC AND TEMP-PHONE(4:1) = "-" AND TEMP-PHONE(5:3) ARE NUMERIC AND TEMP-PHONE(8:1) = "-" AND TEMP-PHONE(9:4) ARE NUMERIC) DISPLAY " ✓ Home phone format valid" ELSE ADD 1 TO ERROR-COUNT MOVE "PHONE-HOME" TO ERROR-FIELD(ERROR-COUNT) MOVE "Home phone must be (XXX) XXX-XXXX or XXX-XXX-XXXX format" TO ERROR-DESCRIPTION(ERROR-COUNT) DISPLAY " ✗ Home phone format invalid" END-IF. *> Mobile phone validation (similar logic) MOVE PHONE-MOBILE TO TEMP-PHONE. IF (TEMP-PHONE(1:1) = "(" AND TEMP-PHONE(2:3) ARE NUMERIC AND TEMP-PHONE(5:1) = ")" AND TEMP-PHONE(6:1) = " " AND TEMP-PHONE(7:3) ARE NUMERIC AND TEMP-PHONE(10:1) = "-" AND TEMP-PHONE(11:4) ARE NUMERIC) OR (TEMP-PHONE(1:3) ARE NUMERIC AND TEMP-PHONE(4:1) = "-" AND TEMP-PHONE(5:3) ARE NUMERIC AND TEMP-PHONE(8:1) = "-" AND TEMP-PHONE(9:4) ARE NUMERIC) MOVE "Y" TO PHONE-VALID DISPLAY " ✓ Mobile phone format valid" ELSE ADD 1 TO WARNING-COUNT MOVE "PHONE-MOBILE" TO WARNING-FIELD(WARNING-COUNT) MOVE "Mobile phone format should be (XXX) XXX-XXXX or XXX-XXX-XXXX" TO WARNING-DESCRIPTION(WARNING-COUNT) DISPLAY " ⚠ Mobile phone format warning" END-IF. VALIDATE-EMAIL-ADDRESS. DISPLAY " Validating Email Address...". MOVE EMAIL-ADDRESS TO TEMP-EMAIL. *> Basic email validation using ARE and string functions IF TEMP-EMAIL CONTAINS "@" AND TEMP-EMAIL CONTAINS "." AND LENGTH OF TEMP-EMAIL >= 5 AND TEMP-EMAIL(1:1) ARE ALPHANUMERIC MOVE "Y" TO EMAIL-VALID DISPLAY " ✓ Email format appears valid" ELSE ADD 1 TO ERROR-COUNT MOVE "EMAIL-ADDRESS" TO ERROR-FIELD(ERROR-COUNT) MOVE "Email address must contain @ and . with valid format" TO ERROR-DESCRIPTION(ERROR-COUNT) DISPLAY " ✗ Email format invalid" END-IF. VALIDATE-ADDRESS-FIELDS. DISPLAY " Validating Address Fields...". *> Street address validation IF STREET-ADDRESS ARE ALPHANUMERIC AND LENGTH OF STREET-ADDRESS >= 5 DISPLAY " ✓ Street address valid" ELSE ADD 1 TO ERROR-COUNT MOVE "STREET-ADDRESS" TO ERROR-FIELD(ERROR-COUNT) MOVE "Street address must be alphanumeric, minimum 5 characters" TO ERROR-DESCRIPTION(ERROR-COUNT) DISPLAY " ✗ Street address invalid" END-IF. *> City validation IF CITY ARE ALPHABETIC AND LENGTH OF CITY >= 2 DISPLAY " ✓ City valid" ELSE ADD 1 TO ERROR-COUNT MOVE "CITY" TO ERROR-FIELD(ERROR-COUNT) MOVE "City must be alphabetic, minimum 2 characters" TO ERROR-DESCRIPTION(ERROR-COUNT) DISPLAY " ✗ City invalid" END-IF. *> State code validation IF STATE-CODE ARE ALPHABETIC-UPPER AND LENGTH OF STATE-CODE = 2 DISPLAY " ✓ State code format valid" MOVE "Y" TO ADDRESS-VALID ELSE ADD 1 TO ERROR-COUNT MOVE "STATE-CODE" TO ERROR-FIELD(ERROR-COUNT) MOVE "State code must be 2 uppercase letters" TO ERROR-DESCRIPTION(ERROR-COUNT) DISPLAY " ✗ State code invalid" END-IF. *> ZIP code validation IF (ZIP-CODE(1:5) ARE NUMERIC AND LENGTH OF ZIP-CODE = 5) OR (ZIP-CODE(1:5) ARE NUMERIC AND ZIP-CODE(6:1) = "-" AND ZIP-CODE(7:4) ARE NUMERIC AND LENGTH OF ZIP-CODE = 10) DISPLAY " ✓ ZIP code format valid" ELSE ADD 1 TO WARNING-COUNT MOVE "ZIP-CODE" TO WARNING-FIELD(WARNING-COUNT) MOVE "ZIP code should be XXXXX or XXXXX-XXXX format" TO WARNING-DESCRIPTION(WARNING-COUNT) DISPLAY " ⚠ ZIP code format warning" END-IF. VALIDATE-FINANCIAL-DATA. DISPLAY " Validating Financial Data...". *> Annual income validation IF ANNUAL-INCOME ARE NUMERIC AND FUNCTION NUMVAL(ANNUAL-INCOME) >= MIN-INCOME DISPLAY " ✓ Annual income valid" ELSE ADD 1 TO ERROR-COUNT MOVE "ANNUAL-INCOME" TO ERROR-FIELD(ERROR-COUNT) MOVE "Annual income must be numeric and meet minimum requirements" TO ERROR-DESCRIPTION(ERROR-COUNT) DISPLAY " ✗ Annual income invalid" END-IF. *> Credit score validation IF CREDIT-SCORE ARE NUMERIC AND FUNCTION NUMVAL(CREDIT-SCORE) >= MIN-CREDIT-SCORE AND FUNCTION NUMVAL(CREDIT-SCORE) <= MAX-CREDIT-SCORE DISPLAY " ✓ Credit score valid" ELSE ADD 1 TO ERROR-COUNT MOVE "CREDIT-SCORE" TO ERROR-FIELD(ERROR-COUNT) MOVE "Credit score must be numeric between 300 and 850" TO ERROR-DESCRIPTION(ERROR-COUNT) DISPLAY " ✗ Credit score invalid" END-IF. *> Initial deposit validation IF INITIAL-DEPOSIT ARE NUMERIC AND FUNCTION NUMVAL(INITIAL-DEPOSIT) >= MIN-INITIAL-DEPOSIT MOVE "Y" TO FINANCIAL-VALID DISPLAY " ✓ Initial deposit valid" ELSE ADD 1 TO ERROR-COUNT MOVE "INITIAL-DEPOSIT" TO ERROR-FIELD(ERROR-COUNT) MOVE "Initial deposit must be numeric and meet minimum amount" TO ERROR-DESCRIPTION(ERROR-COUNT) DISPLAY " ✗ Initial deposit invalid" END-IF. VALIDATE-BUSINESS-RULES. DISPLAY " Validating Business Rules...". *> Account type validation MOVE 0 TO VALIDATION-INDEX. PERFORM VARYING VALIDATION-INDEX FROM 1 BY 1 UNTIL VALIDATION-INDEX > 10 OR ACCOUNT-TYPE = VALID-ACCOUNT-TYPES(VALIDATION-INDEX) END-PERFORM. IF VALIDATION-INDEX <= 10 DISPLAY " ✓ Account type valid" ELSE ADD 1 TO ERROR-COUNT MOVE "ACCOUNT-TYPE" TO ERROR-FIELD(ERROR-COUNT) MOVE "Account type must be a valid account type" TO ERROR-DESCRIPTION(ERROR-COUNT) DISPLAY " ✗ Account type invalid" END-IF. *> Employment status validation IF EMPLOYMENT-STATUS ARE ALPHABETIC AND (EMPLOYMENT-STATUS = "EMPLOYED" OR EMPLOYMENT-STATUS = "UNEMPLOYED" OR EMPLOYMENT-STATUS = "RETIRED" OR EMPLOYMENT-STATUS = "STUDENT") DISPLAY " ✓ Employment status valid" ELSE ADD 1 TO WARNING-COUNT MOVE "EMPLOYMENT-STATUS" TO WARNING-FIELD(WARNING-COUNT) MOVE "Employment status should be standard category" TO WARNING-DESCRIPTION(WARNING-COUNT) DISPLAY " ⚠ Employment status warning" END-IF. DISPLAY-VALIDATION-RESULTS. DISPLAY "4. Validation Results Summary:". DISPLAY " ============================". IF ALL-VALIDATIONS-PASSED DISPLAY " ✓ ALL VALIDATIONS PASSED". DISPLAY " Customer data is ready for processing". ELSE DISPLAY " ✗ VALIDATION ERRORS DETECTED". DISPLAY " Customer data requires correction". END-IF. DISPLAY " ". DISPLAY " Error Summary:". DISPLAY " Total Errors: " ERROR-COUNT. DISPLAY " Total Warnings: " WARNING-COUNT. IF ERROR-COUNT > 0 DISPLAY " ". DISPLAY " Error Details:". PERFORM VARYING VALIDATION-INDEX FROM 1 BY 1 UNTIL VALIDATION-INDEX > ERROR-COUNT DISPLAY " " ERROR-FIELD(VALIDATION-INDEX) ": " ERROR-DESCRIPTION(VALIDATION-INDEX) END-PERFORM END-IF. IF WARNING-COUNT > 0 DISPLAY " ". DISPLAY " Warning Details:". PERFORM VARYING VALIDATION-INDEX FROM 1 BY 1 UNTIL VALIDATION-INDEX > WARNING-COUNT DISPLAY " " WARNING-FIELD(VALIDATION-INDEX) ": " WARNING-DESCRIPTION(VALIDATION-INDEX) END-PERFORM END-IF. DISPLAY " ". DISPLAY-VALIDATION-STATISTICS. DISPLAY "5. Validation System Statistics:". DISPLAY " ===============================". DISPLAY " Customers Processed: " CUSTOMERS-PROCESSED. DISPLAY " Customers Passed: " CUSTOMERS-PASSED. DISPLAY " Customers Failed: " CUSTOMERS-FAILED. DISPLAY " Total Errors: " TOTAL-ERRORS. DISPLAY " Total Warnings: " TOTAL-WARNINGS. DISPLAY " ". DISPLAY " ARE Clause Benefits Demonstrated:". DISPLAY " - Comprehensive data type validation". DISPLAY " - Format compliance checking". DISPLAY " - Business rule enforcement". DISPLAY " - Readable validation logic". DISPLAY " - Robust error detection and reporting". DISPLAY " - Enterprise-grade data quality assurance".
This comprehensive example demonstrates how ARE clauses form the backbone of enterprise data validation systems:
The ARE clause enables this sophisticated validation by providing clear, readable tests for different data characteristics. Combined with business logic, it creates a robust framework that ensures data quality, regulatory compliance, and business rule adherence while maintaining high performance and comprehensive error reporting capabilities.
Effective ARE clause usage in validation requires strategic planning:
Understanding COBOL class tests used with ARE: