Skip to content

scru128/go-scru128

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

74 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

GitHub tag 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
import "github.com/scru128/go-scru128/v3"

// generate a new identifier object
x := scru128.New()
fmt.Println(x)    // e.g., "036z951mhjikzik2gsl81gr7l"
fmt.Println(x[:]) // as a 128-bit unsigned integer in big-endian byte array

// generate a textual representation directly
fmt.Println(scru128.NewString()) // e.g., "036z951mhzx67t63mq9xe6q0j"

See SCRU128 Specification for details.

License

Licensed under the Apache License, Version 2.0.

See also