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). * ***************************************************************** * リンケージエリア * ***************************************************************** LINKAGE SECTION. * 01 C01CHKPAR. 03 C01CHKTYP PIC X(008). 03 C01CHKDAT PIC X(080). 03 C01CHKRRC PIC 9(004). * 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 CHARACTERS BEFORE INITIAL SPACE. IF WRK-NN > 0 THEN 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. *** 英数字チェック INSPECT C01CHKDAT(1:8) TALLYING WRK-NN FOR CHARACTERS BEFORE INITIAL SPACE. IF WRK-NN > 0 THEN MOVE 0004 TO WRK-RETURN-CODE GO TO 4000CHKEMP-EXT END-IF. *** 正常 MOVE ZERO TO WRK-RETURN-CODE. * 4000CHKEMP-EXT. EXIT.