ABAP随机数(随机数不随机)

43 篇文章 7 订阅

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随机数生成

        OO生成随机数如下,采用了随机种子加随机数计算的形式

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。

        其它随机字符串完全可以使用随机数配合字符串截取拼接来生成。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值