mirror of
https://github.com/duke-git/lancet.git
synced 2026-02-12 08:42:29 +08:00
feat: add new random function
This commit is contained in:
@@ -12,18 +12,12 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
// RandString generate random string
|
const (
|
||||||
// see https://stackoverflow.com/questions/22892120/how-to-generate-a-random-string-of-a-fixed-length-in-go
|
NUMERAL = "0123456789"
|
||||||
func RandString(length int) string {
|
LOWER_LETTERS = "abcdefghijklmnopqrstuvwxyz"
|
||||||
const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
UPPER_LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
|
LETTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
b := make([]byte, length)
|
)
|
||||||
r := rand.New(rand.NewSource(time.Now().UnixNano()))
|
|
||||||
for i := range b {
|
|
||||||
b[i] = letters[r.Int63()%int64(len(letters))]
|
|
||||||
}
|
|
||||||
return string(b)
|
|
||||||
}
|
|
||||||
|
|
||||||
// RandInt generate random int between min and max, maybe min, not be max
|
// RandInt generate random int between min and max, maybe min, not be max
|
||||||
func RandInt(min, max int) int {
|
func RandInt(min, max int) int {
|
||||||
@@ -50,6 +44,41 @@ func RandBytes(length int) []byte {
|
|||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RandString generate random string
|
||||||
|
func RandString(length int) string {
|
||||||
|
return random(LETTERS, length)
|
||||||
|
}
|
||||||
|
|
||||||
|
// RandUpper generate a random upper case string
|
||||||
|
func RandUpper(length int) string {
|
||||||
|
return random(UPPER_LETTERS, length)
|
||||||
|
}
|
||||||
|
|
||||||
|
// RandLower generate a random lower case string
|
||||||
|
func RandLower(length int) string {
|
||||||
|
return random(LOWER_LETTERS, length)
|
||||||
|
}
|
||||||
|
|
||||||
|
// RandNumeral generate a random numeral string
|
||||||
|
func RandNumeral(length int) string {
|
||||||
|
return random(NUMERAL, length)
|
||||||
|
}
|
||||||
|
|
||||||
|
// RandNumeralOrLetter generate a random numeral or letter string
|
||||||
|
func RandNumeralOrLetter(length int) string {
|
||||||
|
return random(NUMERAL+LETTERS, length)
|
||||||
|
}
|
||||||
|
|
||||||
|
// random generate a random string based on given string range
|
||||||
|
func random(s string, length int) string {
|
||||||
|
b := make([]byte, length)
|
||||||
|
r := rand.New(rand.NewSource(time.Now().UnixNano()))
|
||||||
|
for i := range b {
|
||||||
|
b[i] = s[r.Int63()%int64(len(s))]
|
||||||
|
}
|
||||||
|
return string(b)
|
||||||
|
}
|
||||||
|
|
||||||
// UUIdV4 generate a random UUID of version 4 according to RFC 4122
|
// UUIdV4 generate a random UUID of version 4 according to RFC 4122
|
||||||
func UUIdV4() (string, error) {
|
func UUIdV4() (string, error) {
|
||||||
uuid := make([]byte, 16)
|
uuid := make([]byte, 16)
|
||||||
|
|||||||
@@ -19,6 +19,51 @@ func TestRandString(t *testing.T) {
|
|||||||
assert.Equal(true, reg.MatchString(randStr))
|
assert.Equal(true, reg.MatchString(randStr))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRandUpper(t *testing.T) {
|
||||||
|
pattern := `^[A-Z]+$`
|
||||||
|
reg := regexp.MustCompile(pattern)
|
||||||
|
|
||||||
|
randStr := RandUpper(6)
|
||||||
|
|
||||||
|
assert := internal.NewAssert(t, "TestRandUpper")
|
||||||
|
assert.Equal(6, len(randStr))
|
||||||
|
assert.Equal(true, reg.MatchString(randStr))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRandLower(t *testing.T) {
|
||||||
|
pattern := `^[a-z]+$`
|
||||||
|
reg := regexp.MustCompile(pattern)
|
||||||
|
|
||||||
|
randStr := RandLower(6)
|
||||||
|
|
||||||
|
assert := internal.NewAssert(t, "TestRandLower")
|
||||||
|
assert.Equal(6, len(randStr))
|
||||||
|
assert.Equal(true, reg.MatchString(randStr))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRandNumeral(t *testing.T) {
|
||||||
|
pattern := `^[0-9]+$`
|
||||||
|
reg := regexp.MustCompile(pattern)
|
||||||
|
|
||||||
|
randStr := RandNumeral(12)
|
||||||
|
|
||||||
|
assert := internal.NewAssert(t, "TestRandNumeral")
|
||||||
|
assert.Equal(12, len(randStr))
|
||||||
|
assert.Equal(true, reg.MatchString(randStr))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRandNumeralOrLetter(t *testing.T) {
|
||||||
|
pattern := `^[0-9a-zA-Z]+$`
|
||||||
|
reg := regexp.MustCompile(pattern)
|
||||||
|
|
||||||
|
randStr := RandNumeralOrLetter(10)
|
||||||
|
t.Log(randStr)
|
||||||
|
|
||||||
|
assert := internal.NewAssert(t, "TestRandNumeralOrLetter")
|
||||||
|
assert.Equal(10, len(randStr))
|
||||||
|
assert.Equal(true, reg.MatchString(randStr))
|
||||||
|
}
|
||||||
|
|
||||||
func TestRandInt(t *testing.T) {
|
func TestRandInt(t *testing.T) {
|
||||||
assert := internal.NewAssert(t, "TestRandInt")
|
assert := internal.NewAssert(t, "TestRandInt")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user