English | δΈζ
Go Captcha is a behavior security CAPTCHA, which implements the generation of random verification text and the verification of click position information.
βοΈ If it helps you, please give a star.
- GithubοΌhttps://github.com/wenlng/go-captcha
- Go ExampleοΌhttps://github.com/wenlng/go-captcha-example
- Vue ExampleοΌhttps://github.com/wenlng/go-captcha-vue
- React ExampleοΌhttps://github.com/wenlng/go-captcha-react
- Online DemoοΌhttp://47.104.180.148:8081/go_captcha_demo
$ 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"
func main(){
// ...
}
package main
import (
"fmt"
"github.com/wenlng/go-captcha/captcha"
)
func main(){
// Captcha Single Instances
capt := captcha.GetCaptcha()
// Generate Captcha
dots, b64, tb64, key, err := capt.Generate()
if err != nil {
panic(err)
return
}
// Main image base64 code
fmt.Println(len(b64))
// Thumb image base64 code
fmt.Println(len(tb64))
// Only key
fmt.Println(key)
// Dot data For verification
fmt.Println(dots)
}
- New Instances or Get Single Instances
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)
}
After version v1.2.3, the default size of large drawing is 300Γ240px, the default size of the small drawing is 150Γ40px.
Some fonts are attached by default. If other Chinese strings are set, you may need to import a font file.
package main
import (
"fmt"
"github.com/wenlng/go-captcha/captcha"
)
func main(){
capt := captcha.GetCaptcha()
// ====================================================
// Method: SetRangChars (chars []string) error;
// Desc: Set random char of captcha
// ====================================================
// Letter
//chars := "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
//_ = capt.SetRangChars(strings.Split(chars, ""))
// Two Letter
//chars := []string{"HE","CA","WO","NE","HT","IE","PG","GI","CH","CO","DA"}
//_ = capt.SetRangChars(chars)
// Chinese Char
chars := []string{"δ½ ","ε₯½","ε","θΏ","ζ―","ηΉ","ε»","ιͺ","θ―","η ","ε"}
_ = capt.SetRangChars(chars)
// ====================================================
fmt.Println(capt)
}
You can copy the resource files under the "https://github.com/wenlng/go-captcha-example/tree/main/resources" to the directory of your project.
package main
import (
"fmt"
"os"
"github.com/wenlng/go-captcha/captcha"
)
func main(){
capt := captcha.GetCaptcha()
path, _ := os.Getwd()
// ====================================================
// Method: SetFont(fonts []string);
// Desc: Set random font of captcha text
// ====================================================
capt.SetFont([]string{
path + "/__example/resources/fonts/fzshengsksjw_cu.ttf",
})
}
Tip: Some images are attached by default.
package main
import (
"fmt"
"golang.org/x/image/font"
"os"
"github.com/wenlng/go-captcha/captcha"
)
func main(){
capt := captcha.GetCaptcha()
path, _ := os.Getwd()
// ====================================================
// Method: SetBackground(color []string);
// Desc: Set random image of background
// ====================================================
capt.SetBackground([]string{
path + "/__example/resources/images/1.jpg",
path + "/__example/resources/images/2.jpg",
})
// ====================================================
// Method: SetImageSize(size Size);
// Desc: Set size of captcha
// ====================================================
capt.SetImageSize(captcha.Size{300, 300})
// ====================================================
// Method: SetImageQuality(val int);
// Desc: Set quality of captcha, The compression level ranges from 1 to 5. QualityCompressNone has no compression. The default is the lowest compression level
// ====================================================
capt.SetImageQuality(captcha.QualityCompressNone)
// ====================================================
// Method: SetFontHinting(val font.Hinting);
// Desc: Set Hinting of font (HintingNone,HintingVertical,HintingFull)
// ====================================================
capt.SetFontHinting(font.HintingFull)
// ====================================================
// Method: SetTextRangLen(val captcha.RangeVal);
// Desc: Set random length of font
// ====================================================
capt.SetTextRangLen(captcha.RangeVal{6, 7})
// ====================================================
// Method: SetRangFontSize(val captcha.RangeVal);
// Desc: Set random size of font
// ====================================================
capt.SetRangFontSize(captcha.RangeVal{32, 42})
// ====================================================
// Method: SetTextRangFontColors(colors []string);
// Desc: Set random hex color of font
// ====================================================
capt.SetTextRangFontColors([]string{
"#1d3f84",
"#3a6a1e",
})
// ====================================================
// Method: SetImageFontAlpha(val float64);
// Desc:Set alpha of font
// ====================================================
capt.SetImageFontAlpha(0.5)
// ====================================================
// Method: SetTextShadow(val bool);
// Desc:Set shadow of font
// ====================================================
capt.SetTextShadow(true)
// ====================================================
// Method: SetTextShadowColor(val string);
// Desc:Set shadow color of font
// ====================================================
capt.SetTextShadowColor("#101010")
// ====================================================
// Method: SetTextShadowPoint(val captcha.Point);
// Desc:Set shadow point of font
// ====================================================
capt.SetTextShadowPoint(captcha.Point{1, 1})
// ====================================================
// Method: SetTextRangAnglePos(pos []captcha.RangeVal);
// Desc:Set angle of font
// ====================================================
capt.SetTextRangAnglePos([]captcha.RangeVal{
{1, 15},
{15, 30},
{30, 45},
{315, 330},
{330, 345},
{345, 359},
})
// ====================================================
// Method: SetImageFontDistort(val int);
// Desc:Set distort of font
// ====================================================
capt.SetImageFontDistort(captcha.DistortLevel2)
}
Tip: Some images are attached by default.
package main
import (
"fmt"
"os"
"github.com/wenlng/go-captcha/captcha"
)
func main(){
capt := captcha.GetCaptcha()
path, _ := os.Getwd()
// ====================================================
// Method: SetRangCheckTextLen(val captcha.RangeVal);
// Desc:Set random length of font
// ====================================================
capt.SetRangCheckTextLen(captcha.RangeVal{2, 4})
// ====================================================
// Method: SetRangCheckFontSize(val captcha.RangeVal);
// Desc:Set random size of font
// ====================================================
capt.SetRangCheckFontSize(captcha.RangeVal{24, 30})
// ====================================================
// Method: SetThumbTextRangFontColors(colors []string);
// Desc: Set random hex color of font
// ====================================================
capt.SetThumbTextRangFontColors([]string{
"#1d3f84",
"#3a6a1e",
})
// ====================================================
// Method: SetThumbBgColors(colors []string);
// Desc: Sets the random hex color of the background
// ====================================================
capt.SetThumbBgColors([]string{
"#1d3f84",
"#3a6a1e",
})
// ====================================================
// Method: SetThumbBackground(colors []string);
// Desc:Set random image of background
// ====================================================
capt.SetThumbBackground([]string{
path + "/__example/resources/images/r1.jpg",
path + "/__example/resources/images/r2.jpg",
})
// ====================================================
// Method: SetThumbBgDistort(val int);
// Desc:Set the distort of background
// ====================================================
capt.SetThumbBgDistort(captcha.DistortLevel2)
// ====================================================
// Method: SetThumbFontDistort(val int);
// Desc:Set the distort of font
// ====================================================
capt.SetThumbFontDistort(captcha.DistortLevel2)
// ====================================================
// Method: SetThumbBgCirclesNum(val int);
// Desc:Sets the number of dots
// ====================================================
capt.SetThumbBgCirclesNum(20)
// ====================================================
// Method: SetThumbBgSlimLineNum(val int);
// Desc:Set number of lines
// ====================================================
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: Clear Cache
// ====================================================
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: Check point position
// ====================================================
captcha.CheckPointDist(0, 30, 0, 30, 30, 30)
// ====================================================
// Method: captcha.CheckPointDistWithPadding(sx, sy, dx, dy, width, height, padding int64) bool;
// Desc: Check point position
// ====================================================
captcha.CheckPointDistWithPadding(0, 30, 0, 30, 30, 30, 5)
}
package main
import (
"fmt"
"os"
"github.com/wenlng/go-captcha/captcha"
)
func main(){
capt := captcha.GetCaptcha()
// generate ...
// ====================================================
// dots: Character position information
// - {"0":{"Index":0,"Dx":198,"Dy":77,"Size":41,"Width":54,"Height":41,"Text":"SH","Angle":6,"Color":"#885500"} ...}
// imageBase64: Verify the clicked image
// thumbImageBase64: Thumb displayed
// key: Only Key
// ====================================================
dots, imageBase64, thumbImageBase64, key, err := capt.Generate()
if err != nil {
panic(err)
return
}
fmt.Println(len(imageBase64))
fmt.Println(len(thumbImageBase64))
fmt.Println(key)
fmt.Println(dots)
}
// Example: Get captcha data
Respose Data = {
"code": 0,
"image_base64": "...",
"thumb_base64": "...",
"captcha_key": "...",
}
// Example: Post check data
Request Data = {
dots: "x1,y1,x2,y2,...."
key: "......"
}
Buy the author coffee: http://witkeycode.com/sponsor
MIT