Go第三方包base64Captcha
Go第三方包base64Captcha生成base64验证码 支持多种样式 算术 数字 字母 混合模式 语音模式
Base64 最常见的用于传输8Bit字节代码的编码方式之一
Base64 编码 在HTTP环境下传递较长的标识信息 把base64当成是字符串方式的数据 减少了http请求
微服务APIs
base64图片 Data URIs 大部分浏览器支持 IE8后也支持小图片使用base64响应对于RESTful服务更便捷
安装golang包
go get -u github.com/mojocn/base64Captcha
创建图像验证码
import "github.com/mojocn/base64Captcha"
func demoCodeCaptchaCreate() {
var configD = base64Captcha.ConfigDigit{//数字验证码配置 //config struct for digits
Height: 80,
Width: 240,
MaxSkew: 0.7,
DotCount: 80,
CaptchaLen: 5,
}
var configA = base64Captcha.ConfigAudio{//config struct for audio //声音验证码配置
CaptchaLen: 6,
Language: "zh",
}
var configC = base64Captcha.ConfigCharacter{//config struct for Character //字符,公式,验证码配置
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,
}
idKeyA, capA := base64Captcha.GenerateCaptcha("", configA)//create a audio captcha.
base64stringA := base64Captcha.CaptchaWriteToBase64Encoding(capA)//以base64编码
idKeyC, capC := base64Captcha.GenerateCaptcha("", configC) //create a characters captcha
base64stringC := base64Captcha.CaptchaWriteToBase64Encoding(capC)//以base64编码
idKeyD, capD := base64Captcha.GenerateCaptcha("", configD) //create a digits captcha.
base64stringD := base64Captcha.CaptchaWriteToBase64Encoding(capD)//以base64编码
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
}
}
搭建API服务
// example of HTTP server that uses the captcha package.package main
import (
"encoding/json"
"fmt"
"github.com/mojocn/base64Captcha"
"log"
"net/http"
)
type ConfigJsonBody struct {//ConfigJsonBody json request body.
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,
}
func generateCaptchaHandler(w http.ResponseWriter, r *http.Request) {// base64Captcha create http handler
decoder := json.NewDecoder(r.Body)//parse request parameters //接收客户端发送来的请求参数
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() {
http.Handle("/", http.FileServer(http.Dir("./static"))) //serve Vuejs+ElementUI+Axios Web Application
http.HandleFunc("/api/getCaptcha", generateCaptchaHandler)//api for create captcha
http.HandleFunc("/api/verifyCaptcha", captchaVerifyHandle)//api for verify captcha
fmt.Println("Server is at localhost:9999")
if err := http.ListenAndServe("localhost:9999", nil); err != nil {
log.Fatal(err)
}
}
cd $GOPATH/src/github.com/mojocn/captcha/examples
go run main.go
访问 http://localhost:9999
尊贵的董事大人
英文标题不为空时 视为本栏投稿
需要关键字 描述 英文标题