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  }