本函数是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)