欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang實(shí)現(xiàn)圖像驗(yàn)證碼的示例代碼

 更新時(shí)間:2023年10月19日 16:03:52   作者:林欣快滾去學(xué)習(xí)  
這篇文章主要為大家詳細(xì)介紹了如何利用golang實(shí)現(xiàn)簡(jiǎn)單的圖像驗(yàn)證碼,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

為什么base64圖片 for RESTful 服務(wù)

Data URIs 支持大部分瀏覽器,IE8之后也支持.

小圖片使用base64響應(yīng)對(duì)于RESTful服務(wù)來(lái)說(shuō)更便捷

安裝golang包

go get -u github.com/mojocn/base64Captcha

對(duì)于中國(guó)大陸Gopher go get golang.org/x/image 失敗解決方案:

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

創(chuàng)建圖像驗(yàn)證碼

import "github.com/mojocn/base64Captcha"
func demoCodeCaptchaCreate() {
    //config struct for digits
    //數(shù)字驗(yàn)證碼配置
    var configD = base64Captcha.ConfigDigit{
        Height:     80,
        Width:      240,
        MaxSkew:    0.7,
        DotCount:   80,
        CaptchaLen: 5,
    }
    //config struct for audio
    //聲音驗(yàn)證碼配置
    var configA = base64Captcha.ConfigAudio{
        CaptchaLen: 6,
        Language:   "zh",
    }
    //config struct for Character
    //字符,公式,驗(yàn)證碼配置
    var configC = base64Captcha.ConfigCharacter{
        Height:             60,
        Width:              240,
        //const CaptchaModeNumber:數(shù)字,CaptchaModeAlphabet:字母,CaptchaModeArithmetic:算術(shù),CaptchaModeNumberAlphabet:數(shù)字字母混合.
        Mode:               base64Captcha.CaptchaModeNumber,
        ComplexOfNoiseText: base64Captcha.CaptchaComplexLower,
        ComplexOfNoiseDot:  base64Captcha.CaptchaComplexLower,
        IsShowHollowLine:   false,
        IsShowNoiseDot:     false,
        IsShowNoiseText:    false,
        IsShowSlimeLine:    false,
        IsShowSineLine:     false,
        CaptchaLen:         6,
    }
    //創(chuàng)建聲音驗(yàn)證碼
    //GenerateCaptcha 第一個(gè)參數(shù)為空字符串,包會(huì)自動(dòng)在服務(wù)器一個(gè)隨機(jī)種子給你產(chǎn)生隨機(jī)uiid.
    idKeyA, capA := base64Captcha.GenerateCaptcha("", configA)
    //以base64編碼
    base64stringA := base64Captcha.CaptchaWriteToBase64Encoding(capA)
    //創(chuàng)建字符公式驗(yàn)證碼.
    //GenerateCaptcha 第一個(gè)參數(shù)為空字符串,包會(huì)自動(dòng)在服務(wù)器一個(gè)隨機(jī)種子給你產(chǎn)生隨機(jī)uiid.
    idKeyC, capC := base64Captcha.GenerateCaptcha("", configC)
    //以base64編碼
    base64stringC := base64Captcha.CaptchaWriteToBase64Encoding(capC)
    //創(chuàng)建數(shù)字驗(yàn)證碼.
    //GenerateCaptcha 第一個(gè)參數(shù)為空字符串,包會(huì)自動(dòng)在服務(wù)器一個(gè)隨機(jī)種子給你產(chǎn)生隨機(jī)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")
}

驗(yàn)證圖像驗(yàn)證碼

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

使用golang搭建API服務(wù) main.go

// 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
    //接收客戶端發(fā)送來(lái)的請(qǐng)求參數(shù)
    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
    //創(chuàng)建base64圖像驗(yàn)證碼

    var config interface{}
    switch postParameters.CaptchaType {
    case "audio":
        config = postParameters.ConfigAudio
    case "character":
        config = postParameters.ConfigCharacter
    default:
        config = postParameters.ConfigDigit
    }
    //GenerateCaptcha 第一個(gè)參數(shù)為空字符串,包會(huì)自動(dòng)在服務(wù)器一個(gè)隨機(jī)種子給你產(chǎn)生隨機(jī)uiid.
    captchaId, digitCap := base64Captcha.GenerateCaptcha(postParameters.Id, config)
    base64Png := base64Captcha.CaptchaWriteToBase64Encoding(digitCap)

    //or you can do this
    //你也可以是用默認(rèn)參數(shù) 生成圖像驗(yàn)證碼
    //base64Png := captcha.GenerateCaptchaPngBase64StringDefault(captchaId)

    //set json response
    //設(shè)置json響應(yīng)

    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
    //接收客戶端發(fā)送來(lái)的請(qǐng)求參數(shù)
    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
    //比較圖像驗(yàn)證碼
    verifyResult := base64Captcha.VerifyCaptcha(postParameters.Id, postParameters.VerifyValue)

    //set json response
    //設(shè)置json響應(yīng)
    w.Header().Set("Content-Type", "application/json; charset=utf-8")
    body := map[string]interface{}{"code": "error", "data": "驗(yàn)證失敗", "msg": "captcha failed"}
    if verifyResult {
        body = map[string]interface{}{"code": "success", "data": "驗(yàn)證通過(guò)", "msg": "captcha verified"}
    }
    json.NewEncoder(w).Encode(body)
}

//start a net/http server
//啟動(dòng)golang net/http 服務(wù)器
func main() {

    //serve Vuejs+ElementUI+Axios Web Application
    http.Handle("/", http.FileServer(http.Dir("./static")))

    //api for create captcha
    //創(chuàng)建圖像驗(yàn)證碼api
    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)
    }
}

運(yùn)行demo代碼

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

到此這篇關(guān)于golang實(shí)現(xiàn)圖像驗(yàn)證碼的示例代碼的文章就介紹到這了,更多相關(guān)go圖像驗(yàn)證碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang語(yǔ)言http協(xié)議get拼接參數(shù)操作

    golang語(yǔ)言http協(xié)議get拼接參數(shù)操作

    這篇文章主要介紹了golang語(yǔ)言http協(xié)議get拼接參數(shù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Golang中實(shí)現(xiàn)類似類與繼承的方法(示例代碼)

    Golang中實(shí)現(xiàn)類似類與繼承的方法(示例代碼)

    這篇文章主要介紹了Golang中實(shí)現(xiàn)類似類與繼承的方法,Go語(yǔ)言中通過(guò)方法接受者的類型來(lái)決定方法的歸屬和繼承關(guān)系,本文通過(guò)示例代碼講解的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • 一文帶你搞懂Golang結(jié)構(gòu)體內(nèi)存布局

    一文帶你搞懂Golang結(jié)構(gòu)體內(nèi)存布局

    結(jié)構(gòu)體在Go語(yǔ)言中是一個(gè)很重要的部分,在項(xiàng)目中會(huì)經(jīng)常用到。這篇文章主要帶大家看一下結(jié)構(gòu)體在內(nèi)存中是怎么分布的?通過(guò)對(duì)內(nèi)存布局的了解,可以幫助我們寫(xiě)出更優(yōu)質(zhì)的代碼。感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助
    2022-10-10
  • go:gin輸出日志文件方式

    go:gin輸出日志文件方式

    這篇文章主要介紹了go:gin輸出日志文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • golang常用庫(kù)之操作數(shù)據(jù)庫(kù)的orm框架-gorm基本使用詳解

    golang常用庫(kù)之操作數(shù)據(jù)庫(kù)的orm框架-gorm基本使用詳解

    這篇文章主要介紹了golang常用庫(kù)之操作數(shù)據(jù)庫(kù)的orm框架-gorm基本使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • golang結(jié)構(gòu)化日志slog的用法簡(jiǎn)介

    golang結(jié)構(gòu)化日志slog的用法簡(jiǎn)介

    日志是任何軟件的重要組成部分,Go?提供了一個(gè)內(nèi)置日志包(slog),在本文中,小編將簡(jiǎn)單介紹一下slog包的功能以及如何在?Go?應(yīng)用程序中使用它,感興趣的可以了解下
    2023-09-09
  • golang validator參數(shù)校驗(yàn)的實(shí)現(xiàn)

    golang validator參數(shù)校驗(yàn)的實(shí)現(xiàn)

    這篇文章主要介紹了golang validator參數(shù)校驗(yàn)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 淺析Golang中的協(xié)程(goroutine)

    淺析Golang中的協(xié)程(goroutine)

    在Go語(yǔ)言中,協(xié)程(goroutine)是輕量級(jí)的線程,它是Go語(yǔ)言中實(shí)現(xiàn)并發(fā)編程的基礎(chǔ),Go語(yǔ)言中的協(xié)程是由Go運(yùn)行時(shí)調(diào)度器(scheduler)進(jìn)行管理和調(diào)度的,本文將給大家簡(jiǎn)單的介紹一下Golang中的協(xié)程,需要的朋友可以參考下
    2023-05-05
  • 詳解go中的defer鏈如何被遍歷執(zhí)行

    詳解go中的defer鏈如何被遍歷執(zhí)行

    為了在退出函數(shù)前執(zhí)行一些資源清理的操作,例如關(guān)閉文件、釋放連接、釋放鎖資源等,會(huì)在函數(shù)里寫(xiě)上多個(gè)defer語(yǔ)句,多個(gè)_defer 結(jié)構(gòu)體形成一個(gè)鏈表,G 結(jié)構(gòu)體中某個(gè)字段指向此鏈表,那么go中的defer鏈如何被遍歷執(zhí)行,本文將給大家詳細(xì)的介紹,感興趣的朋友可以參考下
    2024-01-01
  • 瞅一眼就能學(xué)會(huì)的GO并發(fā)編程使用教程

    瞅一眼就能學(xué)會(huì)的GO并發(fā)編程使用教程

    隨著互聯(lián)網(wǎng)的普及,互聯(lián)網(wǎng)用戶人數(shù)原來(lái)越多,這對(duì)系統(tǒng)的性能帶來(lái)了巨大的挑戰(zhàn)。這個(gè)時(shí)候就需要并發(fā)編程了,本文為大家整理了詳細(xì)的GO并發(fā)編程使用教程,讓你看完就能學(xué)會(huì)
    2023-02-02

最新評(píng)論