If you thought that UUID was the end of universally unique identifiers, think again. Here’s the ULID spec, with the following improvements:

128-bit compatibility with UUID

1.21e+24 unique ULIDs per millisecond

Lexicographically sortable!

Canonically encoded as a 26 character string, as opposed to the 36 character UUID

Uses Crockford’s base32 for better efficiency and readability (5 bits per character)

Case insensitive

No special characters (URL safe)

Monotonic sort order (correctly detects and handles the same millisecond)

Here’s how it looks:

ulid() // 01ARZ3NDEKTSV4RRFFQ69G5FAV

And there’s a wide selection of libraries implementing ULID for all major programming languages.