go生成验证码

go生成验证码
安安go生成验证码
一.两种验证码实现方法
Go 里比较常见的验证码实现方式主要有两种:
方案一:使用 github.com/dchest/captcha
步骤
引入依赖
1
go get github.com/dchest/captcha
生成验证码
- 调用
captcha.NewLen(6)生成验证码 ID(6 位长度)。 - 通过
captcha.WriteImage(w, id, width, height)输出 PNG 图片。
- 调用
校验验证码
- 使用
captcha.VerifyString(id, userInput)进行验证。
- 使用
前端展示
- 前端
<img src="/captcha/image?id=xxx">显示验证码图片。 - 提交时携带
id + code调用/captcha/verify接口验证。
- 前端
思路
dchest/captcha直接在后端生成 PNG 图片,前端<img>标签展示。- 适合传统 Web 项目,结构清晰。
- 优点:简单、稳定、广泛使用。
- 缺点:只能输出图片,不方便前端组件化或跨端(比如 App)。
方案二:使用 github.com/mojocn/base64Captcha
步骤
引入依赖
1
go get github.com/mojocn/base64Captcha
定义验证码驱动
可以选择不同类型:数字、字母、算术题、中文等。
例如:
1
driver := base64Captcha.NewDriverDigit(80, 240, 6, 0.7, 80)
生成验证码
- 使用
NewCaptcha(driver, store)创建对象。 - 调用
Generate()获取(id, base64Image, answer, err)。
- 使用
校验验证码
- 使用
store.Verify(id, userInput, clear)验证输入是否正确。
- 使用
前端展示
- 后端返回 JSON,包含
id和base64 图片字符串。 - 前端
<img src="data:image/png;base64,...">直接展示。
- 后端返回 JSON,包含
思路
base64Captcha返回的是 Base64 字符串,无需额外图片接口,前端能直接展示。- 适合前后端分离、移动端、小程序。
- 优点:支持多种验证码类型(算术、中文、音频)、更灵活。
- 缺点:比
dchest/captcha稍复杂,内存存储不适合分布式(要改成 Redis 存储)。
🔹 对比总结
| 特点 | dchest/captcha |
base64Captcha |
|---|---|---|
| 输出形式 | PNG 图片(URL 访问) | Base64 图片字符串(直接 JSON 返回) |
| 支持类型 | 数字/字母图片 | 数字、字母、算术题、中文、音频等 |
| 前端展示 | <img src="/captcha/image?id=xxx"> |
<img src="data:image/png;base64,..."> |
| 校验方式 | captcha.VerifyString(id, code) |
store.Verify(id, code, clear) |
| 存储 | 内存(可扩展) | 默认内存(可改 Redis) |
| 场景 | 传统 Web 表单 | 前后端分离、App、小程序 |
👉 总结一句话:
- **
dchest/captcha**:简单直接,生成图片验证码,适合传统 Web 项目。 - **
base64Captcha**:功能更强,返回 Base64,适合前后端分离和跨端应用。
流程图(从生成 → 前端展示 → 验证)对比
1 | ┌─────────────────────────┐ |
二.go生成验证码实现案例
🚀 Demo 1:使用 dchest/captcha
后端代码 (main.go)
1 | package main |
前端页面 (index.html)
1 |
|
🚀 Demo 2:使用 base64Captcha
后端代码 (main.go)
1 | package main |
前端页面 (index.html)
1 |
|
🔹 如何运行
建一个文件夹,比如
captcha-demo分别保存
main.go和index.html执行:
1
go run main.go
打开浏览器访问:
1
http://localhost:8080/
就能看到前端页面。
[up主专用,视频内嵌代码贴在这]

