Cross-platform UUID generator
Posted: Wed Jul 01, 2009 5:44 am
According to Wikipedia this conforms to version 4 (random) OSF UUID standard:
Code: Select all
#UUID_FormatType_None=1<<(0)
#UUID_FormatType_Dashes=1<<(1)
#UUID_FormatType_Braces=1<<(2)
Structure UUID
Byte.b[16]
EndStructure
Procedure.i UniqueID(*UUID.UUID)
If Not *UUID
ProcedureReturn 0
EndIf
For i=0 To 16-1
*UUID\Byte[i]=Random(255)
Next
*UUID\Byte[9]=128+Random(63)
*UUID\Byte[7]=64+Random(15)
ProcedureReturn *UUID
EndProcedure
Procedure.s FormatUUID(*UUID.UUID, FormatType=#UUID_FormatType_None)
Protected UUID_String.s
For i=0 To 16-1
If FormatType&#UUID_FormatType_Dashes
If i=3 Or i=5 Or i=7
UUID_String.s+"-"
EndIf
EndIf
UUID_String.s+RSet(Hex(*UUID\Byte[i]&$FF),2,"0")
Next
If FormatType&#UUID_FormatType_Braces
UUID_String.s="{"+UUID_String.s+"}"
EndIf
ProcedureReturn UUID_String.s
EndProcedure
Define UUID.UUID
Debug FormatUUID(UniqueID(@UUID),#UUID_FormatType_Dashes|#UUID_FormatType_Braces)