generate.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package random
  2. import (
  3. "fmt"
  4. "github.com/ente-io/museum/pkg/utils/auth"
  5. "github.com/ente-io/stacktrace"
  6. )
  7. func GenerateSixDigitOtp() (string, error) {
  8. n, err := auth.GenerateRandomInt(1_000_000)
  9. if err != nil {
  10. return "", stacktrace.Propagate(err, "")
  11. }
  12. return fmt.Sprintf("%06d", n), nil
  13. }
  14. // GenerateAlphaNumString returns AlphaNumeric code of given length
  15. // which exclude number 0 and letter O. The code always starts with an
  16. // alphabet
  17. func GenerateAlphaNumString(length int) (string, error) {
  18. // Define the alphabet and numbers to be used in the string.
  19. alphabet := "ABCDEFGHIJKLMNPQRSTUVWXYZ"
  20. // Define the alphabet and numbers to be used in the string.
  21. alphaNum := fmt.Sprintf("%s123456789", alphabet)
  22. // Allocate a byte slice with the desired length.
  23. result := make([]byte, length)
  24. // Generate the first letter as an alphabet.
  25. r0, err := auth.GenerateRandomInt(int64(len(alphabet)))
  26. if err != nil {
  27. return "", stacktrace.Propagate(err, "")
  28. }
  29. result[0] = alphabet[r0]
  30. // Generate the remaining characters as alphanumeric.
  31. for i := 1; i < length; i++ {
  32. ri, err := auth.GenerateRandomInt(int64(len(alphaNum)))
  33. if err != nil {
  34. return "", stacktrace.Propagate(err, "")
  35. }
  36. result[i] = alphaNum[ri]
  37. }
  38. return string(result), nil
  39. }