我想定义一个函数,该函数在每次调用时都返回唯一的字符串。该函数的返回值在接下来的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
答案 0 :(得分:7)
Rexx中没有内置的UUID函数。 Walmart Labs has open sourced a z/OS based service that generates UUIDs保证到34,000年:)
zUID是z / OS环境中启用了云的服务,可生成 使用专门的正在申请专利的算法的唯一标识符。它 保证可以生成100%的唯一标识符,直到年份 无需数据库系统进行管理就可以达到34,000。
Service以3种不同的十六进制格式(普通,guid和 以纯文本格式。它们没有包装在XML或JSON中 结构。
纯文本:32个字节,1234567890abcdef1234567890abcdef
ess:34个字节,12345678-90abcdef12345678-90abcdef
guid:36个字节,12345678-90ab-cdef-1234-567890abcdef此服务无需授权。
除了启用网络功能外,您还可以直接调用此例程 在COBOL程序中使用CICS LINK命令。 HTTP接口 旨在使z / OS之外的更多消费者可以使用它 环境。
答案 1 :(得分:0)
您是否在z / OS系统上运行REXX?如果这样,您可以使用STCKE
STORE CLOCK EXTENDED
指令生成唯一编号,当在具有同步时钟的同一系统或sysplex上生成该指令时,该编号将具有数千年的唯一性。
您需要破解汇编器才能编写外部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
答案 2 :(得分:-2)
在我们的站点上,有一些REXX工具,这些工具在被调用时将提交大型机作业。例如,如果您针对数据集调用该工具,则作业将在后台提交,以查找数据集中的记录数。
在给定的时间,REXX工具可以被调用N次。为了避免在假脱机中重复工作名称,我们提出了类似以下的内容。
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
. . .
<TargetFramework>netcoreapp2.0</TargetFramework>
. . .
</PropertyGroup>
</Project>
NUM = RANDOM(000,999)
JOBNAME=USERID()||NUM
和USERID()
都是REXX中的内置函数。
RANDOM()
返回TSO / E用户ID。更多详细信息here。
USERID()
返回一个随机数。更多详细信息here。
here提供了一个代码片段供您尝试。