picgo/corelib/captcha/captcha.go

69 lines
1.7 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package captcha
import (
"image"
"os"
"path/filepath"
"picgo/configs"
"picgo/corelib"
"strings"
)
// GenerateCaptcha 图形验证码
func GenerateCaptcha(cid string) (img *image.RGBA, err error) {
// 字体路径
dir, err := os.Getwd()
if err != nil {
return
}
var fontPath = filepath.Join(dir, "corelib", "captcha", "fonts")
// 随机字体
var fontNames = []string{"DENNEthree-dee", "3Dumb"}
fontName := RandChooseOne(fontNames)
// 随机模式
var modes = []int{0, 1}
mode := RandChooseOne(modes)
// 生成图片验证码
captchaLen := configs.Settings.Captcha.Length
w := configs.Settings.Captcha.Width
h := configs.Settings.Captcha.Hight
cp := NewCaptcha(w, h, captchaLen)
cp.SetFontPath(fontPath) //指定字体目录
cp.SetFontName(fontName) //指定字体名字
cp.SetMode(mode) //1设置为简单的数学算术运算公式 其他为普通字符串
code, img := cp.OutPut()
// 备注code 存储到redis并在使用时取出验证
corelib.Logger.Infoln("图片验证码: ", code)
// 配置文件中获取过期时间
exp := configs.Settings.Captcha.Expire
// 缓存生成的验证码
if err = SetCode(cid, code, int64(exp)); err != nil {
return
}
//core.Logger.Infoln("验证结果:", Verify(cid, code))
return
}
// Verify 验证
func Verify(id string, code string) (ok bool) {
ok = false
var (
err error
redisCode string
)
// 验证字符串是否合法
if code == "" || !corelib.IsCaptcha(code) {
return
}
code = strings.ToLower(code)
// redis取验证码
if redisCode, err = GetCode(id); err != nil {
return
}
// redis存储验证码和用户输入验证码对比
if strings.ToLower(redisCode) == strings.ToLower(code) {
return true
}
return
}