SCRU128: Sortable, Clock and Random number-based Unique identifier
SCRU128 ID is yet another attempt to supersede UUID for the users who need decentralized, globally unique time-ordered identifiers. SCRU128 is inspired by ULID and KSUID and has the following features:
- 128-bit unsigned integer type
- Sortable by generation time (as integer and as text)
- 25-digit case-insensitive textual representation (Base36)
- 48-bit millisecond Unix timestamp that ensures useful life until year 10889
- Up to 281 trillion time-ordered but unpredictable unique IDs per millisecond
- 80-bit three-layer randomness for global uniqueness
import scru128
# generate a new identifier object
x = scru128.new()
print(x) # e.g., "036z951mhjikzik2gsl81gr7l"
print(int(x)) # as a 128-bit unsigned integer
# generate a textual representation directly
print(scru128.new_string()) # e.g., "036z951mhzx67t63mq9xe6q0j"
See SCRU128 Specification for details.
Command-line interface
scru128 generates SCRU128 IDs.
$ scru128
036zg4zlmdwdz8414eim77vct
$ scru128 -n 4
036zg4zlv707wnczl108ky4i7
036zg4zlv707wnczl12towmho
036zg4zlv707wnczl14hirm6n
036zg4zlv707wnczl17110shh
scru128-inspect prints the components of given SCRU128 IDs as human- and
machine-readable JSON objects.
$ scru128 -n 2 | scru128-inspect
{
"input": "036zg552n91mt9s0gyhdwif95",
"canonical": "036zg552n91mt9s0gyhdwif95",
"timestampIso": "2022-03-20T08:34:01.493+00:00",
"timestamp": "1647765241493",
"counterHi": "10145723",
"counterLo": "13179084",
"entropy": "4167049657",
"fieldsHex": ["017fa6763e95", "9acfbb", "c918cc", "f86021b9"]
}
{
"input": "036zg552n91mt9s0gyj7i56sj",
"canonical": "036zg552n91mt9s0gyj7i56sj",
"timestampIso": "2022-03-20T08:34:01.493+00:00",
"timestamp": "1647765241493",
"counterHi": "10145723",
"counterLo": "13179085",
"entropy": "3838717859",
"fieldsHex": ["017fa6763e95", "9acfbb", "c918cd", "e4ce2fa3"]
}
License
Licensed under the Apache License, Version 2.0.
Metadata
Release files for scru128 3.0.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| scru128-3.0.4.tar.gz | 9.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| scru128-3.0.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 20.0 kB
Release files / scru128-3.0.4.tar.gz
| Download URL | scru128-3.0.4.tar.gz |
|---|---|
| Size | 9.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9f5fd621f96827f5e800f421bfe33667dcab7bdb749a6660f80844de4bae1281
|
|
BLAKE2b-256 checksum How to use checksums |
cb0a602967757598b7f0f0d3f9ccd77b0c40dad0d8cb298b15ceb7c524faa7dc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.0.1 CPython/3.13.1 Darwin/24.2.0
|
Release files / scru128-3.0.4-py3-none-any.whl
| Download URL | scru128-3.0.4-py3-none-any.whl |
|---|---|
| Size | 10.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0a402cf14fc8fd62a3ca1dfff65eed3d661ecb508f152e75b3f9581e398ed9be
|
|
BLAKE2b-256 checksum How to use checksums |
8ccf1dabedf4f1b52471634b075770574523d8f853d9e33f5dd4d6843937e670
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.0.1 CPython/3.13.1 Darwin/24.2.0
|