IDENTIFICATION DIVISION. PROGRAM-ID. SUB04CHK. ***************************************************************** * システム名 : 残業統計管理システム * * プログラムID : SUB04CHK * * プログラム名 : 項目チェックサブ * * 作成日 : 2026-06-14 * * 処理概要 : 指定されたタイプによりデータ項目の妥当性 * * をチェックする * * * ***************************************************************** * 更新履歴 * *---------------------------------------------------------------* * 更新日付 担当者 更新内容 * *---------------------------------------------------------------* * 26-06-14 @@@ 新規作成 * * * ***************************************************************** ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. IBM-ZSERIES. OBJECT-COMPUTER. IBM-ZSERIES. * DATA DIVISION. ***************************************************************** WORKING-STORAGE SECTION. ***************************************************************** 01 WRKARA. 03 WRK-RETURN-CODE PIC 9(004). * 03 WRK-SIGN PIC S9(004). 03 WRK-NN PIC 9(004). 03 WRK-DIGIT PIC 9(004). 03 WRK-ALPHA PIC 9(004). * ***************************************************************** * リンケージエリア * ***************************************************************** LINKAGE SECTION. * COPY ZANCHKAC. * PROCEDURE DIVISION USING C01CHKPAR. ***************************************************************** * サブモジュールNO: (0.0) * * サブモジュール名: 制御処理 * * 処理概要 : メインコントロール処理 * ***************************************************************** 0000MAINSOR SECTION. * *** チェックタイプにより分岐する EVALUATE C01CHKTYP *** 日付チェック(YYYYMMDD) WHEN 'DATE' PERFORM 1000CHKDATE *** 時刻チェック(HHMM) WHEN 'TIME' PERFORM 2000CHKTIME *** 数字チェック WHEN 'NUM' PERFORM 3000CHKNUM *** 社員番号チェック(英数字8桁) WHEN 'EMPID' PERFORM 4000CHKEMP WHEN OTHER MOVE 9999 TO WRK-RETURN-CODE END-EVALUATE. * *** 復帰コードを設定して復帰 MOVE WRK-RETURN-CODE TO C01CHKRRC. * 0000MAINSOR-EXT. GOBACK. ***************************************************************** * サブモジュールNO: (1.0) * * サブモジュール名: 日付チェック * * 処理概要 : YYYYMMDD形式の妥当性チェック * ***************************************************************** 1000CHKDATE SECTION. * *** 月チェック(桁位置5〜6: 01-12) MOVE FUNCTION NUMVAL( C01CHKDAT(5:2)) TO WRK-NN. IF (WRK-NN < 1) OR (WRK-NN > 12) THEN MOVE 0001 TO WRK-RETURN-CODE GO TO 1000CHKDATE-EXT END-IF. *** 日チェック(桁位置7〜8: 01-31) MOVE FUNCTION NUMVAL( C01CHKDAT(7:2)) TO WRK-NN. IF (WRK-NN < 1) OR (WRK-NN > 31) THEN MOVE 0001 TO WRK-RETURN-CODE GO TO 1000CHKDATE-EXT END-IF. *** 正常 MOVE ZERO TO WRK-RETURN-CODE. * 1000CHKDATE-EXT. EXIT. ***************************************************************** * サブモジュールNO: (2.0) * * サブモジュール名: 時刻チェック * * 処理概要 : HHMM形式の妥当性チェック * ***************************************************************** 2000CHKTIME SECTION. * *** 時チェック(桁位置1〜2: 00-23) MOVE FUNCTION NUMVAL( C01CHKDAT(1:2)) TO WRK-NN. IF (WRK-NN > 23) THEN MOVE 0002 TO WRK-RETURN-CODE GO TO 2000CHKTIME-EXT END-IF. *** 分チェック(桁位置3〜4: 00-59) MOVE FUNCTION NUMVAL( C01CHKDAT(3:2)) TO WRK-NN. IF (WRK-NN > 59) THEN MOVE 0002 TO WRK-RETURN-CODE GO TO 2000CHKTIME-EXT END-IF. *** 正常 MOVE ZERO TO WRK-RETURN-CODE. * 2000CHKTIME-EXT. EXIT. ***************************************************************** * サブモジュールNO: (3.0) * * サブモジュール名: 数字チェック * * 処理概要 : 全桁が数字であることをチェック * ***************************************************************** 3000CHKNUM SECTION. * *** 空チェック(全スペース→正常=オプショナル) INSPECT C01CHKDAT TALLYING WRK-NN FOR LEADING SPACES. IF WRK-NN = LENGTH OF C01CHKDAT MOVE ZERO TO WRK-RETURN-CODE GO TO 3000CHKNUM-EXT END-IF. *** 数字(0-9)とスペースのみをカウント MOVE ZERO TO WRK-NN. INSPECT C01CHKDAT TALLYING WRK-NN FOR ALL "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" SPACE. IF WRK-NN NOT = LENGTH OF C01CHKDAT MOVE 0003 TO WRK-RETURN-CODE GO TO 3000CHKNUM-EXT END-IF. *** 正常 MOVE ZERO TO WRK-RETURN-CODE. * 3000CHKNUM-EXT. EXIT. ***************************************************************** * サブモジュールNO: (4.0) * * サブモジュール名: 社員番号チェック * * 処理概要 : 英数字8桁のチェック * ***************************************************************** 4000CHKEMP SECTION. * *** 桁数チェック(8桁) IF C01CHKDAT(9:72) NOT = SPACES THEN MOVE 0004 TO WRK-RETURN-CODE GO TO 4000CHKEMP-EXT END-IF. *** 空チェック(全8桁がスペース→必須エラー) IF C01CHKDAT(1:8) = SPACES MOVE 0004 TO WRK-RETURN-CODE GO TO 4000CHKEMP-EXT END-IF. *** 数字(0-9)カウント MOVE ZERO TO WRK-DIGIT. INSPECT C01CHKDAT(1:8) TALLYING WRK-DIGIT FOR ALL "0" "1" "2" "3" "4" "5" "6" "7" "8" "9". *** 英字(A-Z a-z)カウント MOVE ZERO TO WRK-ALPHA. INSPECT C01CHKDAT(1:8) TALLYING WRK-ALPHA FOR ALL "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z" "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z". *** スペースカウント MOVE ZERO TO WRK-NN. INSPECT C01CHKDAT(1:8) TALLYING WRK-NN FOR ALL SPACE. *** 英数字以外(特殊文字)がないかチェック ADD WRK-DIGIT TO WRK-ALPHA. ADD WRK-NN TO WRK-ALPHA. IF WRK-ALPHA NOT = 8 MOVE 0004 TO WRK-RETURN-CODE GO TO 4000CHKEMP-EXT END-IF. *** 正常 MOVE ZERO TO WRK-RETURN-CODE. * 4000CHKEMP-EXT. EXIT.