MainframeMaster

COBOL Tutorial

COBOL ARE Clause

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.

Understanding COBOL ARE Clause for Data Validation and Class Testing

What is the ARE Clause?

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.

Key Capabilities of ARE:

  • Class Testing: Validates data against predefined character classes
  • Type Verification: Ensures data conforms to expected data types
  • Format Validation: Checks data format compliance and structure
  • Logical Evaluation: Supports complex conditional expressions
  • Readability Enhancement: Provides natural language-like syntax

ARE Clause Syntax and Class Testing

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.

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
*> 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 Validation Patterns

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.

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
*> 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.

COBOL ARE Clause Customer Data Validation System Example

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.

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
IDENTIFICATION 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".

Understanding the Validation Framework

This comprehensive example demonstrates how ARE clauses form the backbone of enterprise data validation systems:

Data Type Validation

  • NUMERIC validation for financial data
  • ALPHABETIC validation for name fields
  • ALPHANUMERIC validation for IDs and addresses
  • ALPHABETIC-UPPER for standardized codes

Format Compliance

  • SSN format validation (XXX-XX-XXXX)
  • Phone number format checking
  • Date format validation (MM/DD/YYYY)
  • Email address structure verification

Business Rule Enforcement

  • Age range validation for eligibility
  • Income threshold verification
  • Credit score range checking
  • Account type validation against business rules

Error Management

  • Comprehensive error tracking and reporting
  • Warning vs. error classification
  • Detailed validation result summaries
  • Statistical analysis of validation outcomes

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.

COBOL ARE Clause Best Practices for Data Validation and Error Handling

Recommended Practices

  • Use ARE for clear, readable data validation logic
  • Combine ARE with business rule validation
  • Implement comprehensive error tracking and reporting
  • Use appropriate class tests for different data types
  • Document validation rules and business requirements
  • Test validation logic with edge cases and invalid data
  • Provide meaningful error messages for failed validations
  • Consider performance impact of extensive validation

Common Pitfalls

  • Using wrong class tests for data validation
  • Not handling spaces and special characters properly
  • Insufficient error handling and reporting
  • Over-validating data causing performance issues
  • Not considering locale-specific validation requirements
  • Inadequate testing of validation edge cases
  • Poor error message quality and user experience
  • Not maintaining validation rules as business requirements change

💡 Validation Strategy Tips

Effective ARE clause usage in validation requires strategic planning:

  • Layer validation: Start with basic class tests, then add format and business rule validation
  • Error classification: Distinguish between errors (blocking) and warnings (informational)
  • Performance optimization: Perform expensive validations only after basic tests pass
  • User experience: Provide clear, actionable error messages for validation failures
  • Maintainability: Centralize validation rules for easy updates and consistency

🔍 Class Testing Reference

Understanding COBOL class tests used with ARE:

  • NUMERIC: Tests for digits 0-9, optional sign, decimal point
  • ALPHABETIC: Tests for letters A-Z, a-z, and spaces
  • ALPHABETIC-UPPER: Tests for uppercase letters A-Z and spaces
  • ALPHABETIC-LOWER: Tests for lowercase letters a-z and spaces
  • ALPHANUMERIC: Tests for any combination of letters, digits, and spaces

Related COBOL Concepts

  • Class tests - NUMERIC, ALPHABETIC, ALPHANUMERIC validation
  • IF statements - Conditional processing using ARE clauses
  • Data validation - Input verification and quality assurance
  • Business rules - Application-specific validation requirements
  • Error handling - Managing validation failures and exceptions
  • String functions - CONTAINS, LENGTH for format validation
  • FUNCTION NUMVAL - Converting validated numeric strings
  • Level 88 conditions - Named conditions for validation logic