Module random
This commit is contained in:
parent
34cb5b19ca
commit
d85d270274
|
@ -0,0 +1,58 @@
|
||||||
|
package random
|
||||||
|
|
||||||
|
import (
|
||||||
|
"math/rand"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
Digit = "0123456789"
|
||||||
|
LowserCase = "abcdefghijklmnopqrstuvwxyz"
|
||||||
|
UpperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
|
Letter = LowserCase + UpperCase
|
||||||
|
AlphaNum = Digit + Letter
|
||||||
|
Special = " !\"#$%&'()*+’-./:;<=>?@[\\]^_`{|}~"
|
||||||
|
All = AlphaNum + Special
|
||||||
|
)
|
||||||
|
|
||||||
|
func choice(charClass []string) string {
|
||||||
|
out := strings.Join(charClass, "")
|
||||||
|
if len(out) == 0 {
|
||||||
|
out = AlphaNum
|
||||||
|
}
|
||||||
|
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
func randomer() *rand.Rand {
|
||||||
|
return rand.New(rand.NewSource(time.Now().UnixNano()))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Randomize retourne un tableau de taille size
|
||||||
|
// et avec des valeurs aléatoires dans available.
|
||||||
|
func Randomize[T any](size int, available []T) (out []T) {
|
||||||
|
lc, r := len(available), randomer()
|
||||||
|
out = make([]T, size)
|
||||||
|
|
||||||
|
for i := range out {
|
||||||
|
out[i] = available[r.Intn(lc)]
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// BytesKey génère une clé de bytes.
|
||||||
|
func BytesKey(size int, charClass ...string) []byte {
|
||||||
|
return Randomize(size, []byte(choice(charClass)))
|
||||||
|
}
|
||||||
|
|
||||||
|
// RunesKey génère une clé de runes.
|
||||||
|
func RunesKey(size int, charClass ...string) []rune {
|
||||||
|
return Randomize(size, []rune(choice(charClass)))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Key génère une clé sous forme de string.
|
||||||
|
func Key(size int, charClass ...string) string {
|
||||||
|
return string(RunesKey(size, charClass...))
|
||||||
|
}
|
Loading…
Reference in New Issue