services
This commit is contained in:
+57
@@ -0,0 +1,57 @@
|
||||
// Package randstr provides basic functions for generating random bytes, string
|
||||
package randstr
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/rand"
|
||||
"encoding/binary"
|
||||
"encoding/hex"
|
||||
)
|
||||
|
||||
// Bytes generates n random bytes
|
||||
func Bytes(n int) []byte {
|
||||
b := make([]byte, n)
|
||||
_, err := rand.Read(b)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
// Base64 generates a random base64 string with length of n
|
||||
func Base64(n int) string {
|
||||
return String(n, "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/")
|
||||
}
|
||||
|
||||
// Base64 generates a random base62 string with length of n
|
||||
func Base62(s int) string {
|
||||
return String(s, "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
|
||||
}
|
||||
|
||||
// Hex generates a random hex string with length of n
|
||||
// e.g: 67aab2d956bd7cc621af22cfb169cba8
|
||||
func Hex(n int) string { return hex.EncodeToString(Bytes(n)) }
|
||||
|
||||
// list of default letters that can be used to make a random string when calling String
|
||||
// function with no letters provided
|
||||
var defLetters = []rune("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
|
||||
|
||||
// String generates a random string using only letters provided in the letters parameter
|
||||
// if user ommit letters parameters, this function will use defLetters instead
|
||||
func String(n int, letters ...string) string {
|
||||
var letterRunes []rune
|
||||
if len(letters) == 0 {
|
||||
letterRunes = defLetters
|
||||
} else {
|
||||
letterRunes = []rune(letters[0])
|
||||
}
|
||||
|
||||
var bb bytes.Buffer
|
||||
bb.Grow(n)
|
||||
l := uint32(len(letterRunes))
|
||||
// on each loop, generate one random rune and append to output
|
||||
for i := 0; i < n; i++ {
|
||||
bb.WriteRune(letterRunes[binary.BigEndian.Uint32(Bytes(4))%l])
|
||||
}
|
||||
return bb.String()
|
||||
}
|
||||
Reference in New Issue
Block a user