要實作驗證碼系統,其實可以分成兩種機制,一種是使用第三方工具,像是Google的,另一種則是安裝Package。
本文要探討的不是使用第三方工具的機制,但自己曾經用過reCaptcha,其實會感受到一些不便之處以及隱含的問題
整體而言,個人並不推薦reCaptcha
大部分Packages都必須安裝很多相依套件,在各種平台上也會遇到各種問題,ccap這套件也不例外,必須安裝或,但這又再次卡到軟體商業化的一個問題,今天我都用Nodejs這免費的工具了,為了一個套件,卻得花錢買VS,再進一步考慮安裝相依Libraries時併發的各種安裝細節問題,副作用實在多到讓人無法忍受,怎麼想都不划算,所以我也不推ccap
這個套件是目前為止我最滿意的,主要原因是它不用安裝任何相依,換句話說,不管在什麼樣的環境下,只要一句就搞定,也不用花大把鈔票買一套Visual Studio
具體用法也一目了然,底下是簡單的範例程式,可以產生四位數字的驗證碼,並且儲存在session中
router.get('/captcha', function(req, res){ var captchapng = require('captchapng'); var txt = parseInt(Math.random()*9000+1000); req.session.captcha = txt; var p = new captchapng(50,22,txt); p.color(255, 255, 255, 255); // First color: background (red, green, blue, alpha) p.color(10, 10, 100, 255); // Second color: paint (red, green, blue, alpha)
var img = p.getBase64(); var imgbase64 = new Buffer(img,'base64'); res.writeHead(200, { 'Content-Type': 'image/png' }); res.end(imgbase64);});
整體而言易用無負擔,但是請不要高興的太早,這個套件只支援數字驗證碼,如果使用英文字母的話會出錯,原因可能與這個套件的寫法有關,不確定有無方法可以修正,有空再來研究吧...