27-validation-halfwidth: Half-Width Character Validation
电信业务场景
电话号码格式校验。检查电话号码字段是否全为半角数字(0-9),检测全角字符混入和长度超出。
Description
Reads FILE-IN and validates that each character in IN-TEXT is
half-width (ASCII printable: X'20'-X'7E'). Validates length
constraints: 20 or fewer half-width characters pass; more than 20
is an error. Full-width characters or control characters cause
rejection.
Validation Rules
| Rule |
Result |
Error Code |
| All characters X'20'-X'7E', <= 20 |
PASS to GOOD |
- |
| Contains non-half-width character |
FAIL to BAD |
01 |
| All half-width but >20 chars |
FAIL to BAD |
02 |
Record Layout
Input / Good Output (30 bytes)
| Field |
Type |
Length |
Description |
| TEXT |
PIC X |
30 |
Text to validate |
Bad Output (32 bytes)
| Field |
Type |
Length |
Description |
| TEXT |
PIC X |
30 |
Original text |
| ERR-CODE |
PIC X |
2 |
Error code |
Files
| File |
Purpose |
| main-27-validation-halfwidth.cbl |
Main COBOL program |
| data-gen.sh |
Generate test data |
| run.sh |
Compile, run, verify |
| README.md |
This file |
Tests
| Test Case |
Expected |
| 4 half-width chars |
PASS to GOOD |
| 10 half-width chars |
PASS to GOOD |
| 20 half-width chars (boundary) |
PASS to GOOD |
| 25 half-width chars (too long) |
FAIL err 02 |
| Mixed with full-width |
FAIL err 01 |
| Full-width only |
FAIL err 01 |
| Half-width + control char |
FAIL err 01 |
| All spaces (empty) |
PASS to GOOD |
Usage
Expected Behavior
- Half-width check uses byte comparison against X'20'-X'7E'.
- Full-width UTF-8 multi-byte characters have bytes > X'7E'
and are detected as non-half-width.
- Length is computed by trimming trailing spaces.
- Only records meeting both conditions (half-width + <= 20 chars)
are written to GOOD output.