直接上代码
METHOD check_idnum_valid.
**---------------------------------------------------------------------*
* Package : ZHR
* Program : ZCL_HR_PERSON_UTIL CHECK_IDNUM_VALID
* Description : 身份账号校验
* Author : HR01
* Type :
* Created On : 20190325
* Request :
**---------------------------------------------------------------------*
* Change History :
**---------------------------------------------------------------------*
* History :
**---------------------------------------------------------------------*
CONSTANTS: lc_regex TYPE string VALUE '(^\d{15}$)|(^\d{17}(\d|X)$)',
lc_arrint TYPE string VALUE '0709100508040201060307091005080402',
lc_arrch TYPE string VALUE '10X98765432'.
DATA: lv_message_dummy TYPE string,
lv_birthday_regex TYPE string,
lv_year TYPE numc4,
lv_month TYPE numc2,
lv_day TYPE numc2,
lv_age TYPE int4,
lv_offset TYPE i VALUE 0,
lv_i TYPE i,
lv_a TYPE i VALUE 0,
lv_b TYPE i VALUE 0,
lv_total TYPE i VALUE 0,
lv_last_digit TYPE c,
lt_regio TYPE TABLE OF zhrs_idnum_return.
rs_return-idnum = iv_idnum.
DATA(lv_len) = strlen( iv_idnum ).
* 检查身份证号长度
IF lv_len NE 15 AND lv_len NE 18.
MESSAGE e001(zhr_idnum) INTO lv_message_dummy WITH iv_idnum.
zcx_ca_failure=>raise( ).
ENDIF.
* 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,
* 最后一位是校验位,可能为数字或字符X
IF contains( val =