29 lines
490 B
Go
29 lines
490 B
Go
package captcha
|
|
|
|
import (
|
|
"fmt"
|
|
"math"
|
|
"math/rand/v2"
|
|
"time"
|
|
)
|
|
|
|
type Generator interface {
|
|
Generate() string
|
|
}
|
|
|
|
type stringCaptchaGenerator struct {
|
|
length int
|
|
}
|
|
|
|
func NewStringCaptchaGenerator(length int) Generator {
|
|
return &stringCaptchaGenerator{
|
|
length: length,
|
|
}
|
|
}
|
|
|
|
func (s *stringCaptchaGenerator) Generate() string {
|
|
n := math.Pow(10, float64(s.length))
|
|
r := rand.New(rand.NewPCG(uint64(time.Now().UnixNano()), 2)).IntN(int(n))
|
|
return fmt.Sprintf("%0*d", s.length, r)
|
|
}
|