ABAP 产生必须包含 大写 小写 数字的固定长度字符串的算法

参考SAP ABAP 随机字符串生成 三种方式_abap随机生成字符串-CSDN博客

思路

1、分别产生 大写字符 小写字符 数字字符 固定长度-3的3种的综合字符串

2、产生随机数字

3、对综合字符串指定位置分别插入 大写字符,小写字符,数字字符

代码如下

复制代码
*--------------------------------------------------------------------*
*function:
*changer:
*note:根据字符串产生随机指定长度字符串
*--------------------------------------------------------------------*
FORM FRM_GET_PWDCHAR USING PALBET TYPE C PLEN TYPE I CHANGING PWDCHAR TYPE C.
  CALL FUNCTION 'RSEC_GENERATE_PASSWORD'
    EXPORTING
      ALPHABET      = PALBET
      OUTPUT_LENGTH = PLEN
    IMPORTING
      OUTPUT        = PWDCHAR
    EXCEPTIONS
      SOME_ERROR    = 1.
ENDFORM.
*--------------------------------------------------------------------*
*function:
*changer:
*note:PLEN 必须大于3
*--------------------------------------------------------------------*
FORM FRM_GET_PWDCHAR_DGT_ULAHPHA USING PLEN TYPE I CHANGING PWDCHAR TYPE C.
  DATA: L_NO(40)  TYPE C,
        LU        TYPE C,
        LL        TYPE C,
        LD        TYPE C,
        LSUBCT    TYPE I,
        L_INDEX   TYPE I,
        ALBET(80).
  DATA: UALPHA(26) TYPE C,
        LALPHA(26) TYPE C,
        DIGSTR(10) TYPE C.
  CLEAR:L_NO,L_INDEX.
  UALPHA = 'ABCDEFGHJKLMNPQRSTUVWXYZ'.
  LALPHA = 'abcdefghijklmnopqrstuvwxyz'.
  DIGSTR = '123456789'.
  ALBET = UALPHA && LALPHA && DIGSTR.
  LSUBCT = PLEN - 3.
  PERFORM FRM_GET_PWDCHAR USING UALPHA 1 CHANGING LU.
  PERFORM FRM_GET_PWDCHAR USING LALPHA 1 CHANGING LL.
  PERFORM FRM_GET_PWDCHAR USING DIGSTR 1 CHANGING LD.
  PERFORM FRM_GET_PWDCHAR USING ALBET LSUBCT CHANGING L_NO.

  DATA: CL_RANDOM TYPE REF TO CL_RANDOM_NUMBER,
        M         TYPE I.
  CREATE OBJECT CL_RANDOM.
  CALL METHOD CL_RANDOM->IF_RANDOM_NUMBER~INIT.

  CALL METHOD CL_RANDOM->IF_RANDOM_NUMBER~GET_RANDOM_INT
    EXPORTING
      I_LIMIT  = LSUBCT
    RECEIVING
      R_RANDOM = M.
  IF M = 0.
    CONCATENATE LU L_NO INTO L_NO.
  ELSEIF M = LSUBCT.
    CONCATENATE L_NO LU  INTO L_NO.
  ELSE.
    L_INDEX = LSUBCT - M.
    CONCATENATE L_NO+0(M) LU L_NO+M(L_INDEX) INTO L_NO.
  ENDIF.
  LSUBCT =  LSUBCT + 1.
  CALL METHOD CL_RANDOM->IF_RANDOM_NUMBER~GET_RANDOM_INT
    EXPORTING
      I_LIMIT  = LSUBCT
    RECEIVING
      R_RANDOM = M.

  IF M = 0.
    CONCATENATE LL L_NO INTO L_NO.
  ELSEIF M = LSUBCT.
    CONCATENATE L_NO LL  INTO L_NO.
  ELSE.
    L_INDEX = LSUBCT - M.
    CONCATENATE L_NO+0(M) LL L_NO+M(L_INDEX) INTO L_NO.
  ENDIF.
  LSUBCT =  LSUBCT + 1.

  CALL METHOD CL_RANDOM->IF_RANDOM_NUMBER~GET_RANDOM_INT
    EXPORTING
      I_LIMIT  = LSUBCT
    RECEIVING
      R_RANDOM = M.
  IF M = 0.
    CONCATENATE LD L_NO INTO L_NO.
  ELSEIF M = LSUBCT.
    CONCATENATE L_NO LD  INTO L_NO.
  ELSE.
    L_INDEX = LSUBCT - M.
    CONCATENATE L_NO+0(M) LD L_NO+M(L_INDEX) INTO L_NO.
  ENDIF.

  PWDCHAR = L_NO.
ENDFORM.
相关推荐
lwmcsjs8 小时前
肇庆/清远/韶关/河源哪家公司做商场双节美陈活动设计更专业?
经验分享·美陈设计
2501_942623348 小时前
任意波形发生器选型指南:量子通信与光电测试实用参考
经验分享
宝宝单机sop8 小时前
新能源汽车资源合集
经验分享
宝宝单机sop9 小时前
家庭教育资源合集
经验分享
孙严Pay17 小时前
快捷支付:高效安全的在线支付新选择
笔记·科技·计算机网络·其他·微信
zhongvv18 小时前
8位应广单片机与32位M0单片机开发差异总结
经验分享·单片机·嵌入式硬件
一条咸鱼_SaltyFish1 天前
[Day10] contract-management初期开发避坑指南:合同模块 DDD 架构规划的教训与调整
开发语言·经验分享·微服务·架构·bug·开源软件·ai编程
宝宝单机sop1 天前
系统架构设计师资源合集
经验分享
数据轨迹0011 天前
CVPR DarkIR:低光图像增强与去模糊一体化
经验分享·笔记·facebook·oneapi·twitter
老陈头聊SEO1 天前
生成引擎优化(GEO)在内容创作与用户体验提升方面的综合应用与效益分析
其他·搜索引擎·seo优化