gob/random/random.go

59 lines
1.3 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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...))
}