在展示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会以科学计数法显示不全。
运行完毕示例:
解析身份证,好奇的博友可以自行看看代码与百度下身份证编码和解析规则。
可以用本程序生成的身份证到身份证查询系统进行查询。
特别说明:该程序仅用于生成的身份证测试,不可用于其他非法活动。