ABAP 函数介绍:生成随机密码

本函数是SDN(SAP Developer Network)社区介绍、由Eddy De Clercq开发的,它提供了一个用于生成随机密码的ABAP函数模块,该模块可以根据导入参数指定的长度生成包含大小写字母和数字的随机密码。 

FUNCTION Z_GENERATE_PWD.
*"----------------------------------------------------------------------
*"*"局部接口:
*"  IMPORTING
*"     VALUE(CHARS) TYPE  I
*"  EXPORTING
*"     VALUE(PWD) TYPE  STRING
*"----------------------------------------------------------------------
DATA: a_sign TYPE x, " 用于存储下一个要添加到密码的字符
    xpwd TYPE xstring, " 用于以二进制格式存储密码
    conv TYPE REF TO cl_abap_conv_in_ce, " 字符编码转换对象的引用
    prnga TYPE REF TO cl_abap_random_int, " 特殊字符随机数生成器的引用
    prngb TYPE REF TO cl_abap_random_int, " 数字(0-9)随机数生成器的引用
    prngc TYPE REF TO cl_abap_random_int, " 大写字母(A-Z)随机数生成器的引用
    prngd TYPE REF TO cl_abap_random_int, " 小写字母(a-z)随机数生成器的引用
    seed TYPE i, " 随机数生成器的种子值
    random TYPE i. " 用于存储随机数

" 初始化随机数生成器的种子
seed = cl_abap_random=>seed( ).

" 创建不同字符集的随机数生成器
prnga = cl_abap_random_int=>create( seed = seed min = 1 max = 3 ).
seed = cl_abap_random=>seed( ).
prngb = cl_abap_random_int=>create( seed = seed min = 48 max = 57 ).
seed = cl_abap_random=>seed( ).
prngc = cl_abap_random_int=>create( seed = seed min = 65 max = 90 ).
seed = cl_abap_random=>seed( ).
prngd = cl_abap_random_int=>create( seed = seed min = 97 max = 122 ).

" 循环生成指定长度(chars TIMES)的密码
DO chars TIMES.
 " 获取随机数以确定使用哪个字符集
 random = prnga->get_next( ).

 " 根据随机数从相应的字符集中选择一个字符
 CASE random.
   WHEN 1.
     a_sign = prngb->get_next( ). " 选择一个数字(0-9)
   WHEN 2.
     a_sign = prngc->get_next( ). " 选择一个大写字母(A-Z)
   WHEN 3.
     a_sign = prngd->get_next( ). " 选择一个小写字母(a-z)
 ENDCASE.

 " 将选定的字符以二进制模式连接到密码字符串
 CONCATENATE xpwd a_sign INTO xpwd IN BYTE MODE.
ENDDO.

" 创建一个转换对象,用于将二进制密码转换为字符串格式
conv = cl_abap_conv_in_ce=>create( input = xpwd ).

" 从转换对象中读取转换后的密码
conv->read( IMPORTING data = pwd ).
ENDFUNCTION.

    代码首先初始化随机数生成器的种子,然后创建四个随机数生成器,分别用于生成特殊字符、数字、大写字母和小写字母。在循环中,根据随机数选择相应的字符集,并将随机字符添加到密码字符串中。最后,使用转换对象将二进制密码转换为字符串格式。

函数执行结果:

输入参数 :20 (要求密码长度为20)

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ᝰ随心ꦿེএ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值