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
// generate a new identifier object
let x = scru128::new();
println!("{}", x); // e.g., "036z951mhjikzik2gsl81gr7l"
println!("{}", x.to_u128()); // as a 128-bit unsigned integer
// generate a textual representation directly
println!("{}", scru128::new_string()); // e.g., "036z951mhzx67t63mq9xe6q0j"
See SCRU128 Specification for details.
Default features:
std
configuresScru128Generator
with the system clock. Withoutstd
, this crate provides basic SCRU128 primitives available underno_std
environments.rand
enables an adapter forrand::RngCore
to userand
and any other conforming random number generators withScru128Generator
.default_rng
(impliesstd
) provides the default random number generator forScru128Generator
and enables theScru128Generator::new()
constructor.global_gen
(impliesdefault_rng
) provides the process-wide default SCRU128 generator and enables thenew()
andnew_string()
functions.
Optional features:
serde
enables serialization/deserialization ofScru128Id
via serde.
Licensed under the Apache License, Version 2.0.