You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.0 KiB

package captcha
import (
"github.com/mojocn/base64Captcha"
)
var (
store = base64Captcha.DefaultMemStore
// sourceChinese = strings.Join(strings.Split("欢迎使用由深圳市摩枫网络科技有限公司基于阿帕奇开源协议的魔豆文库系统", ""), ",")
sourceString = "1234567890qwertyuioplkjhgfdsazxcvbnm"
CaptchaTypeOptions = "string:字符串\nmath:算术\ndigit:数字\naudio:语音"
)
const (
CaptchaTypeString = "string" // 字符串
CaptchaTypeDigit = "digit" // 数字
CaptchaTypeMath = "math" // 数学公式
CaptchaTypeChinese = "chinese" // 中文字符
CaptchaTypeAudio = "audio" // 音频
)
// GenerateCaptcha 生成验证码
func GenerateCaptcha(captchaType string, length, width, height int) (id, b64s string, err error) {
if width <= 0 {
width = 240
}
if height <= 0 {
height = 60
}
var driver base64Captcha.Driver
switch captchaType {
case "audio":
driver = &base64Captcha.DriverAudio{
Length: length,
Language: "zh",
}
case "string":
driver = &base64Captcha.DriverString{
Height: height,
Width: width,
Source: sourceString,
ShowLineOptions: base64Captcha.OptionShowHollowLine | base64Captcha.OptionShowSlimeLine | base64Captcha.OptionShowSineLine,
Length: length,
}
case "math":
driver = &base64Captcha.DriverMath{
Height: height,
Width: width,
NoiseCount: 0,
}
// case "chinese":
// driver = base64Captcha.NewDriverChinese(
// height,
// width,
// 0,
// 0,
// 4,
// sourceChinese,
// nil,
// nil,
// []string{"wqy-microhei.ttc"},
// ).ConvertFonts()
default:
driver = &base64Captcha.DriverDigit{
Height: height,
Width: width,
DotCount: 80,
MaxSkew: 1,
Length: length,
}
}
return base64Captcha.NewCaptcha(driver, store).Generate()
}
// VerifyCaptcha 验证验证码
func VerifyCaptcha(id string, captchaValue string, clear bool) (ok bool) {
return store.Verify(id, captchaValue, clear)
}