[ABAP] Passwort generieren

PARAMETERS: p_length TYPE i DEFAULT 20. " Passwortlänge
PARAMETERS: p_alpha TYPE string LOWER CASE DEFAULT 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_'. " Passwortzeichensatz
  
START-OF-SELECTION.
  DATA: lv_pw TYPE string.
  DATA(r_sel) = cl_abap_random_int=>create( seed = cl_abap_random=>seed( ) min = 0 max = strlen( p_alpha ) - 1 ).

  DO p_length TIMES.
    lv_pw = |{ lv_pw }{ substring( val = p_alpha off = r_sel->get_next( ) len = 1 ) }|.
  ENDDO.

  WRITE: / 'Passwort: ', lv_pw.

[ABAP] Zufallszahlen erzeugen

Variante 1 (cl_abap_random)

* int - Zufallszahlen von 0...100 erzeugen
DATA(o_rand_i) = cl_abap_random_int=>create( seed = cl_abap_random=>seed( ) min = 0 max = 100 ).
DO 10 TIMES.
  WRITE: / o_rand_i->get_next( ).
ENDDO.

DATA(o_rand) = cl_abap_random=>create( cl_abap_random=>seed( ) ).
DO 10 TIMES.
  WRITE: / o_rand->intinrange( low = 0 high = 100 ).
ENDDO.

* float - Zufallszahlen im Bereich von 0...1 erzeugen
DATA(o_rand_f) = cl_abap_random_float=>create( seed = cl_abap_random=>seed( ) ).
DO 10 TIMES.
  WRITE: / |{ o_rand_f->get_next( ) NUMBER = ENVIRONMENT }|.
ENDDO.

DATA(o_rand) = cl_abap_random=>create( cl_abap_random=>seed( ) ).
DO 10 TIMES.
  WRITE: / |{ o_rand->float( ) NUMBER = ENVIRONMENT }|.
*  WRITE: / |{ o_rand->decfloat16( ) NUMBER = ENVIRONMENT }|.
*  WRITE: / |{ o_rand->decfloat34( ) NUMBER = ENVIRONMENT }|.
ENDDO.

Variante 2 (cl_random_number)

DATA(o_rnd) = NEW cl_random_number( ).
o_rnd->if_random_number~init( ).

DO 10 TIMES.
* Integer-Zahlen von 0 ... 100
  DATA(lv_i) = o_rnd->if_random_number~get_random_int( 100 ).
  WRITE: / lv_i.
ENDDO.

DO 10 TIMES.
* Float-Zahlen von 0 ... 1
  DATA(lv_f) = o_rnd->if_random_number~get_random_float( ).
  WRITE: / |{ lv_f NUMBER = ENVIRONMENT }|.
ENDDO.