V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
not4jerk
V2EX  ›  分享发现

golang 验证码包,demo 自带各种参数,欢迎大家来拍砖

  •  
  •   not4jerk · 2017-12-19 17:14:23 +08:00 · 2742 次点击
    这是一个创建于 2522 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    GitHub-base64captcha

    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
    }
    
    // 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

    欢迎水友来拍砖

    2 条回复    2017-12-20 13:33:26 +08:00
    anasplrt34
        1
    anasplrt34  
       2017-12-19 18:06:55 +08:00
    给 star 了
    0915240
        2
    0915240  
       2017-12-20 13:33:26 +08:00
    手动点赞
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1869 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 16:35 · PVG 00:35 · LAX 08:35 · JFK 11:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.