如何在Livecode(或HyperTalk)中创建UUID(GUID)?

How do I create a UUID (GUID) in Livecode (or HyperTalk)?

如何在livecode或hypercard中创建UUID(=通用唯一标识符,或guid=全局唯一标识符,微软语言)?

UUID的目标是在没有中央协调的情况下为信息片段提供几乎唯一的键。

工具书类

  • 类型4 UUID(维基百科)
  • 如何在javascript中创建guid
  • guid和uuid有什么区别吗?

如果您在UNIX上(如Linux或MacOS),可以使用shell()函数调用uuidgen终端命令。应该是这样的

1
put shell("uuidgen") into theUUID

这有点麻烦(创建一个shell,在其中运行一个命令行应用程序,然后再次退出它),但是可以在较旧的livecode版本上工作,这与shell脚本的工作方式没什么不同。

在hypercard中,您必须在脚本设置为applescript的对象中使用applescript,或者使用"do x as applescript"命令。不确定applescript是否可以本机构建UUID,但如果不能,则可以使用applescript运行shell脚本。(shell()函数在hypercard中不存在,它是由supercard,iirc发明的)。

如果没有任何帮助,这里有一个描述如何创建标准uuid的规范:http://www.opengroup.org/dce/info/draft-leach-uuid s-guids-01.txt它不特定于任何编程语言。


在Livecode6.1(今天发布)中,您可以使用uuid函数创建uuid。默认为类型4随机UUID,并实现了类型3和5基于摘要的UUID。


到目前为止(至少在6.6.1版中),可以使用不带shell的put uuid(random)

1
2
3
if the type is empty or random a version 4 (random) UUID is returned. A cryptographic quality pseudo-random number generator is used to generate the randomness.
If the type is md5 a version 3 UUID is returned.
If the type is sha1 a version 5 UUID is returned.


以下函数创建类型4(随机)UUID:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function getUUID
   local tUUIDpattern
   local tUUID
   local tHexDigits
   put"xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx" into tUUIDpattern
   put"1234567890abcdef" into tHexDigits
   repeat for each char tChar in tUUIDpattern
      if tChar ="x" then
         put any char of tHexDigits  after tUUID
      else
         put tChar after tUUID
      end if
   end repeat
   return tUUID
end getUUID