Golang 實現的驗證碼服務:captcha
一款適用于并發高并且易于集成的驗證碼服務
功能簡單介紹下:
1. 隨機生成算術題,并隨機將題目中的部分數字/運算符變成漢字
2. 每個文字隨機顏色、字體傾斜度
3. 初始化生成 100 張驗證碼,運行過程中循環取圖片,如果每 10s 大于 100 次請求,則開始替換圖片 100 張(這些數字目前只能靠改代碼)
4. HTTP 接口,返回圖片內容 base64 和 答案,方便集成

準備工作
依賴安裝: golang imagemagic
驗證成功:
pkg-config --cflags --libs MagickWand
go version
沒有報錯說明安裝成功
下載并編譯
git clone https://github.com/jianxinio/captcha/
或者 下載 并解壓
進入captcha文件夾后運行 source install.sh
Downloading necessary files 這步可能耗時很久,后面留意觀察錯誤,如果下載完后持續報錯可能是 imagemagic 安裝有誤
如果一切順利,可以看到多了一個 build 文件夾,其中
- bin 為可執行文件夾
- assets 為使用到的靜態資源文件夾
- tmp 為緩存驗證碼文件
除了 build 文件夾外,其他文件不會再被使用
啟動
進入到 bin 文件夾,./captcha 即可啟動。
見到 Init success. 的提示說明初始化緩存生成成功。此時可以在 tmp 文件夾中看到 100 張驗證碼。
線上環境請自備守護進程
程序集成
訪問 localhost:8001 即可見到驗證碼內容(格式為 base64(buffer)|result)。
使用時需要先 split('|') 然后將 base64 解密后給前端。
get '/captcha' do
captcha = Faraday.get settings.captcha_server
captcha_arr = captcha.body.split('|')
@session['captcha_result'] = captcha_arr[1]
content_type 'image/gif'
Base64.decode64 captcha.body.split('|')[0]
end 高級配置
BriefDesign 中有詳細的設計文檔。
config.json 說明:
initial_count 初始化時產生的驗證碼數量
check_interval 檢查使用量間隔
threshold 更新驗證碼閥值
update_count 更新的驗證碼數量
如果訪問量較大,建議提高 initial_count 以及 update_count
更新配置文件后 reload 操作:
reload 只支持 initial_count 以及 update_count 的修改
操作方法: kill -USR2 pid
開源協議
MIT