Sample code for 30+ languages & platforms
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

PureBasic
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