package main
import (
"bytes"
r "crypto/rand"
"fmt"
"math/rand"
"strconv"
"strings"
"testing"
"time"
)
/**
*生成随机字符
**/
func RandString(length int) string {
rand.Seed(time.Now().UnixNano())
rs := make([]string, length)
for start := 0; start < length; start++ {
t := rand.Intn(3)
if t == 0 {
rs = append(rs, strconv.Itoa(rand.Intn(10)))
} else if t == 1 {
rs = append(rs, string(rand.Intn(26)+65))
} else {
rs = append(rs, string(rand.Intn(26)+97))
}
}
return strings.Join(rs, "")
}
func Rs2(length int) []byte {
r := rand.New(rand.NewSource(time.Now().UnixNano()))
buffer := bytes.NewBufferString("")
for i := 0; i < length; i++ {
isLetter := r.Intn(2)
if isLetter > 0 {
letter := r.Intn(52)
if letter < 26 {
letter += 97
} else {
letter += 65 - 26
}
buffer.WriteString(string(letter))
//buffer.WriteString(fmt.Sprintf("%c", letter))
} else {
buffer.WriteString(strconv.Itoa(r.Intn(10)))
}
}
return buffer.Bytes()
}
func RandomCreateBytes(n int, alphabets ...byte) []byte {
const alphanum = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
var bytes = make([]byte, n)
var randby bool
if num, err := r.Read(bytes); num != n || err != nil {
rand.Seed(time.Now().UnixNano())
randby = true
}
for i, b := range bytes {
if len(alphabets) == 0 {
if randby {
bytes[i] = alphanum[rand.Intn(len(alphanum))]
} else {
bytes[i] = alphanum[b%byte(len(alphanum))]
}
} else {
if randby {
bytes[i] = alphabets[rand.Intn(len(alphabets))]
} else {
bytes[i] = alphabets[b%byte(len(alphabets))]
}
}
}
return bytes
}
func Test_Randstring(t *testing.T) {
fmt.Println(string(Rs2(10)))
st1 := time.Now().UnixNano()
for i := 0; i < 1000; i++ {
Rs2(10)
}
et1 := time.Now().UnixNano()
st2 := time.Now().UnixNano()
var k []byte
for i := 0; i < 1000; i++ {
k = RandomCreateBytes(10)
}
et2 := time.Now().UnixNano()
st := time.Now().UnixNano()
s := ""
for i := 0; i < 1000; i++ {
s = RandString(10)
}
et := time.Now().UnixNano()
fmt.Println(string(s), string(k), st, et, et1-st1, et2-st2, et-st)
}