Golang 图像验证码
https://github.com/mojocn/base64Captcha
小图片使用base64响应对于RESTful服务来说更便捷
安装golang包
1 | go get -u github.com /mojocn/base64Captcha |
对于国内用户 go get golang.org/x/image
失败的情况下:
- go version > 1.11
- set env
GOPROXY=https://goproxy.io
创建 图像验证码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | package main import ( "fmt" "github.com/mojocn/base64Captcha" ) func CreateCaptcha() { //config struct for digits //数字验证码配置 var configD = base64Captcha.ConfigDigit{ Height: 80, Width: 240, MaxSkew: 0.7, DotCount: 80, CaptchaLen: 5, } //config struct for audio //声音验证码配置 var configA = base64Captcha.ConfigAudio{CaptchaLen: 6, Language: "zh" } //config struct for Character //字符,公式,验证码配置 var configC = base64Captcha.ConfigCharacter{ Height: 60, Width: 240, //const CaptchaModeNumber:数字,CaptchaModeAlphabet:字母,CaptchaModeArithmetic:算术,CaptchaModeNumberAlphabet:数字字母混合. Mode: base64Captcha.CaptchaModeNumber, ComplexOfNoiseText: base64Captcha.CaptchaComplexLower, ComplexOfNoiseDot: base64Captcha.CaptchaComplexLower, IsShowHollowLine: false, IsShowNoiseDot: false, IsShowNoiseText: false, IsShowSlimeLine: false, IsShowSineLine: false, CaptchaLen: 6, } //创建声音验证码 //GenerateCaptcha 第一个参数为空字符串,包会自动在服务器一个随机种子给你产生随机uiid. idKeyA, capA := base64Captcha.GenerateCaptcha( "" , configA) //以base64编码 base64stringA := base64Captcha.CaptchaWriteToBase64Encoding(capA) //创建字符公式验证码. //GenerateCaptcha 第一个参数为空字符串,包会自动在服务器一个随机种子给你产生随机uiid. idKeyC, capC := base64Captcha.GenerateCaptcha( "" , configC) //以base64编码 base64stringC := base64Captcha.CaptchaWriteToBase64Encoding(capC) //创建数字验证码. //GenerateCaptcha 第一个参数为空字符串,包会自动在服务器一个随机种子给你产生随机uiid. idKeyD, capD := base64Captcha.GenerateCaptcha( "" , configD) //以base64编码 base64stringD := base64Captcha.CaptchaWriteToBase64Encoding(capD) fmt.Println(idKeyA, base64stringA, " " ) fmt.Println(idKeyC, base64stringC, " " ) fmt.Println(idKeyD, base64stringD, " " ) } func verfiyCaptcha(idkey, verifyValue string) { verifyResult := base64Captcha.VerifyCaptcha(idkey, verifyValue) if verifyResult { //success } else { //fail } } func main() { CreateCaptcha() } |
验证 图像验证码
1 2 3 4 5 6 7 8 | func verfiyCaptcha(idkey,verifyValue string){ verifyResult := base64Captcha.VerifyCaptcha(idkey, verifyValue) if verifyResult { //success } else { //fail } } |
使用golang搭建API服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | // example of HTTP server that uses the captcha package. package main import ( "encoding/json" "fmt" "github.com/mojocn/base64Captcha" "log" "net/http" ) //ConfigJsonBody json request body. type ConfigJsonBody struct { Id string CaptchaType string VerifyValue string ConfigAudio base64Captcha.ConfigAudio ConfigCharacter base64Captcha.ConfigCharacter ConfigDigit base64Captcha.ConfigDigit } // base64Captcha create http handler func generateCaptchaHandler(w http.ResponseWriter, r *http.Request) { //parse request parameters //接收客户端发送来的请求参数 decoder := json.NewDecoder(r.Body) var postParameters ConfigJsonBody err := decoder.Decode(&postParameters) if err != nil { log.Println(err) } defer r.Body.Close() //create base64 encoding captcha var config interface {} switch postParameters.CaptchaType { case "audio" : config = postParameters.ConfigAudio case "character" : config = postParameters.ConfigCharacter default : config = postParameters.ConfigDigit } captchaId, captcaInterfaceInstance := base64Captcha.GenerateCaptcha(postParameters.Id, config) base64blob := base64Captcha.CaptchaWriteToBase64Encoding(captcaInterfaceInstance) //or you can just write the captcha content to the httpResponseWriter. //before you put the captchaId into the response COOKIE. //captcaInterfaceInstance.WriteTo(w) //set json response w.Header().Set( "Content-Type" , "application/json; charset=utf-8" ) body := map [string] interface {}{ "code" : 1, "data" : base64blob, "captchaId" : captchaId, "msg" : "success" } json.NewEncoder(w).Encode(body) } // base64Captcha verify http handler func captchaVerifyHandle(w http.ResponseWriter, r *http.Request) { //parse request parameters //接收客户端发送来的请求参数 decoder := json.NewDecoder(r.Body) var postParameters ConfigJsonBody err := decoder.Decode(&postParameters) if err != nil { log.Println(err) } defer r.Body.Close() //verify the captcha //比较图像验证码 verifyResult := base64Captcha.VerifyCaptcha(postParameters.Id, postParameters.VerifyValue) //set json response //设置json响应 w.Header().Set( "Content-Type" , "application/json; charset=utf-8" ) body := map [string] interface {}{ "code" : "error" , "data" : "验证失败" , "msg" : "captcha failed" } if verifyResult { body = map [string] interface {}{ "code" : "success" , "data" : "验证通过" , "msg" : "captcha verified" } } json.NewEncoder(w).Encode(body) } //start a net/http server //启动golang net/http 服务器 func main() { //serve Vuejs+ElementUI+Axios Web Application http.Handle( "/" , http.FileServer(http.Dir( "./static" ))) //api for create captcha http.HandleFunc( "/api/getCaptcha" , generateCaptchaHandler) //api for verify captcha http.HandleFunc( "/api/verifyCaptcha" , captchaVerifyHandle) fmt.Println( "Server is at localhost:3333" ) if err := http.ListenAndServe( "localhost:3333" , nil); err != nil { log.Fatal(err) } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下