Nodejs ·

nodejs实现图形验证码

nodejs生成图形验证码可以自己写一个,我感觉比较麻烦,因为有现成的……下面我来介绍一下这个现成的验证码生成模块:svg-captcha

我个人觉得使用起来很方便,首先得需要安装svg-captcha。

var svgCaptcha = require("svg-captcha")
router.get('/getCode',function(req,res){
var codeConfig = {
       size: 5,// 验证码长度
        ignoreChars: '0o1i', // 验证码字符中排除 0o1i
        noise: 2, // 干扰线条的数量
        fontSize:42,
        color:true,//开启文字颜色
        background:"#cc9966",//背景色
        width:150,
        height: 44
    }
    var captcha = svgCaptcha.create(codeConfig);

    req.session.captcha = captcha.text.toLowerCase(); //存session用于验证接口获取文字码
    console.log(req.session.captcha)
    var codeData = {
        img:captcha.data
    }
   res.type('svg');
    res.status(200).send(captcha.data);
})

上面的代码是生成一个四位的随机字母数字串,如果你想生成数学计算的字符串可以使用下面这个

svgCaptcha.createMathExpr(options);//options参数不变

与create api类似,有相同的选项和返回值,他的结果就是计算之后的结果。

如果你觉得他的字体不是太好看,你也可以选择使用自己的字体:

svgCaptcha.loadFont(url)

url则为你需要加载的字体路径。

关于nodejssession的使用我们在之前已经介绍过了

使用的时候直接将该链接放在img的src中即可,刷新将后面的参数替换了,可以使用时间戳做参数,目的是为了清除浏览器缓存的影响。

<img src="http:127.0.0.1:3001/getCode?_v=1231" onclick="refish()"/>

在提交判断中只需要将session中的值获取出来和传过来的值进行对比即可,需要注意的是我们在存session的时候已经将其全部置为小写,获取过来的值也应该转换为小写以后再进行对比。

参与评论