golang 图像验证码

为什么base64图片 for RESTful 服务

  Data URIs 支持大部分浏览器,IE8之后也支持.小图片使用base64响应对于RESTful服务来说更便捷

安装golang包

go get -u github.com/mojocn/base64Captcha

对于中国大陆Gopher go get golang.org/x/image 失败解决方案:

  mkdir -p $GOPATH/src/golang.org/xcd $GOPATH/src/golang.org/xgit clone https://github.com/golang/image.git

创建图像验证码

import "github.com/mojocn/base64Captcha"
func demoCodeCaptchaCreate() {//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, "\n")fmt.Println(idKeyC, base64stringC, "\n")fmt.Println(idKeyD, base64stringD, "\n")
}

验证图像验证码

import "github.com/mojocn/base64Captcha"
func verfiyCaptcha(idkey,verifyValue string){verifyResult := base64Captcha.VerifyCaptcha(idkey, verifyValue)if verifyResult {//success} else {//fail}
}

使用golang搭建API服务 main.go

// example of HTTP server that uses the captcha package.
package mainimport ("encoding/json""fmt""github.com/mojocn/base64Captcha""log""net/http"
)//ConfigJsonBody json request body.
type ConfigJsonBody struct {Id              stringCaptchaType     stringVerifyValue     stringConfigAudio     base64Captcha.ConfigAudioConfigCharacter base64Captcha.ConfigCharacterConfigDigit     base64Captcha.ConfigDigit
}// base64Captcha create http handler
func generateCaptchaHandler(w http.ResponseWriter, r *http.Request) {//parse request parameters//接收客户端发送来的请求参数decoder := json.NewDecoder(r.Body)var postParameters ConfigJsonBodyerr := decoder.Decode(&postParameters)if err != nil {log.Println(err)}defer r.Body.Close()//create base64 encoding captcha//创建base64图像验证码var config interface{}switch postParameters.CaptchaType {case "audio":config = postParameters.ConfigAudiocase "character":config = postParameters.ConfigCharacterdefault:config = postParameters.ConfigDigit}//GenerateCaptcha 第一个参数为空字符串,包会自动在服务器一个随机种子给你产生随机uiid.captchaId, digitCap := base64Captcha.GenerateCaptcha(postParameters.Id, config)base64Png := base64Captcha.CaptchaWriteToBase64Encoding(digitCap)//or you can do this//你也可以是用默认参数 生成图像验证码//base64Png := captcha.GenerateCaptchaPngBase64StringDefault(captchaId)//set json response//设置json响应w.Header().Set("Content-Type", "application/json; charset=utf-8")body := map[string]interface{}{"code": 1, "data": base64Png, "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 ConfigJsonBodyerr := 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 Applicationhttp.Handle("/", http.FileServer(http.Dir("./static")))//api for create captcha//创建图像验证码apihttp.HandleFunc("/api/getCaptcha", generateCaptchaHandler)//api for verify captchahttp.HandleFunc("/api/verifyCaptcha", captchaVerifyHandle)fmt.Println("Server is at localhost:3333")if err := http.ListenAndServe("localhost:3333", nil); err != nil {log.Fatal(err)}
}

运行demo代码

cd $GOPATH/src/github.com/mojocn/captcha/examples
go run main.go

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/112441.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++ Primer Plus学习记录】复合类型总结

数组、结构和指针是C的3种复合类型。 数组可以在一个数据对象中存储多个同种类型的值。通过索引或者下标,可以访问数组中各个元素。 结构可以将多个不同类型的值存储在同一个数据对象中,可以使用成员运算符(.)来访问其中的成员。…

虚拟音频设备软件 Loopback mac中文版软件介绍

创建虚拟音频设备以从应用程序和音频输入设备获取声音,然后将其发送到音频处理应用程序,它就是—Loopback for Mac,Loopback mac为您提供高端工作室混音板的强大功能,有了它在Mac上传递音频会变得很容易。 Loopback for mac中文版…

Flink之窗口触发机制及自定义Trigger的使用

1 窗口触发机制 窗口计算的触发机制都是由Trigger类决定的,Flink中为各类内置的WindowsAssigner都设计了对应的默认Trigger. 层次结构如下: Trigger ProcessingTimeoutTriggerEventTimeTriggerCountTriggerDeltaTriggerNeverTrigger in GlobalWindowsContinuousEventTimeTrigge…

LuatOS-SOC接口文档(air780E)-- ir - 红外遥控

ir.sendNEC(pin, addr, cmd, repeat, disablePWM)# 发送NEC数据 参数 传入值类型 解释 int 使用的GPIO引脚编号 int 用户码(大于0xff则采用Extended NEC模式) int 数据码 int 可选,引导码发送次数(110ms一次&#xff0…

Vue3.0里为什么要用 Proxy API 替代 defineProperty API ?

一、Object.defineProperty 定义:Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象 为什么能实现响应式 通过defineProperty 两个属性,get及set get 属性的 getter 函…

Swift使用Embassy库进行数据采集:热点新闻自动生成器

概述 爬虫程序是一种可以自动从网页上抓取数据的软件。爬虫程序可以用于各种目的,例如搜索引擎、数据分析、内容聚合等。本文将介绍如何使用Swift语言和Embassy库编写一个简单的爬虫程序,该程序可以从新闻网站上采集热点信息,并生成一个简单…

GCC优化相关

文章目录 优化选项博文链接 单独设置某段代码优化等级博文链接 优化选项 -O/-O0:无优化(默认)-O1:使用能减少目标文件大小以及执行时间并且不会使编译时间明显增加的优化。该模式在编译大型程序的时候会花费更多的时间和内存。在-O1 下,编译会尝试减少代码体积和代码…

Sarscape5.6版本中导入外部控制点、写入精密轨道文件与GACOS用于大气相位

SARscape中导入外部GCP点用于轨道精炼 https://www.cnblogs.com/enviidl/p/16524645.html在SAR处理时,有时会加入GCP点文件,SAR处理中用到的控制点分为两类:用于校正地理位置的几何控制点(Geometry GCP)和用于轨道精炼…

多测师肖sir_高级金牌讲师___ui自动化之selenium001

一、认识selenium (1)selenium是什么? a、selenium是python中的一个第三方库 b、Selenium是一个应用于web应用程序的测试工具,支持多平台,多浏览器,多语言去实现ui自动化测试,我们现在讲的Sel…

Atlassian Confluence OGNL表达式注入RCE CVE-2021-26084

影响版本 All 4.x.x versions All 5.x.x versions All 6.0.x versions All 6.1.x versions All 6.2.x versions All 6.3.x versions All 6.4.x versions All 6.5.x versions All 6.6.x versions All 6.7.x versions All 6.8.x versions All 6.9.x versions All 6.1…

Android之播放本地视频和Url视频方法

一、播放本地视频文件 根据文件路径在浏览器中播放,可用于视频预览等场景 效果: 用浏览器播放本地视频 文件路径例子: /storage/emulated/0/Android/data/com.custom.jfrb/files/Movies/1697687179497.mp4 File file new File("文件…

RK3568笔记四:基于TensorFlow花卉图像分类部署

若该文为原创文章,转载请注明原文出处。 基于正点原子的ATK-DLRK3568部署测试。 花卉图像分类任务,使用使用 tf.keras.Sequential 模型,简单构建模型,然后转换成 RKNN 模型部署到ATK-DLRK3568板子上。 在 PC 使用 Windows 系统…

使用telegram机器人发送通知

文章目录 背景1 创建机器人2 与机器人的会话3 调用API让机器人发送消息 背景 在训练深度学习模型时,除了粗略估计外,很难预测训练何时结束。此外,我们可能还想随时随地查看训练情况,如果每次都需要登录回服务器的话并不方便。因此…

Kubernetes与Docker和Containerd是个什么关系

文章目录 小结描述实例参考 小结 Kubernetes 在不停地迭代演进,Kubernetes停止使用Docker做为Container Runtime,改为Containerd或者CRI-O等与与Container Runtime Interface (CRI)更兼容的Container Runtime,进行了小结。 容器组&#xff…

wordpress网站部署了ssl证书之后就排版混乱了

刚给自己的小网站部署了SSL证书,之后就发现https访问主页竟然乱套了。在手机上访问却是正常的。 直接上解决方案: 编辑网站根目录下的wp-config.php文件 在自定义文本处添加以下代码: if ($_SERVER[HTTP_X_FORWARDED_PROTO] https) $_SE…

PHP-FFMpeg 操作音视频

✨ 目录 🎈 安装PHP-FFMpeg🎈 视频中提取一张图片🎈 视频中提取多张图片🎈 调整视频大小🎈 视频添加水印🎈 生成音频波形🎈 音频转换🎈 给音频添加元数据🎈 拼接多个音视…

利用ArcGIS获取每一个冰川的中心位置经纬度坐标:要素转点和要素折点转点的区别

问题概述:下图是天山地区的冰川的分布,我们可以看到每一条冰川是一个面要素,要求得到每一个冰川(面要素)的中心经纬度坐标。 1.采用要素转点功能 选择工具箱的【数据管理工具】-【要素】-【要素转点】。完成之后再采用…

计算机基础知识36

数据库数据的演变史 ATM:1. 把数据都存在了文件中,文件名不规范 kevin|123 kevin123 kevin*123 2. 存储数据的文件越来越多,放在db文件夹,占用空间,查询存储不方便,速度慢 # 数据库软件能解…

lnmp架构部署Discuz论坛并配置重定向转发

lnmp架构部署Discuz论坛并配置重定向转发 文章目录 lnmp架构部署Discuz论坛并配置重定向转发环境说明部署Discuz论坛系统下载Discuz论坛系统代码包,官网地址如下:部署Discuz论坛系统步骤:解压安装Discuz源码包配置虚拟主机进入Discuz安装界面…

Janus: 逆向思维,以数据为中心的MoE训练范式

文章链接:Janus: A Unified Distributed Training Framework for Sparse Mixture-of-Experts Models 发表会议: ACM SIGCOMM 2023 (计算机网络顶会) 目录 1.背景介绍all-to-allData-centric Paradigm 2.内容摘要关键技术Janus细粒度任务调度拓扑感知优先级策略预取…