代码拉取完成,页面将自动刷新
同步操作将从 ShirDon-廖显东/go验证码合集包 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
//++++++++++++++++++++++++++++++++++++++++
//Fighting for great,share generate value!
//Build the best soft by golang,let's go!
//++++++++++++++++++++++++++++++++++++++++
//Author:ShirDon <http://www.shirdon.com>
//Email:hcbsts@163.com; 823923263@qq.com
//++++++++++++++++++++++++++++++++++++++++
package captchas_with_go
import (
"encoding/csv"
"errors"
"io"
"os"
"strings"
"unicode/utf8"
)
//WordManager is a captcha word manage tool
type WordManager struct {
words []string
isDataSingleChar bool
isValid bool
}
//CreateWordManagerFromDataFile will create a entity from a dictionary file
func CreateWordManagerFromDataFile(filename string) (*WordManager, error) {
mgr := &WordManager{}
mgr.words = []string{}
mgr.isValid = false
f, err := os.Open(filename)
if nil != err {
return mgr, err
}
defer f.Close()
reader := csv.NewReader(f)
mgr.isDataSingleChar = true
for {
record, err := reader.Read()
if err == io.EOF {
break
} else if nil != err {
return mgr, err
}
if 1 < len([]rune(record[0])) {
mgr.isDataSingleChar = false
}
mgr.words = append(mgr.words, strings.TrimSpace(record[0]))
}
mgr.isValid = true
return mgr, nil
}
//Get a specifical length word
func (mgr *WordManager) Get(length int) (string, error) {
var retErr error
rst := ""
if mgr.isValid {
if true == mgr.isDataSingleChar {
if len(mgr.words) < length {
return "", errors.New("dict words count is less than your length")
}
for {
line := mgr.getLine()
if false == strings.ContainsRune(rst, []rune(line)[0]) {
rst = rst + line
}
if utf8.RuneCountInString(rst) >= length {
break
}
}
rstRune := []rune(rst)
rst = string(rstRune[0:length])
} else {
rst = mgr.getLine()
}
} else {
retErr = errors.New("WordManager is invalid")
}
return rst, retErr
}
func (mgr *WordManager) SetWords(words []string) {
mgr.words = words
mgr.isValid = len(words) > 0
mgr.isDataSingleChar = true
for _, s := range words {
if len([]rune(s)) > 1 {
mgr.isDataSingleChar = false
}
}
}
func (mgr *WordManager) getLine() string {
maxIndex := len(mgr.words) - 1
rstIndex := rnd(0, maxIndex)
rst := mgr.words[rstIndex]
return rst
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。