go-captcha

go-captcha, 一个简洁易用、交互敌对、高安全性的点选行为验证码 Go 库 ,采纳 “验证码展现-采集用户行为-验证行为数据” 为流程,用户无需键盘手动输出,极大优化传统验证码用户体验不佳的问题,反对PC端及挪动端,带有与前端交互的DEMO。

  • Github:https://github.com/wenlng/go-captcha
  • Go实例代码:https://github.com/wenlng/go-captcha-example
  • Vue实例代码:https://github.com/wenlng/go-captcha-example-vue
  • React实例代码:https://github.com/wenlng/go-captcha-example-react
  • 在线演示:http://47.104.180.148:8081/go_captcha_demo
  • 作者网站: http://witkeycode.com

中国Go模块代理

  • GoProxy https://github.com/goproxy/go...
  • AliProxy: https://mirrors.aliyun.com/go...
  • OfficialProxy: https://goproxy.io/
  • ChinaProxy:https://goproxy.cn
  • Other:https://gocenter.io

设置Go模块的代理

  • Window

    $ set GO111MODULE=on$ set GOPROXY=https://goproxy.io,direct### The Golang 1.13+ can be executed directly$ go env -w GO111MODULE=on$ go env -w GOPROXY=https://goproxy.io,direct
  • Linux or Mac

    $ export GO111MODULE=on$ export GOPROXY=https://goproxy.io,direct### or$ echo "export GO111MODULE=on" >> ~/.profile$ echo "export GOPROXY=https://goproxy.cn,direct" >> ~/.profile$ source ~/.profile

依赖golang官网规范库

$ go get -u github.com/golang/freetype$ go get -u golang.org/x/crypto$ go get -u golang.org/x/image

装置模块

$ go get -u github.com/wenlng/go-captcha/captcha

引入模块

package mainimport "github.com/wenlng/go-captcha/captcha"func main(){   // ....}

疾速应用

package mainimport (    "fmt"    "os"    "github.com/wenlng/go-captcha/captcha")func main(){    // Captcha Single Instances    capt := captcha.GetCaptcha()        // 生成验证码    dots, b64, tb64, key, err := capt.Generate()    if err != nil {        panic(err)        return    }        // 主图base64    fmt.Println(len(b64))        // 缩略图base64    fmt.Println(len(tb64))        // 惟一key    fmt.Println(key)        // 文本地位验证数据    fmt.Println(dots)}

验证码实例

  • 创立实例或者获取单例模式的实例

    package mainimport (  "fmt"  "github.com/wenlng/go-captcha/captcha")func main(){  // 创立验证码实例  // capt := captcha.NewCaptcha()     // 单例模式的验证码实例  capt := captcha.GetCaptcha()  // ====================================================  fmt.Println(capt)}

验证码配置

你能够间接拷贝实例中 "__example/resources" 的图片和字体文件到你的我的项目中应用

文本相干的配置

package mainimport (    "fmt"    "github.com/wenlng/go-captcha/captcha")func main(){    capt := captcha.GetCaptcha()        // ====================================================    // Method: SetRangChars (chars []string) error;    // Desc: Set random char of captcha    // ====================================================    // Letter    //chars := "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"    //_ = capt.SetRangChars(strings.Split(chars, ""))        // Two Letter    //chars := []string{"HE","CA","WO","NE","HT","IE","PG","GI","CH","CO","DA"}    //_ = capt.SetRangChars(chars)    // Chinese Char    chars := []string{"你","好","呀","这","是","点","击","验","证","码","哟"}    _ = capt.SetRangChars(chars)    // ====================================================    fmt.Println(capt)}

图片相干的配置

package mainimport (    "fmt"    "os"    "github.com/wenlng/go-captcha/captcha")func main(){    capt := captcha.GetCaptcha()        path, _ := os.Getwd()        // ====================================================    // Method: SetBackground(color []string);    // Desc: 设置验证码背景图    // ====================================================    capt.SetBackground([]string{        path + "/__example/resources/images/1.jpg",        path + "/__example/resources/images/2.jpg",    })    // ====================================================    // Method: SetFont(fonts []string);    // Desc: 设置验证码字体    // ====================================================    capt.SetFont([]string{        path + "/__example/resources/fonts/fzshengsksjw_cu.ttf",        path + "/__example/resources/fonts/fzssksxl.ttf",    })    // ====================================================    // Method: SetImageSize(size *Size);    // Desc: 设置验证码主图的尺寸    // ====================================================    capt.SetImageSize(&captcha.Size{300, 300})    // ====================================================    // Method: SetThumbSize(size *Size);    // Desc: 设置验证码缩略图的尺寸    // ====================================================    capt.SetThumbSize(&captcha.Size{150, 40})    // ====================================================    // Method: SetFontDPI(val int);    // Desc: 设置验证码字体的随机DPI,最好是72    // ====================================================    capt.SetFontDPI(72)    // ====================================================    // Method: SetTextRangLen(val *captcha.RangeVal);    // Desc: 设置验证码文本总和的随机长度范畴    // ====================================================    capt.SetTextRangLen(&captcha.RangeVal{6, 7})    // ====================================================    // Method: SetRangFontSize(val *captcha.RangeVal);    // Desc: 设置验证码文本的随机大小    // ====================================================    capt.SetRangFontSize(&captcha.RangeVal{32, 42})    // ====================================================    // Method: SetRangCheckTextLen(val *captcha.RangeVal);    // Desc:设置验证码校验文本的随机长度的范畴    // ====================================================    capt.SetRangCheckTextLen(&captcha.RangeVal{2, 4})    // ====================================================    // Method: SetRangCheckFontSize(val *captcha.RangeVal);    // Desc:设置验证码文本的随机大小    // ====================================================    capt.SetRangCheckFontSize(&captcha.RangeVal{24, 30})        // ====================================================    // Method: SetTextRangFontColors(colors []string);    // Desc: 设置验证码文本的随机十六进制色彩    // ====================================================    capt.SetTextRangFontColors([]string{        "#1d3f84",        "#3a6a1e",    })     // ====================================================    // Method: SetThumbTextRangFontColors(colors []string);    // Desc: Set random hex color of captcha text    // ====================================================    capt.SetThumbTextRangFontColors([]string{        "#1d3f84",        "#3a6a1e",    })    // ====================================================    // Method: SetImageFontAlpha(val float64);    // Desc:设置验证码字体的透明度    // ====================================================    capt.SetImageFontAlpha(0.5)    // ====================================================    // Method: SetTextRangAnglePos(pos []*RangeVal);    // Desc:设置验证码文本的角度    // ====================================================    capt.SetTextRangAnglePos([]*captcha.RangeVal{        {1, 15},        {15, 30},        {30, 45},        {315, 330},        {330, 345},        {345, 359},    })    // ====================================================    // Method: SetImageFontDistort(val int);    // Desc:设置验证码字体扭曲水平    // ====================================================    capt.SetImageFontDistort(captcha.DistortLevel2)      // ====================================================    // Method: SetThumbBgColors(colors []string);    // Desc: 设置缩略验证码背景的随机十六进制色彩    // ====================================================    capt.SetThumbBgColors([]string{        "#1d3f84",        "#3a6a1e",    })    // ====================================================    // Method: SetThumbBackground(colors []string);    // Desc:设置缩略验证码随机图像背景    // ====================================================    capt.SetThumbBackground([]string{        path + "/__example/resources/images/r1.jpg",        path + "/__example/resources/images/r2.jpg",    })    // ====================================================    // Method: SetThumbBgDistort(val int);    // Desc:设置缩略验证码背景的扭曲水平    // ====================================================    capt.SetThumbBgDistort(captcha.DistortLevel2)    // ====================================================    // Method: SetThumbFontDistort(val int);    // Desc:设置缩略验证码字体的扭曲水平    // ====================================================    capt.SetThumbFontDistort(captcha.DistortLevel2)    // ====================================================    // Method: SetThumbBgCirclesNum(val int);    // Desc:设置验证码背景的圈点数    // ====================================================    capt.SetThumbBgCirclesNum(20)    // ====================================================    // Method: SetThumbBgSlimLineNum(val int);    // Desc:设置验证码背景的线条数    // ====================================================    capt.SetThumbBgSlimLineNum(3)        // ====================================================    fmt.Println(capt)}

生成验证码数据

package mainimport (    "fmt"    "os"    "github.com/wenlng/go-captcha/captcha")func main(){    capt := captcha.GetCaptcha()            // generate ...    // ====================================================    // dots:  文本字符的地位信息    //  - {"0":{"Index":0,"Dx":198,"Dy":77,"Size":41,"Width":54,"Height":41,"Text":"SH","Angle":6,"Color":"#885500"} ...}    // imageBase64:  Verify the clicked image    // thumbImageBase64: Thumb displayed    // key: Only Key    // ====================================================    dots, imageBase64, thumbImageBase64, key, err := capt.Generate()    if err != nil {        panic(err)        return    }    fmt.Println(len(imageBase64))    fmt.Println(len(thumbImageBase64))    fmt.Println(key)    fmt.Println(dots)}

在 __example 中的前端在数据申请或提交验证数据时的格局:

// Example: 获取验证码数据API = http://....../captcha/captcha-data    Respose Data = {        "code": 0,        "image_base64": "...",        "thumb_base64": "...",        "captcha_key": "...",    }     // Example: 提交校验数据 API = http://....../captcha/check-data    Request Data = {        dots: "x1,y1,x2,y2,...."        key: "......"    }

<br/>