ABAP 自动生成身份证编号以及校验

在展示ABAP代码之前需要先在"SE11"中新建一个配置表:ZCHENH006.表的结构参见我的一篇 省市县级联搜索帮助的Bolg。

废话不多说,先上代码。

  1 *&---------------------------------------------------------------------*
  2 *& REPORT  ZCHENH050
  3 *&
  4 *&---------------------------------------------------------------------*
  5 *&
  6 *&
  7 *&---------------------------------------------------------------------*
  8 
  9 REPORT zchenh050.
 10 *https://jingyan.baidu.com/article/72ee561abd962fe16038df48.html
 11 * 身份证算法实现
 12 *
 13 * 1、号码的结构 公民身份号码是特征组合码,
 14 *     由十七位数字本体码和一位校验码组成。
 15 * 排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码  三位数字顺序码和一位数字校验码。
 16 *
 17 * 2、地址码(前六位数) 表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
 18 *
 19 * 3、出生日期码(第七位至十四位) 表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
 20 *
 21 * 4、顺序码(第十五位至十七位)
 22 *    表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
 23 *
 24 * 5、校验码(第十八位数)
 25 *   (1)十七位数字本体码加权求和公式 S = SUM(AI * WI), I = 0, ... , 16
 26 * ,先对前17位数字的权求和
 27 *  AI:表示第I位置上的身份证号码数字值
 28 *   WI:表示第I位置上的加权因子 WI: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
 29 * (2)计算模 Y = MOD(S, 11)
 30 * (3)通过模得到对应的校验码 Y: 0 1 2 3 4 5 6 7  8 9 10
 31 *   校验码: 1 0 X 9 8 7 6 5 4 3 2
 32 *
 33 TABLES:sscrfields.
 34 DATA:gt_data TYPE zchenh006 OCCURS 0 WITH HEADER LINE.
 35 DATA:BEGIN OF gt_check OCCURS 0,
 36   ai TYPE i,
 37   wi TYPE c,
 38   END OF gt_check.
 39 *  Wi表示第i位置上的加权因子,其各位对应的值依次为: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
 40 DATA:BEGIN OF gt_wi OCCURS 0,
 41   ai TYPE i,
 42   wi TYPE i,
 43 END OF gt_wi.
 44 DATA:BEGIN OF gt_idcard OCCURS 0,
 45   idcard(18),
 46 END OF gt_idcard.
 47 
 48 SELECTION-SCREEN FUNCTION KEY 1.
 49 SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
 50 PARAMETERS:p_r1 TYPE c RADIOBUTTON GROUP pr DEFAULT 'X' USER-COMMAND c1, "导入配置
 51            p_r2 TYPE c RADIOBUTTON GROUP pr,           "快速生成身份证
 52            p_r3 TYPE c RADIOBUTTON GROUP pr.           "输入身份证信息查询
 53 *PARAMETERS:P_CALL TYPE C NO-DISPLAY.
 54 SELECTION-SCREEN END  OF BLOCK b1.
 55 
 56 SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
 57 
 58 *SELECTION-SCREEN BEGIN OF LINE . "将元素排列到一行
 59 PARAMETERS: p_file LIKE rlgrap-filename
 60                   MODIF ID m1.
 61 
 62 SELECTION-SCREEN COMMENT /1(75) text-003 MODIF ID m1.
 63 *SELECTION-SCREEN END OF LINE.
 64 SELECTION-SCREEN END OF BLOCK b2.
 65 
 66 SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-004.
 67 PARAMETERS:p_belnr TYPE zchenh006-belnr
 68                   MODIF ID m2. " 出生地
 69 
 70 PARAMETERS: p_date LIKE sy-datum
 71              OBLIGATORY
 72                   MODIF ID m2. " 出生日期
 73 PARAMETERS: p_sex LIKE zchenh001-zsex DEFAULT ''
 74                   OBLIGATORY
 75                   MODIF ID m2. " 性别
 76 PARAMETERS:p_local AS CHECKBOX MODIF ID m2.
 77 SELECTION-SCREEN END OF BLOCK b3.
 78 
 79 SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text-005.
 80 PARAMETERS: p_idcard TYPE char18
 81                     MODIF ID m3. " 身份证号码
 82 SELECTION-SCREEN END OF BLOCK b4.
 83 
 84 
 85 INITIALIZATION.
 86   DATA:functxt TYPE smp_dyntxt.
 87   functxt-icon_id = icon_export.
 88   functxt-quickinfo = '模板下载'.
 89   functxt-icon_text = '模板下载'.
 90   sscrfields-functxt_01 = functxt.
 91 
 92   p_date = sy-datum.
 93   p_date+0(4) =  p_date+0(4) - 20.
 94   PERFORM frm_init_data.
 95 
 96 AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_belnr.
 97 *HRPADES_T005S_BLAND " 国家地区的搜索帮助
 98   " 设置地区的搜索帮助
 99   DATA:lt_zchenh006 TYPE zchenh006 OCCURS 0 WITH HEADER LINE.
100   DATA:lv_index TYPE sy-index.
101   SELECT * INTO TABLE lt_zchenh006 FROM zchenh006 WHERE belnr NOT LIKE '%0'.
102 *  DATA:BEGIN OF lt_title OCCURS 0,
103 *    title TYPE string,
104 *    END OF lt_title.
105 *  lt_title-title = '客户端'. APPEND lt_title.
106 *  lt_title-title = '省份编码'.APPEND lt_title.
107 *  lt_title-title = '省份描述'.APPEND lt_title.
108   CALL FUNCTION 'TR_F4_HELP'
109     EXPORTING
110       iv_title                     ='自定义国家搜索帮助'
111 *     is_sel_title1                 = lt_title
112 *     is_sel_title2                 = ''
113      iv_start_column               = 2
114      iv_start_row                  = 0
115      iv_number_of_rows             = 8
116      iv_no_of_key_columns          = 1
117      iv_width_of_titles            = 'X'
118 *     iv_without_selection          = ''
119 *     iv_multiple_selection         = ''
120      iv_with_sort_icon             = 'X'
121      iv_with_printer_icon          = 'X'
122      iv_with_filter_icon           = 'X'
123      iv_with_search_icon           = 'X'
124      iv_with_other_view_icon       = 'X'
125      iv_extended_display           = 'X'
126 *     iv_show_also_1                = ''
127 *  IMPORTING
128 *    EV_EXT_DISPLAY_SELECTED       =
129 *    EV_OTHER_VIEW_SELECTED        =
130     TABLES
131       it_sel_table                  = lt_zchenh006
132    CHANGING
133 *    CV_FIRST_INDEX                =
134     cv_selected_index             = lv_index
135 *    CT_SEL_LINES                  =
136    EXCEPTIONS
137      no_lines                      = 1
138      no_line_picked                = 2
139      OTHERS                        = 3 .
140 
141   CLEAR p_belnr.
142   IF lv_index IS NOT INITIAL.
143     READ TABLE lt_zchenh006 INDEX lv_index.
144     p_belnr = lt_zchenh006-belnr .
145   ELSE.
146     p_belnr = ''.
147   ENDIF.
148 
149 
150 AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
151   CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
152     EXPORTING
153       program_name  = syst-repid
154       dynpro_number = syst-dynnr
155 *     FIELD_NAME    = ' '
156       static        = 'X'
157       mask          = '(Excel文件)|*.xls|*.xlsx'
158     CHANGING
159       file_name     = p_file
160     EXCEPTIONS
161       mask_too_long = 1
162       OTHERS        = 2.
163 
164 AT SELECTION-SCREEN.
165   IF sy-ucomm = 'FC01'.
166     PERFORM frm_download_templete.
167   ENDIF.
168 
169 AT SELECTION-SCREEN OUTPUT."动态选择屏幕
170   PERFORM frm_modify_screen.
171 
172 START-OF-SELECTION.
173   IF p_r1 IS NOT INITIAL.
174     PERFORM frm_put_data.
175     PERFORM frm_save_data.
176   ENDIF.
177   IF p_r2 IS NOT INITIAL.
178     PERFORM frm_get_id6. " 获取前六位
179     PERFORM frm_get_birthday." 获取生日
180     PERFORM frm_create_no3. " 获取三位顺序码
181     PERFORM frm_check_id. " 校验身份证
182   ENDIF.
183   IF p_r3 IS NOT INITIAL.
184     PERFORM frm_split_idcard. " 解析身份证
185   ENDIF.
186 *&---------------------------------------------------------------------*
187 *&      FORM  FRM_PUT_DATA
188 *&---------------------------------------------------------------------*
189 *       TEXT
190 *----------------------------------------------------------------------*
191 *  -->  P1        TEXT
192 *  <--  P2        TEXT
193 *----------------------------------------------------------------------*
194 FORM frm_put_data .
195 *  清空数据库配置表
196 *  DELETE FROM zchenh006.
197   TYPE-POOLS truxs.
198   DATA  gt_raw TYPE truxs_t_text_data.
199   TYPES: BEGIN OF gty_excel,
200       col1    TYPE  string,
201       col2    TYPE  string,
202   END OF gty_excel.
203   DATA: gt_excel TYPE TABLE OF gty_excel,
204         gs_excel TYPE gty_excel.
205   CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
206     EXPORTING
207 *     I_FIELD_SEPERATOR    =
208       i_line_header        = 'X'
209       i_tab_raw_data       = gt_raw
210       i_filename           = p_file
211     TABLES
212       i_tab_converted_data = gt_data
213     EXCEPTIONS
214       conversion_failed    = 1
215       OTHERS               = 2.
216 ENDFORM.                    " FRM_PUT_DATA
217 *&---------------------------------------------------------------------*
218 *&      FORM  FRM_SAVE_DATA
219 *&---------------------------------------------------------------------*
220 *       TEXT
221 *----------------------------------------------------------------------*
222 *  -->  P1        TEXT
223 *  <--  P2        TEXT
224 *----------------------------------------------------------------------*
225 FORM frm_save_data .
226   IF gt_data[] IS NOT INITIAL.
227     MODIFY zchenh006 FROM TABLE gt_data.
228     IF sy-subrc = 0.
229       COMMIT WORK.
230     ELSE.
231       ROLLBACK WORK.
232     ENDIF.
233   ENDIF.
234 ENDFORM.                    " FRM_SAVE_DATA
235 *&---------------------------------------------------------------------*
236 *&      FORM  FRM_DOWNLOAD_TEMPLETE
237 *&---------------------------------------------------------------------*
238 *       TEXT
239 *----------------------------------------------------------------------*
240 *  -->  P1        TEXT
241 *  <--  P2        TEXT
242 *----------------------------------------------------------------------*
243 FORM frm_download_templete .
244   DATA:ls_wwwdata_item LIKE wwwdatatab,
245       lv_file         TYPE rlgrap-filename,
246       li_rc           LIKE sy-subrc,
247       lv_objid        TYPE wwwdata-objid.
248 * 获取保存路径
249   CALL FUNCTION 'WS_FILENAME_GET'
250     EXPORTING
251       def_filename     = '省份编号导入模板.XLSX'
252       def_path         = 'D:\'
253       mask             = 'EXCEL文件 (*.XLSX)|*.XLSX|所有文件(*.*)|*.*|,' " 此处文件过滤器请忽略
254 mode = 'S' 255 title = '选择导出文件位置' 256 IMPORTING 257 filename = lv_file 258 EXCEPTIONS 259 inv_winsys = 1 260 no_batch = 2 261 selection_cancel = 3 262 selection_error = 4 263 OTHERS = 5. 264 IF sy-subrc <> 0. 265 * IMPLEMENT SUITABLE ERROR HANDLING HERE 266 MESSAGE '导出路径错误!' TYPE 'S'. 267 ENDIF. 268 269 * 检查模板是否存在 270 CLEAR:ls_wwwdata_item. 271 lv_objid = 'ZCHENH050'. 272 SELECT SINGLE * 273 FROM wwwdata 274 INTO CORRESPONDING FIELDS OF ls_wwwdata_item 275 WHERE srtf2 = 0 276 AND relid = 'MI' 277 AND objid = lv_objid . 278 279 IF sy-subrc NE 0. 280 MESSAGE '文件模板不存在!' TYPE 'S'. 281 ENDIF. 282 * 下载模板 283 CALL FUNCTION 'DOWNLOAD_WEB_OBJECT' 284 EXPORTING 285 key = ls_wwwdata_item 286 destination = lv_file 287 IMPORTING 288 rc = li_rc. 289 IF li_rc NE '0'. 290 MESSAGE '文件模板下载失败!' TYPE 'S'. 291 ELSE. 292 MESSAGE '文件模板下载成功!' TYPE 'S'. 293 ENDIF. 294 ENDFORM. " FRM_DOWNLOAD_TEMPLETE 295 *&---------------------------------------------------------------------* 296 *& FORM FRM_GET_BIRTHDAY 297 *&---------------------------------------------------------------------* 298 * 出生日期 299 *----------------------------------------------------------------------* 300 * --> P1 TEXT 301 * <-- P2 TEXT 302 *----------------------------------------------------------------------* 303 FORM frm_get_birthday . 304 LOOP AT gt_idcard. 305 gt_idcard-idcard+6(8) = p_date. 306 MODIFY gt_idcard. 307 ENDLOOP. 308 ENDFORM. " FRM_GET_BIRTHDAY 309 *&---------------------------------------------------------------------* 310 *& FORM FRM_MODIFY_SCREEN 311 *&---------------------------------------------------------------------* 312 * TEXT 313 *----------------------------------------------------------------------* 314 * --> P1 TEXT 315 * <-- P2 TEXT 316 *----------------------------------------------------------------------* 317 FORM frm_modify_screen . 318 LOOP AT SCREEN. 319 CASE screen-group1. 320 WHEN 'M1'. 321 IF p_r1 IS INITIAL. 322 screen-active = '0'. 323 ELSE. 324 screen-active = '1'. 325 ENDIF. 326 WHEN 'M2'. 327 IF p_r2 IS INITIAL. 328 screen-active = '0'. 329 ELSE. 330 screen-active = '1'. 331 ENDIF. 332 WHEN 'M3'. 333 IF p_r3 IS INITIAL. 334 screen-active = '0'. 335 ELSE. 336 screen-active = '1'. 337 ENDIF. 338 339 ENDCASE. 340 * IF screen-name = 'P_BEZEI'. 341 * screen-input = '0'. 342 * ENDIF. 343 MODIFY SCREEN. 344 ENDLOOP. 345 346 ENDFORM. " FRM_MODIFY_SCREEN 347 *&---------------------------------------------------------------------* 348 *& Form FRM_GET_ID6 349 *&---------------------------------------------------------------------* 350 * text 351 *----------------------------------------------------------------------* 352 * --> p1 text 353 * <-- p2 text 354 *----------------------------------------------------------------------* 355 FORM frm_get_id6 . 356 IF p_belnr IS INITIAL. 357 MESSAGE '请选择省/市/县编码!' TYPE 'E'. 358 ENDIF. 359 SELECT * INTO TABLE gt_data FROM zchenh006 UP TO 3 ROWS WHERE belnr = p_belnr . 360 IF gt_data[] IS INITIAL. 361 MESSAGE '配置表未配置!' TYPE 'E'. 362 ENDIF. 363 LOOP AT gt_data. 364 gt_idcard-idcard(6) = gt_data-belnr. 365 APPEND gt_idcard. 366 ENDLOOP. 367 ENDFORM. " FRM_GET_ID6 368 *&---------------------------------------------------------------------* 369 *& Form FRM_CREATE_NO3 370 *&---------------------------------------------------------------------* 371 * text 372 *----------------------------------------------------------------------* 373 * --> p1 text 374 * <-- p2 text 375 *----------------------------------------------------------------------* 376 FORM frm_create_no3 . 377 DATA:BEGIN OF lt_idcard OCCURS 0, 378 idcard(18), 379 END OF lt_idcard. 380 DATA:lv_sex. 381 lv_sex = '1'. 382 IF p_sex NE ''. 383 lv_sex = '2'. 384 ENDIF. 385 386 LOOP AT gt_idcard. 387 DO 99 TIMES. 388 gt_idcard-idcard+14(2) = sy-index. " 当地公安局编号:01 02 03 04 05 06... 389 IF sy-index < 10. 390 gt_idcard-idcard+14(1) = '0'. " 小于10时补充前导零 391 gt_idcard-idcard+15(1) = sy-index. 392 ENDIF. 393 gt_idcard-idcard+16(1) = lv_sex. " 性别编码 394 APPEND gt_idcard-idcard TO lt_idcard. 395 ENDDO. 396 ENDLOOP. 397 gt_idcard[] = lt_idcard[]. 398 ENDFORM. " FRM_CREATE_NO3 399 *&---------------------------------------------------------------------* 400 *& Form FRM_CHECK_ID 401 *&---------------------------------------------------------------------* 402 * text 403 *----------------------------------------------------------------------* 404 * --> p1 text 405 * <-- p2 text 406 *----------------------------------------------------------------------* 407 FORM frm_check_id. 408 DATA:lv_sum TYPE i, 409 lv_idx TYPE i, 410 lv_y TYPE i. 411 412 LOOP AT gt_idcard. 413 CLEAR:lv_sum,lv_idx. 414 LOOP AT gt_wi. 415 lv_idx = sy-tabix - 1. 416 lv_sum = lv_sum + gt_wi-wi * gt_idcard-idcard+lv_idx(1). 417 ENDLOOP. 418 419 lv_y = lv_sum MOD 11. 420 READ TABLE gt_check WITH KEY ai = lv_y. 421 IF sy-subrc = 0. 422 gt_idcard-idcard+17(1) = gt_check-wi. 423 MODIFY gt_idcard TRANSPORTING idcard. 424 ENDIF. 425 ENDLOOP. 426 LOOP AT gt_idcard. 427 WRITE:/,sy-tabix,'您的身份证账号为:',gt_idcard-idcard. 428 ENDLOOP. 429 IF p_local IS NOT INITIAL. 430 PERFORM frm_download_idcard. 431 ENDIF. 432 ENDFORM. " FRM_CHECK_ID 433 *&---------------------------------------------------------------------* 434 *& Form FRM_SPLIT_IDCARD 435 *&---------------------------------------------------------------------* 436 * text 437 *----------------------------------------------------------------------* 438 * --> p1 text 439 * <-- p2 text 440 *----------------------------------------------------------------------* 441 FORM frm_split_idcard . 442 DATA:lv_belnr(6), 443 lv_date TYPE sy-datum, 444 lv_sex, 445 lv_check, 446 lv_sdesc TYPE zchenh006-sdesc, 447 lv_sdesc1 TYPE string, 448 lv_mess(255), 449 lv_flag. 450 IF p_idcard IS INITIAL. 451 MESSAGE '请输入身份证编码!' TYPE 'E'. 452 ENDIF. 453 lv_belnr = p_idcard(6). 454 lv_date = p_idcard+6(8). 455 lv_sex = p_idcard+16(1). 456 lv_check = p_idcard+17(1). 457 " 获取县级信息 458 SELECT SINGLE sdesc INTO lv_sdesc FROM zchenh006 WHERE belnr = lv_belnr. 459 IF sy-subrc NE 0. 460 lv_flag = 'X'. 461 lv_mess = '异常:身份证地址码有误; '. 462 ENDIF. 463 CONCATENATE lv_sdesc lv_sdesc1 INTO lv_sdesc1. 464 " 获取市区级信息 465 lv_belnr+4(2) = '00'. 466 SELECT SINGLE sdesc INTO lv_sdesc FROM zchenh006 WHERE belnr = lv_belnr. 467 CONCATENATE lv_sdesc lv_sdesc1 INTO lv_sdesc1. 468 " 获取省级信息 469 lv_belnr+2(4) = '0000'. 470 SELECT SINGLE sdesc INTO lv_sdesc FROM zchenh006 WHERE belnr = lv_belnr. 471 CONCATENATE lv_sdesc lv_sdesc1 INTO lv_sdesc1. 472 CONCATENATE lv_mess '您的地址信息:' lv_sdesc1 '' INTO lv_mess. 473 474 *1. 身份证日期校验 475 CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY' 476 EXPORTING 477 date = lv_date 478 EXCEPTIONS 479 plausibility_check_failed = 1 480 OTHERS = 2. 481 IF sy-subrc NE 0 OR lv_date GE sy-datum. 482 lv_flag = 'X'. 483 CONCATENATE lv_mess '异常:出生日期非法; ' INTO lv_mess. 484 ELSE. 485 DATA:lv_age TYPE string. 486 lv_age = sy-datum+0(4) - lv_date+0(4). 487 CONCATENATE lv_mess '您的年龄:' lv_age '周岁; ' 488 INTO lv_mess. 489 ENDIF. 490 491 CONCATENATE lv_mess '您的出生日期:' lv_date+0(4) '' lv_date+4(2) '' lv_date+6(2) '日; ' 492 INTO lv_mess. 493 494 IF lv_sex = 1 OR lv_sex = 3 OR lv_sex = 5 OR lv_sex = 7 OR lv_sex = 9. 495 CONCATENATE lv_mess '您的性别: 男; ' 496 INTO lv_mess. 497 ELSE. 498 CONCATENATE lv_mess '您的性别: 女; ' 499 INTO lv_mess. 500 ENDIF. 501 502 DATA:lv_sum TYPE i, 503 lv_idx TYPE i, 504 lv_y TYPE i. 505 506 CLEAR:lv_sum,lv_idx. 507 LOOP AT gt_wi. 508 lv_idx = sy-tabix - 1. 509 lv_sum = lv_sum + gt_wi-wi * p_idcard+lv_idx(1). 510 ENDLOOP. 511 lv_y = lv_sum MOD 11. 512 READ TABLE gt_check WITH KEY ai = lv_y. 513 514 IF sy-subrc = 0 AND gt_check-wi = p_idcard+17(1). 515 CONCATENATE '恭喜:您的身份校验通过 ; ' lv_mess INTO lv_mess. 516 ELSE. 517 lv_flag = 'X'. 518 CONCATENATE '异常:您的身份校验未通过; ' lv_mess INTO lv_mess. 519 ENDIF. 520 521 CONDENSE lv_mess. 522 WRITE:/,'身份证号:',p_idcard,'解析结果:' ,/,lv_mess. 523 524 ENDFORM. " FRM_SPLIT_IDCARD 525 *&---------------------------------------------------------------------* 526 *& Form FRM_INIT_DATA 527 *&---------------------------------------------------------------------* 528 * text 529 *----------------------------------------------------------------------* 530 * --> p1 text 531 * <-- p2 text 532 *----------------------------------------------------------------------* 533 FORM frm_init_data . 534 gt_check-ai = 0. 535 gt_check-wi = 1. 536 APPEND gt_check. 537 538 gt_check-ai = 1. 539 gt_check-wi = 0. 540 APPEND gt_check. 541 542 gt_check-ai = 2. 543 gt_check-wi = 'X'. 544 APPEND gt_check. 545 546 gt_check-ai = 3. 547 gt_check-wi = 9. 548 APPEND gt_check. 549 550 gt_check-ai = 4. 551 gt_check-wi = 8. 552 APPEND gt_check. 553 554 gt_check-ai = 5. 555 gt_check-wi = 7. 556 APPEND gt_check. 557 558 gt_check-ai = 6. 559 gt_check-wi = 6. 560 APPEND gt_check. 561 562 gt_check-ai = 7. 563 gt_check-wi = 5. 564 APPEND gt_check. 565 566 gt_check-ai = 8. 567 gt_check-wi = 4. 568 APPEND gt_check. 569 570 gt_check-ai = 9. 571 gt_check-wi = 3. 572 APPEND gt_check. 573 574 gt_check-ai = 10. 575 gt_check-wi = 2. 576 APPEND gt_check. 577 578 gt_wi-wi = 7. 579 gt_wi-ai = 1. 580 APPEND gt_wi. 581 582 gt_wi-wi = 9. 583 gt_wi-ai = 2. 584 APPEND gt_wi. 585 586 gt_wi-wi = 10. 587 gt_wi-ai = 3. 588 APPEND gt_wi. 589 590 gt_wi-wi = 5. 591 gt_wi-ai = 4. 592 APPEND gt_wi. 593 594 gt_wi-wi = 8. 595 gt_wi-ai = 5. 596 APPEND gt_wi. 597 598 gt_wi-wi = 4. 599 gt_wi-ai = 6. 600 APPEND gt_wi. 601 gt_wi-wi = 2. 602 gt_wi-ai = 7. 603 APPEND gt_wi. 604 605 gt_wi-wi = 1. 606 gt_wi-ai = 8. 607 APPEND gt_wi. 608 609 gt_wi-wi = 6. 610 gt_wi-ai = 9. 611 APPEND gt_wi. 612 613 gt_wi-wi = 3. 614 gt_wi-ai = 10. 615 APPEND gt_wi. 616 617 gt_wi-wi = 7. 618 gt_wi-ai = 11. 619 APPEND gt_wi. 620 621 gt_wi-wi = 9. 622 gt_wi-ai = 12. 623 APPEND gt_wi. 624 625 gt_wi-wi = 10. 626 gt_wi-ai = 13. 627 APPEND gt_wi. 628 629 gt_wi-wi = 5. 630 gt_wi-ai = 14. 631 APPEND gt_wi. 632 633 gt_wi-wi = 8. 634 gt_wi-ai = 15. 635 APPEND gt_wi. 636 637 gt_wi-wi = 4. 638 gt_wi-ai = 16. 639 APPEND gt_wi. 640 641 gt_wi-wi = 2. 642 gt_wi-ai = 17. 643 APPEND gt_wi. 644 645 ENDFORM. " FRM_INIT_DATA 646 *&---------------------------------------------------------------------* 647 *& Form FRM_DOWNLOAD_IDCARD 648 *&---------------------------------------------------------------------* 649 * text 650 *----------------------------------------------------------------------* 651 * --> p1 text 652 * <-- p2 text 653 *----------------------------------------------------------------------* 654 FORM frm_download_idcard . 655 DATA:lv_filename TYPE string, 656 lv_path TYPE string, 657 lv_fullpath TYPE string. 658 WHILE lv_fullpath IS INITIAL. 659 CALL METHOD cl_gui_frontend_services=>file_save_dialog 660 EXPORTING 661 window_title = '请选择保存文件路径' 662 * default_extension = 663 default_file_name = 'ZCHENH050.txt' 664 * with_encoding = 665 * file_filter = 666 * initial_directory = 667 prompt_on_overwrite = 'X' 668 CHANGING 669 filename = lv_filename 670 path = lv_path 671 fullpath = lv_fullpath 672 * user_action = 673 * file_encoding = 674 EXCEPTIONS 675 cntl_error = 1 676 error_no_gui = 2 677 not_supported_by_gui = 3 678 invalid_default_file_name = 4 679 OTHERS = 5. 680 ENDWHILE. 681 682 683 CALL METHOD cl_gui_frontend_services=>gui_download 684 EXPORTING 685 filename = lv_fullpath 686 filetype = 'ASC' 687 CHANGING 688 data_tab = gt_idcard[]. " 689 ENDFORM. " FRM_DOWNLOAD_IDCARD


需要程序完整运行需要以下几个步骤。

1.导入配置进入自建表ZCHENH006,但是在导入配置之前需要下载模板,程序虽提供的有模板下载按钮,但是需要用户先使用“SMW0”上传文件模板,在这里,本程序先给出导入模板和配置信息。导入模板:ZCHENH006配置信息

解压密码:1187163927

2.SMW0上传文件后,使用新建程序上传配置文件到自建表。

3.导入配置后,接下来修改选择屏幕的文本信息。切换到“SE38”或者"SE80"找到该程序后进入编辑模式。在上方的工具栏中:转到 -> 文本元素 -> 选择文本,或者在“SE38”界面输入程序后选择"“文本元素”,点击:“修改”按钮。

到此,就可以运行程序了。

以下是程序运行截图:

  程序默认生成的身份证是20年前的今天的男性。

运行完毕后,会在本地生成一个txt文件,代码中需要修改默认生成文件的路径,否则会报错,同时,选择屏幕生成的文件excel时,因为身份证号码是18位,所以导致excel会以科学计数法显示不全。

运行完毕示例:

 解析身份证,好奇的博友可以自行看看代码与百度下身份证编码和解析规则。

可以用本程序生成的身份证到身份证查询系统进行查询。

特别说明:该程序仅用于生成的身份证测试,不可用于其他非法活动。

猜你喜欢

转载自www.cnblogs.com/1187163927ch/p/9591236.html