base64Captcha快速生成base64编码图片验证码字符串

支持多种样式,算术,数字,字母,混合模式,语音模式.

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一。Base64编码可用于在HTTP环境下传递较长的标识信息, 直接把base64当成是字符串方式的数据就好了
减少了http请求;数据就是图片;
为APIs微服务而设计

为什么base64图片 for RESTful 服务

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

godoc文档

在线Demo Playground Powered by Vuejs+elementUI+Axios

 
Playground
 
28+58=?.png
 
ACNRfd.png
 
rW4npZ.png

wav file

安装golang包

go get -u github.com/mojocn/base64Captcha

  

创建图像验证码

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,
}
//create a audio captcha.
idKeyA, capA := base64Captcha.GenerateCaptcha("", configA)
//以base64编码
base64stringA := base64Captcha.CaptchaWriteToBase64Encoding(capA)
//create a characters captcha.
idKeyC, capC := base64Captcha.GenerateCaptcha("", configC)
//以base64编码
base64stringC := base64Captcha.CaptchaWriteToBase64Encoding(capC)
//create a digits captcha.
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服务

// 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
} var configC = base64Captcha.ConfigCharacter{
Height: 60,
Width: 240,
Mode: 0,
ComplexOfNoiseText: 0,
ComplexOfNoiseDot: 0,
IsShowHollowLine: false,
IsShowNoiseDot: false,
IsShowNoiseText: false,
IsShowSlimeLine: false,
IsShowSineLine: false,
CaptchaLen: 6,
} // 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
//创建base64图像验证码 var config interface{}
switch postParameters.CaptchaType {
case "audio":
config = postParameters.ConfigAudio
case "character":
config = postParameters.ConfigCharacter
default:
config = postParameters.ConfigDigit
}
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 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)
}
}

  

运行demo代码

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

访问 http://localhost:777

最新文章

  1. 使用KRPano资源分析工具还原全景图片
  2. C#知识点总结系列:5、CLR的组成和运转
  3. angular $emit发送 后退时$on多次接收
  4. ul+li标签制作表格
  5. python之类的属性
  6. 关于mybatis 在C#.Net中批量增,删,改
  7. IE样式兼容写法
  8. HTML输入框只能输入数字或数字字母组合
  9. MySQL sql语句获取当前日期|时间|时间戳
  10. 我是这样理解HTTP和HTTPS区别的
  11. 学习笔记——二叉树相关算法的实现(Java语言版)
  12. 20模板方法模式TemplateMethod
  13. sqoop加载mysql数据库
  14. 配置Spring的用于初始化容器对象的监听器
  15. nginx——防盗链功能
  16. Hadoop日记Day9---HDFS的java访问接口
  17. windows7触屏编程
  18. Java并发--同步容器
  19. JS原型链继承
  20. java反射基础知识(二)

热门文章

  1. python中json怎么转换成字典
  2. s5_day5作业
  3. java实现简单邮件的发送以及常见问题
  4. Spring Data Jpa示例(IntelliJ maven项目)
  5. javac是啥
  6. spring boot Rabbitmq集成,延时消息队列实现
  7. ie9下面的console的bug
  8. java springboot整合zookeeper入门教程(增删改查)
  9. C# Json格式
  10. Apache 配置参数