下拉即可刷新...

go-captcha,一个简洁易用、交互友好、高安全性的 "行为式验证码" Go 库

go-captcha 是一个简洁易用、交互友好、高安全性的 "行为式验证码" Go 库,采用 “验证码展示-采集用户行为-验证行为数据” 为流程,用户无需键盘手动输入,极大优化传统验证码用户体验不佳的问题

点击生成页面海报

支持二维码扫描,以及短链接,分享到好友更方便 ~~

GO CAPTCHA


相关连接

中国Go代理

  • GoProxy https://github.com/goproxy/goproxy.cn

  • AliProxy: https://mirrors.aliyun.com/goproxy/

  • OfficialProxy: https://goproxy.io/

  • ChinaProxy:https://goproxy.cn

  • Other:https://gocenter.io

设置Go模块的代理

Window

set GO111MODULE=on
set GOPROXY=https://goproxy.io,direct

### The Golang 1.13+ can be executed directly
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io,direct

Linux or Mac

export GO111MODULE=on
export GOPROXY=https://goproxy.io,direct

### or
echo "export GO111MODULE=on" >> ~/.profile
echo "export GOPROXY=https://goproxy.cn,direct" >> ~/.profile
source ~/.profile

依赖golang官方标准库

go get -u github.com/golang/freetype
go get -u golang.org/x/crypto
go get -u golang.org/x/image

安装模块

go get -u github.com/wenlng/go-captcha/captcha

引入模块

package main

import "github.com/wenlng/go-captcha/captcha"

快速使用

package main
import (
    "fmt"
    "github.com/wenlng/go-captcha/captcha"
)

func main(){
     // Captcha Single Instances
    capt := captcha.GetCaptcha()

    // 生成验证码
    dots, b64, tb64, key, err := capt.Generate()
    if err != nil {
        panic(err)
        return
    }
    
    // 主图base64
    fmt.Println(len(b64))
    
    // 缩略图base64
    fmt.Println(len(tb64))
    
    // 唯一key
    fmt.Println(key)
    
    // 文本位置验证数据
    fmt.Println(dots)
}

创建实例或获取单例实例

package main
import (
    "fmt"
    "github.com/wenlng/go-captcha/captcha"
)

func main(){
	 // Captcha Instances
    // capt := captcha.NewCaptcha() 
    
    // Captcha Single Instances
    capt := captcha.GetCaptcha()

    // ====================================================
    fmt.Println(capt)

}

验证码配置项

v1.2.3版本后大图默认尺寸为:300×240px,小图默认尺寸为:150×40px。

文本相关的配置

默认情况下内置了定制的字体。如果设置了其他中文的文字,则可能需要设置字体文件。

package main
import (
    "fmt"
    "github.com/wenlng/go-captcha/captcha"
)

func main(){
    capt := captcha.GetCaptcha()
    
    // ====================================================
    // Method: SetRangChars (chars []string) error;
    // Desc: 设置验证码文本随机种子
    // ====================================================
    // 字符
    //chars := "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    //_ = capt.SetRangChars(strings.Split(chars, ""))
    
    // 双字母
    //chars := []string{"HE","CA","WO","NE","HT","IE","PG","GI","CH","CO","DA"}
    //_ = capt.SetRangChars(chars)

    // 汉字
    chars := []string{"你","好","呀","这","是","点","击","验","证","码","哟"}
    _ = capt.SetRangChars(chars)

    // ====================================================
    fmt.Println(capt)
}

大图相关的配置

package main
import (
    "fmt"
    "os"
    "golang.org/x/image/font"
    "github.com/wenlng/go-captcha/captcha"
)

func main(){
    capt := captcha.GetCaptcha()
    
    path, _ := os.Getwd()    
    // ====================================================
    // Method: SetBackground(color []string);
    // Desc: 设置验证码背景图
    // ====================================================
    capt.SetBackground([]string{
        path + "/__example/resources/images/1.jpg",
        path + "/__example/resources/images/2.jpg",
    })

    // ====================================================
    // Method: SetImageSize(size Size);
    // Desc: 设置验证码主图的尺寸
    // ====================================================
    capt.SetImageSize(captcha.Size{300, 300})

    // ====================================================
    // Method: SetImageQuality(val int);
    // Desc: 设置验证码主图清晰度,压缩级别范围1-5,QualityCompressNone无压缩,默认为最低压缩级别
    // ====================================================
    capt.SetImageQuality(captcha.QualityCompressNone)

    // ====================================================
    // Method: SetFontHinting(val font.Hinting);
    // Desc: 设置字体Hinting值 (HintingNone,HintingVertical,HintingFull)
    // ====================================================
    capt.SetFontHinting(font.HintingFull)

    // ====================================================
    // Method: SetTextRangLen(val captcha.RangeVal);
    // Desc: 设置验证码文本显示的总数随机范围
    // ====================================================
    capt.SetTextRangLen(captcha.RangeVal{6, 7})

    // ====================================================
    // Method: SetRangFontSize(val captcha.RangeVal);
    // Desc: 设置验证码文本的随机大小
    // ====================================================
    capt.SetRangFontSize(captcha.RangeVal{32, 42})
    
    // ====================================================
    // Method: SetTextRangFontColors(colors []string);
    // Desc: 设置验证码文本的随机十六进制颜色
    // ====================================================
    capt.SetTextRangFontColors([]string{
        "#1d3f84",
        "#3a6a1e",
    })

    // ====================================================
    // Method: SetImageFontAlpha(val float64);
    // Desc:设置验证码字体的透明度
    // ====================================================
    capt.SetImageFontAlpha(0.5)

    // ====================================================
    // Method: SetTextShadow(val float64);
    // Desc:设置字体阴影
    // ====================================================
    capt.SetTextShadow(true)

    // ====================================================
    // Method: SetTextShadowColor(val float64);
    // Desc:设置字体阴影颜色
    // ====================================================
    capt.SetTextShadowColor("#101010")

    // ====================================================
    // Method: SetTextShadowPoint(val float64);
    // Desc:设置字体阴影偏移位置
    // ====================================================
    capt.SetTextShadowPoint(captcha.Point{1, 1})

    // ====================================================
    // Method: SetTextRangAnglePos(pos []RangeVal);
    // Desc:设置验证码文本的旋转角度
    // ====================================================
    capt.SetTextRangAnglePos([]captcha.RangeVal{
        {1, 15},
        {15, 30},
        {30, 45},
        {315, 330},
        {330, 345},
        {345, 359},
    })

    // ====================================================
    // Method: SetImageFontDistort(val int);
    // Desc:设置验证码字体的扭曲程度
    // ====================================================
    capt.SetImageFontDistort(captcha.DistortLevel2)

}

小图相关的配置

package main
import (
    "fmt"
    "os"
    "github.com/wenlng/go-captcha/captcha"
)

func main(){
    capt := captcha.GetCaptcha()
    
    path, _ := os.Getwd()

    // ====================================================
    // Method: SetThumbSize(size Size);
    // Desc: 设置缩略图的尺寸
    // ====================================================
    capt.SetThumbSize(captcha.Size{150, 40})

    // ====================================================
    // Method: SetRangCheckTextLen(val captcha.RangeVal);
    // Desc:设置缩略图校验文本的随机长度范围
    // ====================================================
    capt.SetRangCheckTextLen(captcha.RangeVal{2, 4})

    // ====================================================
    // Method: SetRangCheckFontSize(val captcha.RangeVal);
    // Desc:设置缩略图校验文本的随机大小
    // ====================================================
    capt.SetRangCheckFontSize(captcha.RangeVal{24, 30})
    
    // ====================================================
    // Method: SetThumbTextRangFontColors(colors []string);
    // Desc: 设置缩略图文本的随机十六进制颜色
    // ====================================================
    capt.SetThumbTextRangFontColors([]string{
        "#1d3f84",
        "#3a6a1e",
    })
  
    // ====================================================
    // Method: SetThumbBgColors(colors []string);
    // Desc: 设置缩略图的背景随机十六进制颜色
    // ====================================================
    capt.SetThumbBgColors([]string{
        "#1d3f84",
        "#3a6a1e",
    })

    // ====================================================
    // Method: SetThumbBackground(colors []string);
    // Desc:设置缩略图的随机图像背景
    // ====================================================
    capt.SetThumbBackground([]string{
        path + "/__example/resources/images/r1.jpg",
        path + "/__example/resources/images/r2.jpg",
    })

    // ====================================================
    // Method: SetThumbBgDistort(val int);
    // Desc:设置缩略图背景的扭曲程度
    // ====================================================
    capt.SetThumbBgDistort(captcha.DistortLevel2)

    // ====================================================
    // Method: SetThumbFontDistort(val int);
    // Desc:设置缩略图字体的扭曲程度
    // ====================================================
    capt.SetThumbFontDistort(captcha.DistortLevel2)

    // ====================================================
    // Method: SetThumbBgCirclesNum(val int);
    // Desc:设置缩略图背景的圈点数
    // ====================================================
    capt.SetThumbBgCirclesNum(20)

    // ====================================================
    // Method: SetThumbBgSlimLineNum(val int);
    // Desc:设置缩略图背景的线条数
    // ====================================================
    capt.SetThumbBgSlimLineNum(3)
}

内置一些函数

package main
import (
    "fmt"
    "os"
    "github.com/wenlng/go-captcha/captcha"
)

func main(){
    path, _ := os.Getwd()    
    // ====================================================
    // Method: ClearAssetCacheWithPath(paths []string) bool;
    // Desc: 根据路径清除应资源的缓存
    // ====================================================
    captcha.ClearAssetCacheWithPaths([]string{
    	path + "/__example/resources/images/1.jpg",
    	path + "/__example/resources/fonts/fonts.ttf",
    }) 

    // ====================================================
    // Method: captcha.CheckPointDist(sx, sy, dx, dy, width, height int64) bool;
    // Desc: 校验点的位置
    // ====================================================
    captcha.CheckPointDist(0, 30, 0, 30, 30, 30)    

    // ====================================================
    // Method: captcha.CheckPointDistWithPadding(sx, sy, dx, dy, width, height, padding int64) bool;
    // Desc: 校验点的位置,可设置文本范围的偏移量
    // ====================================================
    captcha.CheckPointDistWithPadding(0, 30, 0, 30, 30, 30, 5)  
}

文章目录 / 导航
暂无数据

发表评论 ( 0条 )

0/300

暂无 “评论” 相关数据

已经到底了