Contents

go第三方库-github.com.mojocn.base64Captcha

godoc

作者 EricZhou 博客

github官网

被引用的captcha库github官网

这个包使用base64编码生成的Captcha发送给客户端,之后获取客户端的输入根据id查找答案进行匹配。

不过这个库引用的captcha库说明了这个库可以被先进的OCR识别,所以生产环境还是算了,可以拿来装逼

这个库的关键是使用store接口和driver接口调用base64Captcha.NewCaptcha函数生成一个验证码生成对象Captcha,然后通过Captcha的方法生成base64,store的方法验证字符串

store接口

store接口用于存放生成id到base64字符串的映射。base64Captcha.DefaultMemStore为内建stor只能用于单机e。集群部署可以将redis的操作封装到store接口。

store对象通常作为全局变量,因为需要它来进行验证

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
type Store interface {
	// Set sets the digits for the captcha id.
	Set(id string, value string)

	// Get returns stored digits for the captcha id. Clear indicates
	// whether the captcha must be deleted from the store.
	Get(id string, clear bool) string
	
    //Verify captcha's answer directly
	Verify(id, answer string, clear bool) bool
}

使用内建对象:

1
var store = base64Captcha.DefaultMemStore

driver接口

driver接口用于生成图片和验证答案

1
2
3
4
5
6
7
// Driver captcha interface for captcha engine to to write staff
type Driver interface {
	//DrawCaptcha draws binary item
	DrawCaptcha(content string) (item Item, err error)
	//GenerateIdQuestionAnswer creates rand id, content and answer
	GenerateIdQuestionAnswer() (id, q, a string)
}

通常这个我们使用自带的driver,都是结构体可以直接用结构体字面量

  1. base64Captcha.DriverDigit
  2. base64Captcha.DriverString
  3. base64Captcha.DriverChinese
  4. base64Captcha.DriverMath

Captcha对象

1
2
3
4
5
6
7
8
//生成captcha对象
c := base64Captcha.NewCaptcha(driver, store)

//生成图片
id, bs64, err := c.Generate()

//验证
store.Verify(id int, VerifyValue string, default bool)
 |