UUIDを生成するメソッド
日付 | 2009/08/21 |
---|---|
ID | 75873 (英語原文参照) |
バージョン | 11.4 |
プラットフォーム | Mac & Win |
Wikipediaからの引用:
http://ja.wikipedia.org/wiki/汎用一意識別子
汎用一意識別子(はんよういちいしきべつし、Universally Unique Identifier、以下UUIDと表記)とは、Distributed Computing Environment (DCE)の一部としてOpen Software Foundation (OSF)が標準化した、一意に識別するための識別子である。UUIDは、分散システム上でどこかが統制を取らずとも、一意に特定可能な識別子の作成を目的としており、UUIDは重複や偶然の一致が起こりえないと確信して用いることができる。(UUIDを付された情報は、したがって、名前の衝突を解決する必要なく、後に単一のデータベースに統合することができる。)―括弧内は英文より。
4D v11 SQLは、内部的にUUIDを多用しています。iCalendarフォーマットでは、カレンダーやイベントをUUIDで管理し、コンピュータに搭載されているハードドライブもUUIDを有しています。
下記のメソッドは、RFC4122で定義されたバージョン4のUUIDを生成するものです。乱数の生成には、Tips 75874「一定範囲内の乱数を返すメソッド」を使用しています。
'UTIL_NewUUID -> STRING C_TEXT($0;$UUID_T) C_LONGINT($Ndx;$Idx;$SOA;$RIS;$Rnd_L;$End_L) C_TEXT($Chars_T) `====================== Initialize and Setup ================================ $Chars_T:="0123456789abcdef" $End_L:=Length($Chars_T)-1 `======================== Method Actions ================================== `// rfc 4122 requires this format for a version 4 (random number) UUID $UUID_T:="########-####-4###-####-############" For ($Ndx;1;Length($UUID_T)) If ($UUID_T[[$Ndx]]="#") $Rnd_L:=UTIL_Random (0;$End_L) If ($Ndx=20) `Must be a value of 8, 9, a, or b $Idx:=($Rnd_L & 0x0003) | 0x0008 Else $Idx:=$Rnd_L End if $UUID_T[[$Ndx]]:=$Chars_T[[$Idx+1]] End if End for `======================== Clean up and Exit ================================= $0:=$UUID_T