将 return 一个唯一字符串的 REXX 例程

REXX routine that will return a unique string

我想定义一个函数,每次调用它时 return 都是一个唯一的字符串。此函数的 return 值在接下来的 50 年内必须是唯一的。这是我尝试过的:

k.rand=USERID()
do i=1 to 10 by 1
 n=RANDOM(1,26)
k.i=word('a b c d e f g h I j k l m n o p q r s t u v w x y z ',n)
m.i= WORD('@ ! # $ % ^ * 1 2 3 4 5 6 7 8 9',i)
k.rand=k.rand ||k.i ||m.I
END
say k.rand

Rexx 中没有内置的UUID 功能。 Walmart Labs has open sourced a z/OS based service that generates UUIDs 保证到 34,000 年 :)

zUID is a cloud enabled service in the z/OS environment that generates a unique identifier using a specialized patent-pending algorithm. It is guaranteed to generate 100% unique identifiers until the year 34,000 without requiring a database system to manage.

Service returns the UID in 3 different hex formats, plain, guid and ess in plain text format. They are not wrapped in XML or JSON structures.

plain: 32 bytes, 1234567890abcdef1234567890abcdef
ess: 34 bytes,12345678-90abcdef12345678-90abcdef
guid: 36 bytes, 12345678-90ab-cdef-1234-567890abcdef

No authorization is needed for this service.

In addition to being web enabled you can call this routine directly using a CICS LINK command in your COBOL programs. The HTTP interface was designed to make it available for more consumers out side the z/OS environment.

在我们的网站上,有一些 REXX 工具,调用这些工具后将提交大型机作业。例如,如果您针对数据集调用该工具,将在后台提交作业以查找数据集中的记录数。

在给定时间,可以调用 REXX 工具 N 次。为了避免 spool 中的作业名称重复,我们提出了类似下面的内容。

NUM = RANDOM(000,999)
JOBNAME=USERID()||NUM    

USERID()RANDOM() 都是 REXX 的内置函数。

USERID() returns TSO/E 用户 ID。更多详细信息 here

RANDOM returns 一个随机数。更多详情 here.

提供了一个代码片段 here 供您尝试。

您 运行 您的 REXX 在 z/OS 系统上吗?如果是这样,您可以使用 STCKE STORE CLOCK EXTENDED 指令生成唯一的数字,当在同一系统或具有同步时钟的综合系统上生成时,该指令将在数千年内是唯一的。

您需要破解汇编器才能编写外部 REXX 函数。

STCKE    RSECT                                                         
STCKE    AMODE 31                                                      
STCKE    RMODE ANY                                                     
         SAVE  (14,12)                                                 
         LR    R12,R15                                                 
         USING STCKE,R12                                               
         USING EFPL,R1           REXX external function parameter list 
         L     R4,EFPLEVAL                                             
         L     R4,0(R4)          REXX evaluation block                 
         USING EVALBLOCK,R4                                            
         STCKE EVALBLOCK_EVDATA  Store STCKE in the function result area   
         MVC   EVALBLOCK_EVLEN,=F'16' length of result (STCKE)         
         LA    R15,0             RC=0                                  
         RETURN (14,12),RC=(15)                                        
         YREGS                                                         
         IRXEFPL                                                       
         IRXEVALB                                                      
         END     

并确保在 REXX 代码中设置 numeric digits,因为 STCKF 是一个 16 字节的大数字!

/* REXX */            

numeric digits 64     

do 10                 
  raw = stcke()       
  hex = c2x(raw)      
  num = x2d(hex)      
  say hex num         
end