숫자와 영문자 순번 증가

10+26개 = 36진법

FUNCTION ZADD_1_ALPHANUM.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(IV_SKIP_CHAR) TYPE  CLIKE OPTIONAL
*"     REFERENCE(IV_OFFSET) TYPE  I DEFAULT -1
*"  CHANGING
*"     REFERENCE(CV_DATA) TYPE  CLIKE
*"----------------------------------------------------------------------
* 이 구현은 ECATT_INCREASE_ALPHANUM_ID 를 참고 하였습니다.
* overflow가 발생하면 000...0 으로 다시 돌아갑니다.
* 자리수가 자동으로 늘어나면서 앞에 1이 붙지는 않습니다.

  CONSTANTS: lc_trans TYPE char72 VALUE '0112233445566778899AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ0'.
  DATA: lv_c      TYPE char1,
        lv_offset TYPE i.

  IF iv_offset < 0.

    lv_offset = strlen( cv_data ) - 1.    " 마지막 글자 위치.
    CALL FUNCTION 'ZADD_1_ALPHANUM'
      EXPORTING
        iv_skip_char = iv_skip_char
        iv_offset    = lv_offset
      CHANGING
        cv_data      = cv_data.

  ELSE.

    lv_c = cv_data+iv_offset(1).
    TRANSLATE cv_data+iv_offset(1) USING lc_trans.

    IF cv_data+iv_offset(1) EQ '0'.
*   자리수 올림은 재귀 호출로 처리한다.
      lv_offset = iv_offset - 1.    " 앞 글자 위치.
      IF lv_offset >= 0.
        CALL FUNCTION 'ZADD_1_ALPHANUM'
          EXPORTING
            iv_skip_char = iv_skip_char
            iv_offset    = lv_offset
          CHANGING
            cv_data      = cv_data.
      ENDIF.
    ENDIF.

    IF iv_skip_char IS NOT INITIAL AND
       cv_data+iv_offset(1) CA iv_skip_char.
      CALL FUNCTION 'ZADD_1_ALPHANUM'
        EXPORTING
          iv_skip_char = iv_skip_char
          iv_offset    = iv_offset
        CHANGING
          cv_data      = cv_data.
    ENDIF.
  ENDIF.

ENDFUNCTION.

'ABAP' 카테고리의 다른 글

abap으로 ZIP 압축하기  (0) 2023.10.17
search help exit 총정리  (0) 2023.04.25
ABAP TIMESTAMP 총정리  (0) 2021.12.27
abap2xlsx  (0) 2021.05.07
KR_POSTCODE : 한국주소입력  (0) 2021.03.31

+ Recent posts