숫자와 영문자 순번 증가
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 |