golang 生成验证码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package captcha

import (
	"github.com/gin-contrib/sessions"
	"github.com/gin-gonic/gin"
	log "github.com/sirupsen/logrus"
	"image/color"
	"image/png"
	"github.com/afocus/captcha"

)

//生成登录验证码
var code_cap *captcha.Captcha = captcha.New()

//生成验证码
func GenerateCode(c *gin.Context) {
	//code_cap
	// 设置字体
	err := code_cap.SetFont("./static/comic.ttf")
	if err != nil {
		log.Warnf("没有加载验证码 comic.ttf 文件,请放入 static 目录下")
	}
	code_cap.SetSize(128, 64)
	code_cap.SetDisturbance(captcha.MEDIUM)
	code_cap.SetFrontColor(color.RGBA{255, 255, 255, 255})
	code_cap.SetBkgColor(color.RGBA{255, 0, 0, 255}, color.RGBA{0, 0, 255, 255}, color.RGBA{0, 153, 0, 255})
	// 创建验证码 4个字符 captcha.NUM 字符模式数字类型
	// 返回验证码图像对象以及验证码字符串 后期可以对字符串进行对比 判断验证
	img, str := code_cap.Create(4, captcha.NUM)
	s := sessions.Default(c)
	s.Set("code", str)
	err = s.Save()
	if err!=nil {
		log.Errorf("验证码保存异常:= %v",err)
	}
	png.Encode(c.Writer, img)
}

func IsVerifyCodeOk(c *gin.Context,code string) bool{
	s := sessions.Default(c)

	str := s.Get("code")
	//if str == nil {
	//	return  false
	//}
	return code == str
}