开发者

Go语言简易图像验证码生成的实战案例

开发者 https://www.devze.com 2025-08-15 10:50 出处:网络 作者: 程序员爱钓鱼
目录一、功能目标二、安装依赖三、代码实现四、运行与测试1. 获取验证码2. 校验验证码五、注意事项六、总结在 Web 应用中android,验证码(CAPTCHA)常用于防止机器人批量提交请求,比如注册、登录、评论等功能。 本
目录
  • 一、功能目标
  • 二、安装依赖
  • 三、代码实现
  • 四、运行与测试
    • 1. 获取验证码
    • 2. 校验验证码
  • 五、注意事项
    • 六、总结

      在 Web 应用中android,验证码(CAPTCHA)常用于防止机器人批量提交请求,比如注册、登录、评论等功能。 本篇我们将使用 Go 语言和 Gin 框架,结合第三方库 github.com/mojocn/base64Captcha,快速实现一个简易图像验证码生成接口

      一、功能目标

      1. 提供一个生成验证码的 API,返回验证码图片(Base64 编码)和验证码 ID。
      2. 前端展示验证码图片,并在提交时携带验证码 ID 和用户输入。
      3. 提供一个校验验证码的 API。

      二、安装依赖

      首先安装 Gin 和 Base64Captcha:

      go get github.com/gin-gonic/gin
      go get github.com/mojocn/base64Captcha
      

      三、代码实现

      package main
      
      import (
      	"github.com/gin-gonic/gin"
      	"github.com/mojocn/base64Captcha"
      	"net/http"
      )
      
      // 验证码存储在内存中(也可以换成 Redis)
      var store = base64Captcha.DefaultMemStore
      
      // 生成验证码
      func generateCaptcha(c *gin.Context) {
      	driver := base64Captcha.NewDriverDigit(80, 240, 5, 0.7, 80) // 高度80, 宽度240, 5位数字
      	captcha := base64Captcha.NewCaptcha(driver, store)
      	id, b64s, err 编程客栈:= captcha.Generate()
      	if err != nil {
      		c.jsON(http.StatusInternalServerError, gin.H{"error": "验证码生成失败"})
      		return
      	}
      
      	c.JSON(http.StatusOK, gin.H{
      		"captcha_id":   id,
      		"captcha_image": b64s, // Base64 编码的图片
      	})
      }
      
      // 校验验证码
      func verifyCaptcha(c *gin.Context) {
      	var req struct {
      		ID    string `json:"id"`
      		Value string `json:"value"`
      	}
      	if err := c.ShouldBindJSON(&req); err != nil {
      		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
      		return
      	}
      
      	if store.Verify(req.ID, req.Value, true) { // true 表示验证成功后清除
      		c.JSON(http.StatusOK, gin.H{"message": "验证成功"})
      	} else {
      		c.JSON(http.StatusBadRequest, gin.H{"message": "验证码错误"})
      	}
      }
      
      func main() {
      	r := gin.Default()
      	r.GET("/captcha", generateCaptcha)
      	r.POST("/verify", verifyCaptcha)
      	r.Run(":8080")
      }
      

      四、运行与测试

      运行服务:

      go run main.go
      

      1. 获取验证码

      curl http://localhost:8080/captcha
      

      返回:

      {
        "captcha_id": "ZffX7Xr7EccGdS4b",
      编程客栈  "captcha_image": "data:image/png;base64,ivbORw0KGgoAAAANSUhE..."
      }
      

      前端可直接用 <img src="captcha_image" /> 渲染验证码。

      2. 校验验证码

      curl -X POST http://localhost:8080/verify \
        -H "Content-TypezJFBlF: application/json" \
        -d '{"id":"ZffX7Xr7EccGdS4b","value":"12345"}'
      

      五、注意事项

      1. 验证码存储

        • 本示例使用内存存储,适合单机开发环境。
        • 生产环境建议使用 Redis 等共享存储。
      2. 验证码类型 base64Captcha 支持数字、字母混合、中文等类型,可以根据业务需求选择不同 Driver

      3. 安全性

        • 不能把验证码 ID 暴露给爬虫(可配合 CSRF、限流等手段)。
        • 验证码要有有效期,防止重放攻击。

      六、总结

      使用 base64Captcha 结合 Gin,可以非常方便地生成和校验验证码。 本篇示例已经可以直接应用到注册、登录等防刷场景中。

      到此这篇关于Go语言简易图像验证码生成的实战案例的文章就介绍到这了,更多相关Go语言图像验证码生成内容请搜索编程客栈android(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

      0

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      关注公众号