ABAP随机数(随机数不随机)
1. 随机数不随机
这里有一个概念,常规意义上系统产生的随机数是按照一定算法模拟产生的,是伪随机数;一般的随机数有个seed的概念,根据seed作为起始值,进行计算,后续每次随机数计算会将上一次产生的随机数作为参数加入计算,如果seed 不变,产生的随机数序列则会是固定的随机数序列。并发情况下, 多个线程产生的种子有可能是一样的, 生成的随机数可能也是一样的(在SAP中外部系统调用接口这种情况更明细)。因此随机数一般会将时间等比较动态的数据加入运算,来生成更随机的随机数。
示例,如下程序每次运行产生的随机数一样(在一个程序下多次运行产生的随机数不一样)
DATA: lo_random TYPE REF TO cl_abap_random,
lv_min_limit TYPE i,
lv_max_limit TYPE i,
lv_range_num TYPE i.
lo_random = cl_abap_random=>create( seed = 2 ).
lv_min_limit = 0 .
lv_max_limit = 100.
lv_range_num = lo_random->intinrange( low = lv_min_limit high = lv_max_limit ).
WRITE: lv_range_num.
两次运行程序得到的随机数是一样的
2. ABAP随机数生成
DATA: lo_random TYPE REF TO cl_abap_random,
lv_seed TYPE i,
lv_min_limit TYPE i,
lv_max_limit TYPE i,
lv_range_num TYPE i.
lv_seed = cl_abap_random=>seed( ).
lo_random = cl_abap_random=>create( seed = lv_seed ).
lv_min_limit = 0 .
lv_max_limit = 100000000.
lv_range_num = lo_random->intinrange( low = lv_min_limit high = lv_max_limit ).
函数 CACS_RANDOM_I4 、RANDOM_AMOUNT 为基于当前时间(精确到秒)计算产生随机数,并行时会出现一样,随机性低
函数 GENERAL_GET_RANDOM_INT 基于时间,系统表数据条目数计算,或者call system function 生成随机数,随机性可以
函数 QF05_RANDOM_INTEGER 基于时间戳(精确到毫秒)计算随机数,随机性更高
函数 SXMS_CREATE_RANDOM_NUMBER 以时间戳毫秒位为种子,调用方法cl_abap_random_int->get_next( )计算随机数,随机性也比较高
3. 其它随机
生成随机密码的函数: SUSR_GENERATE_PASSWORD、RSEC_GENERATE_PASSWORD。
其它随机字符串完全可以使用随机数配合字符串截取拼接来生成。
post SAP-Garson
原文链接:https://blog.csdn.net/xiefireworks/article/details/124529737文章来自于网络,如果侵犯了您的权益,请联系站长删除!