# cap **Repository Path**: zmhfly8/cap ## Basic Information - **Project Name**: cap - **Description**: 验证码库 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-28 - **Last Updated**: 2025-10-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 验证码生成库 (CAP) 一个功能完整、易于使用的Go语言验证码生成库,支持多种验证码类型、存储方式和自定义选项。 ## 功能特性 - **多种验证码类型** - 纯数字验证码 - 数字字母组合验证码 - 数学表达式验证码 - **灵活的存储选项** - 基于内存的存储(默认) - 基于Redis的存储 - 支持自定义存储实现 - **高度可定制** - 自定义验证码尺寸、字体大小、颜色 - 自定义验证码过期时间 - 支持添加干扰线和噪点 - 支持多种字体选择 - **HTTP集成** - 内置HTTP服务支持 - 支持验证码图片直接在Web应用中使用 ## 项目结构 ``` ├── captcha.go # 验证码核心生成逻辑 ├── captcha_manager.go # 验证码管理器,提供高级功能 ├── fontloader.go # 字体加载器 ├── storage.go # 验证码存储实现(内存和Redis) ├── fonts/ # 默认字体目录 │ └── Roboto/ # Roboto字体文件 ├── example/ # 使用示例 └── test/ # 测试文件 ``` ## 核心组件 ### 1. Captcha - 核心验证码生成器,负责创建和绘制验证码图像 - 支持设置验证码属性、生成图像、保存到文件、转换为Base64 ### 2. CaptchaManager - 提供高级API,封装验证码的生成、存储和验证过程 - 支持不同类型的验证码生成和验证 - 集成了存储管理功能 ### 3. FontLoader - 负责字体加载和管理 - 支持从多个目录加载字体 - 内置字体缓存,提高性能 ### 4. CaptchaStorage接口及实现 - MemoryStorage: 基于内存的验证码存储,支持过期时间 - RedisStorage: 基于Redis的验证码存储,适合分布式应用 ## 安装 ```bash go get gitee.com/zmhfly8/cap ``` ## 快速开始 ### 基本使用示例 ```go package main import ( "fmt" "os" "gitee.com/zmhfly8/cap" ) func main() { // 创建验证码管理器 manager := cap.NewCaptchaManager() manager.SetCaptchaOptions(240, 80, 40) // 设置宽度、高度、字体大小 // 生成验证码 result, err := manager.GenerateAlphanumericCaptcha(6) if err != nil { fmt.Printf("生成验证码失败: %v\n", err) return } fmt.Printf("验证码ID: %s\n", result.ID) fmt.Printf("验证码文本: %s\n", result.Text) } ``` ## 完整示例程序 在example目录下提供了完整的示例程序,展示了如何生成、保存、验证和在Web应用中使用验证码。 ## API参考 ### CaptchaManager 方法 #### 创建管理器 - `NewCaptchaManager()`: 创建默认内存存储的验证码管理器 - `NewCaptchaManagerWithRedis(options RedisOptions)`: 创建Redis存储的验证码管理器 #### 验证码生成 - `GenerateNumericCaptcha(length int) (CaptchaResult, error)`: 生成纯数字验证码 - `GenerateAlphanumericCaptcha(length int) (CaptchaResult, error)`: 生成数字字母组合验证码 - `GenerateMathExpressionCaptcha() (CaptchaResult, error)`: 生成数学表达式验证码 #### 验证码验证 - `VerifyCaptcha(id, userInput string) bool`: 验证用户输入的验证码是否正确 - `RemoveCaptcha(id string)`: 从存储中移除验证码 #### 验证码设置 - `SetCaptchaOptions(width, height int, fontSize float64)`: 设置验证码尺寸和字体大小 - `SetColors(bgR, bgG, bgB, bgA, textR, textG, textB, textA uint8)`: 设置验证码颜色 - `SetExpiration(duration time.Duration)`: 设置验证码过期时间 - `SetFontDir(fontDir string)`: 设置字体目录 #### 输出和显示 - `GetCaptchaBase64(id string) (string, error)`: 获取验证码的Base64编码 - `SaveCaptchaImage(id, text, outputDir string) (string, error)`: 保存验证码图片到指定目录,返回文件路径 - `ServeCaptchaImage(w http.ResponseWriter, r *http.Request, id string) error`: 提供验证码图片的HTTP服务 ## 注意事项 1. 请确保提供有效的字体目录,否则库将使用默认字体 2. 使用Redis存储时,请确保Redis服务器可访问 3. 验证码过期后将自动从存储中移除 4. 验证成功后建议立即移除验证码,防止重复使用 ## License MIT License