PureBasic
PureBasic
Generate Monotonic ULIDs
See more ULID/UUID Examples
Generate a sequence of monotonic ULIDs all using the same seed time. This code sample generates a series of ULIDs with continuously increasing values.Important: Chilkat's ULID functionality was introduced in v9.5.0.94.
Chilkat PureBasic Downloads
IncludeFile "CkDateTime.pb"
IncludeFile "CkStringBuilder.pb"
Procedure ChilkatExample()
seedDt.i = CkDateTime::ckCreate()
If seedDt.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; You can set the seed time to any desired value.
; In this example, the seed time is set to the current system date/time.
CkDateTime::ckSetFromCurrentSystemTime(seedDt)
; Generate the 1st ULID in the series.
; (i.e. the current UTC UNIX-time)
utc.i = 1
ulid.s = CkDateTime::ckUlidGenerate(seedDt,utc)
Debug ulid
; Store the ULID in a Chilkat StringBuilder to generate the series.
sbUlid.i = CkStringBuilder::ckCreate()
If sbUlid.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkStringBuilder::ckAppend(sbUlid,ulid)
i.i = 0
While i < 50
CkDateTime::ckUlidIncrement(seedDt,sbUlid)
Debug CkStringBuilder::ckGetAsString(sbUlid)
i = i + 1
Wend
; Sample output:
; 01GRGH30H8DMQ4F9A0XCTZHPGM
; 01GRGH30H8DMQ4F9A0XCTZHPGN
; 01GRGH30H8DMQ4F9A0XCTZHPGP
; 01GRGH30H8DMQ4F9A0XCTZHPGQ
; 01GRGH30H8DMQ4F9A0XCTZHPGR
; 01GRGH30H8DMQ4F9A0XCTZHPGS
; 01GRGH30H8DMQ4F9A0XCTZHPGT
; 01GRGH30H8DMQ4F9A0XCTZHPGV
; 01GRGH30H8DMQ4F9A0XCTZHPGW
; 01GRGH30H8DMQ4F9A0XCTZHPGX
; 01GRGH30H8DMQ4F9A0XCTZHPGY
; 01GRGH30H8DMQ4F9A0XCTZHPGZ
; 01GRGH30H8DMQ4F9A0XCTZHPH0
; 01GRGH30H8DMQ4F9A0XCTZHPH1
; 01GRGH30H8DMQ4F9A0XCTZHPH2
; 01GRGH30H8DMQ4F9A0XCTZHPH3
; 01GRGH30H8DMQ4F9A0XCTZHPH4
; 01GRGH30H8DMQ4F9A0XCTZHPH5
; 01GRGH30H8DMQ4F9A0XCTZHPH6
; 01GRGH30H8DMQ4F9A0XCTZHPH7
; 01GRGH30H8DMQ4F9A0XCTZHPH8
; 01GRGH30H8DMQ4F9A0XCTZHPH9
; 01GRGH30H8DMQ4F9A0XCTZHPHA
; 01GRGH30H8DMQ4F9A0XCTZHPHB
; 01GRGH30H8DMQ4F9A0XCTZHPHC
; 01GRGH30H8DMQ4F9A0XCTZHPHD
; 01GRGH30H8DMQ4F9A0XCTZHPHE
; 01GRGH30H8DMQ4F9A0XCTZHPHF
; 01GRGH30H8DMQ4F9A0XCTZHPHG
; 01GRGH30H8DMQ4F9A0XCTZHPHH
; 01GRGH30H8DMQ4F9A0XCTZHPHJ
; 01GRGH30H8DMQ4F9A0XCTZHPHK
; 01GRGH30H8DMQ4F9A0XCTZHPHM
; 01GRGH30H8DMQ4F9A0XCTZHPHN
; 01GRGH30H8DMQ4F9A0XCTZHPHP
; 01GRGH30H8DMQ4F9A0XCTZHPHQ
; 01GRGH30H8DMQ4F9A0XCTZHPHR
; 01GRGH30H8DMQ4F9A0XCTZHPHS
; 01GRGH30H8DMQ4F9A0XCTZHPHT
; 01GRGH30H8DMQ4F9A0XCTZHPHV
; 01GRGH30H8DMQ4F9A0XCTZHPHW
; 01GRGH30H8DMQ4F9A0XCTZHPHX
; 01GRGH30H8DMQ4F9A0XCTZHPHY
; 01GRGH30H8DMQ4F9A0XCTZHPHZ
; 01GRGH30H8DMQ4F9A0XCTZHPJ0
; 01GRGH30H8DMQ4F9A0XCTZHPJ1
; 01GRGH30H8DMQ4F9A0XCTZHPJ2
; 01GRGH30H8DMQ4F9A0XCTZHPJ3
; 01GRGH30H8DMQ4F9A0XCTZHPJ4
; 01GRGH30H8DMQ4F9A0XCTZHPJ5
; 01GRGH30H8DMQ4F9A0XCTZHPJ6
CkDateTime::ckDispose(seedDt)
CkStringBuilder::ckDispose(sbUlid)
ProcedureReturn
EndProcedure