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.
相关推荐
星纬智联技术2 小时前
[开源] myclaw:2000 行 Go 平替 43 万行的 OpenClaw
经验分享
中二病码农不会遇见C++学姐9 小时前
包管理器:从“依赖地狱”到“软件宇宙”的演化史
其他
孞㐑¥10 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
Libraeking11 小时前
破壁行动:在旧项目中丝滑嵌入 Compose(混合开发实战)
android·经验分享·android jetpack
方见华Richard11 小时前
世毫九量子原住民教育理念全书
人工智能·经验分享·交互·原型模式·空间计算
三水不滴14 小时前
计网ping原理
经验分享·笔记·计算机网络
数据安全科普王15 小时前
当你的密码旅行时:公钥与私钥如何让互联网“锁”而不“死”
其他
架构师沉默16 小时前
这个问题,决定你能不能进大厂!
经验分享
软件检测小牛玛16 小时前
软件功能测试机构推荐:资质权威,报告认可的软件测评机构 中承信安
经验分享·软件功能测试·第三方软件检测·软件测评机构·软件功能测试报告
方见华Richard17 小时前
方见华个人履历|中英双语版
人工智能·经验分享·交互·原型模式·空间计算