Skip to content
/ java Public

SCRU128 Java Implementation (with Kotlin and Android compatibility)

License

Notifications You must be signed in to change notification settings

scru128/java

Folders and files

NameName
Last commit message
Last commit date

Latest commit

2e77a0c · Sep 18, 2023

History

77 Commits
Sep 18, 2023
Aug 19, 2023
Sep 3, 2023
Nov 6, 2021
Nov 6, 2021
Sep 18, 2023
Nov 3, 2021
Jun 21, 2023
Sep 18, 2023
Aug 19, 2023
Dec 22, 2022
Jul 18, 2023

Repository files navigation

SCRU128: Sortable, Clock and Random number-based Unique identifier

Maven Central License

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

Kotlin examples:

import io.github.scru128.Scru128

// generate a new identifier object
val x = Scru128.generate()
println(x) // e.g., "036z951mhjikzik2gsl81gr7l"
println(x.toByteArray()) // as a 128-bit unsigned integer in big-endian byte array

// generate a textual representation directly
println(Scru128.generateString()) // e.g., "036z951mhzx67t63mq9xe6q0j"

Java examples:

import io.github.scru128.*;

// generate a new identifier object
Scru128Id x = Scru128.generate();
System.out.println(x); // e.g., "036z951mhjikzik2gsl81gr7l"
System.out.println(x.toByteArray()); // as a 128-bit unsigned integer in big-endian byte array

// generate a textual representation directly
System.out.println(Scru128.generateString()); // e.g., "036z951mhzx67t63mq9xe6q0j"

See SCRU128 Specification for details.

Installation

Obtain a copy from Maven Central Repository. build.gradle.kts example:

repositories {
    mavenCentral()
}

dependencies {
    implementation("io.github.scru128:scru128:<version>")
}

Target environment

  • Java 8 or higher
  • Android API level 21 (Android 5.0) or higher

License

Licensed under the Apache License, Version 2.0.

See also

About

SCRU128 Java Implementation (with Kotlin and Android compatibility)

Topics

Resources

License

Stars

Watchers

Forks

Languages