bitbucket.org/ai69/amoy@v0.2.3/uuid.go (about) 1 package amoy 2 3 import ( 4 "crypto/sha1" 5 "encoding/base32" 6 "encoding/hex" 7 "strings" 8 9 "github.com/1set/gut/yrand" 10 guuid "github.com/google/uuid" 11 ) 12 13 // GetUUID returns a new random UUID in hex string. 14 // e.g. 7897af8b-9188-4fc5-9e0b-8bf63a2d7bab 15 func GetUUID() string { 16 return guuid.New().String() 17 } 18 19 var b32Enc = base32.StdEncoding.WithPadding(base32.NoPadding) 20 21 // GetCDKey returns a new random CD key with 25 characters + 4 dashes in custom Base32 encoding (125 random bits in total), which contains no I, O, 0, 1. 22 func GetCDKey() string { 23 const keys = `ABCDEFGHJKLMNPQRSTUVWXYZ23456789` 24 raw, _ := yrand.String(keys, 25) 25 var p []string 26 for i := 0; i < len(raw); i += 5 { 27 p = append(p, raw[i:i+5]) 28 } 29 return strings.Join(p, "-") 30 } 31 32 // GetUB32 returns a new random UUID in standard base32 string without padding, i.e. 26-byte long. 33 // e.g. AMZIPGLFRVEQLKNI477QBST5V4 34 func GetUB32() string { 35 id := guuid.New() 36 if b, err := id.MarshalBinary(); err == nil { 37 return b32Enc.EncodeToString(b) 38 } 39 return EmptyStr 40 } 41 42 // GetSID returns a new random UUID in base36 string. 43 // e.g. 3wqn6cl0uvfsbchw87izr8scm 44 func GetSID() string { 45 id := guuid.New() 46 if b, err := id.MarshalBinary(); err == nil { 47 return EncodeBytesAsBase36(b) 48 } 49 return EmptyStr 50 } 51 52 // GetFingerprint returns SHA1 hash of a string in fingerprint format. 53 // e.g. 0a:4d:55:a8:d7:78:e5:02:2f:ab:70:19:77:c5:d8:40:bb:c4:86:d0 54 func GetFingerprint(s string) string { 55 sum := sha1.Sum([]byte(s)) // nolint: gosec 56 hexs := make([]string, len(sum)) 57 for i, c := range sum { 58 hexs[i] = hex.EncodeToString([]byte{c}) 59 } 60 return strings.Join(hexs, ":") 61 }