diff --git a/backend/verifyCode/0 b/backend/verifyCode/0 new file mode 100644 index 0000000..e69de29 diff --git a/backend/verifyCode/cmd/verifyCode/main.go b/backend/verifyCode/cmd/verifyCode/main.go index 4830be6..b3aa721 100644 --- a/backend/verifyCode/cmd/verifyCode/main.go +++ b/backend/verifyCode/cmd/verifyCode/main.go @@ -2,7 +2,10 @@ package main import ( "flag" + "math/rand" + "os" + "time" "verifyCode/internal/conf" @@ -79,7 +82,7 @@ func main() { panic(err) } defer cleanup() - + rand.Seed(time.Now().UnixNano()) // start and wait for stop signal if err := app.Run(); err != nil { panic(err) diff --git a/backend/verifyCode/go.sum b/backend/verifyCode/go.sum index 8f9d6f8..0a4af2d 100644 --- a/backend/verifyCode/go.sum +++ b/backend/verifyCode/go.sum @@ -33,7 +33,6 @@ github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6 github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/subcommands v1.2.0 h1:vWQspBTo2nEqTUFita5/KeEWlUL8kQObDFbub/EN9oE= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -71,7 +70,6 @@ golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1m golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= @@ -121,7 +119,6 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= -golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 h1:7whR9kGa5LUwFtpLm2ArCEejtnxlGeLbAyjFY8sGNFw= diff --git a/backend/verifyCode/idxBits b/backend/verifyCode/idxBits new file mode 100644 index 0000000..e69de29 diff --git a/backend/verifyCode/internal/service/verifycode.go b/backend/verifyCode/internal/service/verifycode.go index b85f068..b1d68bc 100644 --- a/backend/verifyCode/internal/service/verifycode.go +++ b/backend/verifyCode/internal/service/verifycode.go @@ -2,7 +2,8 @@ package service import ( "context" - + "math/rand" + "strings" pb "verifyCode/api/verifyCode" ) @@ -16,6 +17,52 @@ func NewVerifyCodeService() *VerifyCodeService { func (s *VerifyCodeService) GetVerifyCode(ctx context.Context, req *pb.GetVerifyCodeRequest) (*pb.GetVerifyCodeReply, error) { return &pb.GetVerifyCodeReply{ - Code: "MSb", + Code: RandCode(int(req.Length), req.Type), }, nil } + +// 随机数简单生成 RandCode(int(req.Length), req.Type) +func RandCode(l int, t pb.TYPE) string { + switch t { + case pb.TYPE_DEFAULT: + fallthrough + case pb.TYPE_DIGIT: + return randCode("123456789", 4, l) + case pb.TYPE_MIXED: + return randCode("abcdefghijklmnopqrstuvwxyz", 5, l) + case pb.TYPE_LETTER: + return randCode("123456789abcdefghijklmnopqrstuvwxyz", 6, l) + } + return "" +} +func randCode(chars string, idxBits, l int) string { + // 形成掩码 + idxMask := 1<= 0; { + // 随机缓存不足,重新生成 + if remain == 0 { + cache, remain = rand.Int63(), idxMax + } + // 利用掩码生成随机索引,有效索引为小于字符集合长度 + if idx := int(cache & int64(idxMask)); idx < len(chars) { + sb.WriteByte(chars[idx]) + i-- + } + // 利用下一组随机数位 + cache >>= idxBits + remain-- + } + + return sb.String() +}