rand.go 563 B

12345678910111213141516171819202122232425262728293031
  1. package util
  2. import (
  3. "crypto/rand"
  4. "math/big"
  5. )
  6. var (
  7. runes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890")
  8. runes_length = len(runes)
  9. )
  10. func NewRandID(n int) (string, error) {
  11. data := make([]rune, n)
  12. for i := range data {
  13. num, err := rand.Int(rand.Reader, big.NewInt(int64(runes_length)))
  14. if err != nil {
  15. return "", err
  16. }
  17. data[i] = runes[num.Int64()]
  18. }
  19. return string(data), nil
  20. }
  21. func NewSessionID() (string, error) {
  22. return NewRandID(24)
  23. }
  24. func NewCSRFToken() (string, error) {
  25. return NewRandID(24)
  26. }