Skip to content

Instantly share code, notes, and snippets.

@flydo
Last active September 28, 2019 09:59
Show Gist options
  • Save flydo/27f36043c21addeecdeca9225a6b0e18 to your computer and use it in GitHub Desktop.
Save flydo/27f36043c21addeecdeca9225a6b0e18 to your computer and use it in GitHub Desktop.
package main
import (
"crypto/md5"
"crypto/sha1"
"encoding/hex"
"math/rand"
"strconv"
"time"
)
// RandomString Random String
// flag: type of random string. basic, alpha, alnum, numeric, nozero, md5 and sha1
// length: string length ("alnum", "numeric", "nozero", "alpha", "hex")
func RandomString(flag string, length int) string {
var pool string
switch flag {
case "basic":
seededRand := rand.New(rand.NewSource(time.Now().UnixNano()))
return strconv.Itoa(seededRand.Int())
case "alnum", "numeric", "nozero", "alpha", "hex":
switch flag {
case "alpha":
pool = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
break
case "alnum":
pool = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
break
case "numeric":
pool = "0123456789"
break
case "nozero":
pool = "123456789"
break
case "hex":
pool = "0123456789abcdefABCDEF"
break
}
var result []byte
bytes := []byte(pool)
r := rand.New(rand.NewSource(time.Now().UnixNano()))
for i := 0; i < length; i++ {
result = append(result, bytes[r.Intn(len(bytes))])
}
return string(result)
case "md5":
seededRand := rand.New(rand.NewSource(time.Now().UnixNano()))
h := md5.New()
h.Write([]byte(strconv.Itoa(seededRand.Int())))
return hex.EncodeToString(h.Sum(nil))
case "sha1":
seededRand := rand.New(rand.NewSource(time.Now().UnixNano()))
h := sha1.New()
h.Write([]byte(strconv.Itoa(seededRand.Int())))
return hex.EncodeToString(h.Sum(nil))
}
return ""
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment