Sample code for 30+ languages & platforms
C

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 C Downloads

C
#include <C_CkDateTime.h>
#include <C_CkStringBuilder.h>

void ChilkatSample(void)
    {
    HCkDateTime seedDt;
    BOOL utc;
    const char *ulid;
    HCkStringBuilder sbUlid;
    int i;

    seedDt = CkDateTime_Create();

    // 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_SetFromCurrentSystemTime(seedDt);

    // Generate the 1st ULID in the series.
    // (i.e. the current UTC UNIX-time)
    utc = TRUE;
    ulid = CkDateTime_ulidGenerate(seedDt,utc);
    printf("%s\n",ulid);

    // Store the ULID in a Chilkat StringBuilder to generate the series.
    sbUlid = CkStringBuilder_Create();
    CkStringBuilder_Append(sbUlid,ulid);

    i = 0;
    while (i < 50) {
        CkDateTime_UlidIncrement(seedDt,sbUlid);
        printf("%s\n",CkStringBuilder_getAsString(sbUlid));
        i = i + 1;
    }

    // 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_Dispose(seedDt);
    CkStringBuilder_Dispose(sbUlid);

    }