base64Captcha

介绍

可以生成多种验证码的工具,通常用于人机验证环节,并且干扰度以及难度都是可以通过配置可控的。

  • 数字验证码
    image.png
  • 算术(加减乘除)验证码
    image.png
  • 语音验证码(这个很厉害,还支持国际化)
    image.png
    下载.wav
    使用
    关于使用方法github里很详细,这里再简单啰嗦下。
    1. go get -u github.com/mojocn/base64Captcha
    2. cd $GOPATH/src/github.com/mojocn/base64Captcha/_examples
    3. go run main.go
    4. Go to http://localhost:8777
    我们就可以看到
    image.png

小症结
  1. 通过源码我们看到它生成的验证码保存在内部的memoryStore,在分布式环境下无法实现数据共享,假设我们现在想把结果保存在redis。
  2. 如果接口以base64返回验证码,这将大出1/3的体积,我们直降将二进制数据流返回前端,这里采用gin的web框架,其他大同小异。

它也带了demo来解决以上问题 $GOPATH/src/github.com/mojocn/base64Captcha/_examples_redis
我们这里也给出一个demo

  1. package handlers
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "github.com/mojocn/base64Captcha"
  5. )
  6. func captcha(c *gin.Context) {
  7. conf := base64Captcha.ConfigCharacter{
  8. Height: 55,
  9. Width: 240,
  10. IsShowHollowLine: true,
  11. IsShowNoiseDot: true,
  12. IsShowNoiseText: false,
  13. IsShowSineLine: false,
  14. IsShowSlimeLine: true,
  15. IsUseSimpleFont: true,
  16. Mode: 2,
  17. BgColor: &color.RGBA{
  18. R:45,
  19. G:95,
  20. B:70,
  21. A:105,
  22. },
  23. }
  24. char := base64Captcha.EngineCharCreate(conf)
  25. var captchaInstance base64Captcha.CaptchaInterface = char
  26. binaryData := captchaInstance.BinaryEncoding() // 二进制
  27. // redisStore codeing
  28. //fmt.Println("问题:",char.Content,"答案:",char.VerifyValue)
  29. c.Data(200,"image/GIF",binaryData)
  30. }

Go Captcha

介绍

点击图片的验证码
image.png