213 lines
9.4 KiB
COBOL
213 lines
9.4 KiB
COBOL
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.
|