randomstring.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package cookie
  2. // Functions for generating random strings
  3. import (
  4. "math/rand"
  5. )
  6. // RandomString generates a random string of a given length.
  7. func RandomString(length int) string {
  8. b := make([]byte, length)
  9. for i := 0; i < length; i++ {
  10. b[i] = byte(rand.Int63() & 0xff)
  11. }
  12. return string(b)
  13. }
  14. /*RandomHumanFriendlyString generates a random, but human-friendly, string of
  15. * the given length. It should be possible to read out loud and send in an email
  16. * without problems. The string alternates between vowels and consontants.
  17. *
  18. * Example output for length 10: ykyzexebub
  19. */
  20. func RandomHumanFriendlyString(length int) string {
  21. const (
  22. vowels = "aeiouy" // email+browsers didn't like "æøå" too much
  23. consonants = "bcdfghjklmnpqrstvwxz"
  24. )
  25. b := make([]byte, length)
  26. for i := 0; i < length; i++ {
  27. if i%2 == 0 {
  28. b[i] = vowels[rand.Intn(len(vowels))]
  29. } else {
  30. b[i] = consonants[rand.Intn(len(consonants))]
  31. }
  32. }
  33. return string(b)
  34. }
  35. // RandomCookieFriendlyString generates a random, but cookie-friendly, string of
  36. // the given length.
  37. func RandomCookieFriendlyString(length int) string {
  38. const allowed = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  39. b := make([]byte, length)
  40. for i := 0; i < length; i++ {
  41. b[i] = allowed[rand.Intn(len(allowed))]
  42. }
  43. return string(b)
  44. }