nodejs 生成验证码
此方法需要nodejs 安装canvas 扩展
准备工作
以Linux为例
1、服务器gcc版本需4.8以上
2、安装所需扩展
yum install cairo cairo-devel cairomm-devel libjpeg-turbo-devel pango pango-devel pangomm pangomm-devel giflib-devel
3、安装canvas 扩展
npm install canvas
使用方法
示例代码
nodejs代码
/**
* 生成验证码
*/ var MdCode = module.exports;
var Consts = require('../comm/consts.js');
var Canvas = require('canvas'); function randomNum(min,max){
return Math.floor(Math.random()*(max-min)+min);
} function randomColor(min,max){
var _r = randomNum(min,max);
var _g = randomNum(min,max);
var _b = randomNum(min,max);
return "rgb("+_r+","+_g+","+_b+")";
} var getRandom = function(start,end){
return start + Math.random() * (end - start);
}; MdCode.create = function(params, req, callback) {
var width = 120;
var height = 35;
var canvas = new Canvas(width, height);
var ctx = canvas.getContext('2d');
// ctx.textBaseline = 'bottom';
//** 绘制背景色 **//
//颜色若太深可能导致看不清
ctx.fillStyle = randomColor(180,250);
ctx.fillRect(0, 0, width, height);
var code = ""; //** 绘制文字 **//
var start = 10;
var font = 'bold 20px arial';
var trans = {c:[-0.108, 0.108],b:[-0.05, 0.05]};
var str = 'abcdefghijklmnpqrstuvwxyz123456789';
for(var i = 0; i < 4; i++) {
var txt = str[randomNum(0, str.length)];
code += txt;
ctx.font = font;
ctx.fillStyle = randomColor(50, 160);
ctx.fillText(txt, start, 23, 10);
ctx.fillRect();
var c = getRandom(trans['c'][0],trans['c'][1]);
var b = getRandom(trans['b'][0],trans['b'][1]);
ctx.transform(1,b, c, 1, 0, 0);
start += 28; } //*** 绘制干扰线 ***//
for(var i = 0; i < 4; i++) {
ctx.strokeStyle = randomColor(40, 180);
ctx.beginPath();
ctx.moveTo( randomNum(0,width), randomNum(0,height) );
ctx.lineTo( randomNum(0,width), randomNum(0,height) );
ctx.stroke();
}
// ** 绘制干扰点 ** //
for (var i = 0; i < 50; i++) {
ctx.fillStyle = randomColor(0,255);
ctx.beginPath();
ctx.arc(randomNum(0,width),randomNum(0,height), 1, 0, 2*Math.PI);
ctx.fill();
} var buf = canvas.toDataURL();
var result = {};
result.statusCode = 0;
// buf为主要显示图像的数据
result.data = buf;
result.code = code; // 保存到session 用来验证
req.session.code = code; // 返还客户端
callback(result); }
html代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>验证码</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta content="width=device-width, initial-scale=1.0" name="viewport" />
<script type="text/javascript" src="/js/jquery.min.js"></script>
</head>
<body>
<h3 class="loginTitle contrast-blue">验证码</h3>
<div style="height: 80px;">
<label>验证码: </label>
<input type="text" style="width: 40%;" name="code" />
<img id="img_code" src="" style="width:100px;height:38px;vertical-align:bottom;position: relative;top: -38px;left: 200px;display: none;" title="点击刷新验证码" />
</div>
</body>
</html>
<script type="text/javascript">
// 刷新验证码
function refreshCode(){
$.ajax({
type: "get",
dataType: "json",
url: "/code",
success: function(msg){
$("#img_code").css('display', 'block');
$("#img_code").attr('src', msg.data); }
});
} $(document).ready(function() {
refreshCode();
});
$('#img_code').click(function(){
refreshCode();
}) </script>
效果预览 == 》 
nodejs 生成验证码的更多相关文章
- 动态生成验证码———MVC版
上面有篇博客也是写的验证码,但那个是适用于asp.net网站的. 今天想在MVC中实现验证码功能,弄了好久,最后还是看博友文章解决的,感谢那位博友. 首先引入生成验证码帮助类. ValidateCod ...
- laravel 生成验证码的方法
在Laravel中有很多图片验证码的库可以使用,本篇介绍其中之一:gregwar/captcha,这个库比较简单,在Laravel中比较常用.下面我们就来介绍下使用细节: 首先, composer.j ...
- java web学习总结(九) -------------------通过Servlet生成验证码图片
一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:
- android 生成验证码图片
(转自:http://blog.csdn.net/onlyonecoder/article/details/8231373) package com.nobeg.util; import java.u ...
- PHP 动态生成验证码
……机器人会在网站中搜寻允许他们插入广告的输入表单,在虚拟世界没有什么能阻挡它们胡作非为.这些机器人效率极高,完全不关心所攻击的表单的本来用途.它们唯一的目标就是用它们的垃圾广告覆盖你的内容,残忍地为 ...
- PHP生成验证码及单实例应用
/* note: * this 指向当前对象本身 * self 指向当前类 * parent 指向父类 */ /* 验证码工具类 * @author pandancode * @date 20150- ...
- ASP.NET ashx实现无刷新页面生成验证码
现在大部分网站登陆时都会要求输入验证码,在网上也看了一些范例,现在总结一下如何实现无刷新页面生成验证码. 效果图: 实现方式: 前台: <div> <span>Identify ...
- PHP-仿ecshop生成验证码
<?php /* 生成验证码 */ // 1.创建画布(基于已有图像) $n = mt_rand(1,5); $im = imagecreatefromjpeg('./images/captch ...
- Java生成验证码原理(jsp)
验证码的作用: 验证码是Completely Automated Public Turing test to tell Computers and Humans Apart(全自动区分计算机和人类的 ...
随机推荐
- hdu 1391 Number Steps(规律)
题意:找规律 思路:找规律 #include<iostream> #include<stdio.h> using namespace std; int main(){ int ...
- Yii的缓存机制之动态缓存
当整个页面被缓存,但只有小部分区域需要根据不同的条件设置不同的信息.(例如商品的详细页面的缓存中用户名是动态的)这里就需要设置动态缓存. 首先在被缓存的模板中使用renderDynamic进行动态渲染 ...
- 对服务器上所有Word文件做全文检索的解决方案-Java
一.背景介绍 Word文档与日常办公密不可分,在实际应用中,当某一文档服务器中有很多Word文档,假如有成千上万个文档时,用户查找打开包含某些指定关键字的文档就变得很困难,目前这一问题没有好的解 ...
- Keras 可视化 model
参考:https://keras.io/visualization/ error解决参考:http://blog.csdn.net/wangjian1204/article/details/50346 ...
- BZOJ_1941_[Sdoi2010]Hide and Seek_KDtree
BZOJ_1941_[Sdoi2010]Hide and Seek_KDtree Description 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得 ...
- codevs 1154 能量项链
传送门 1154 能量项链 2006年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在Mars星 ...
- poll的使用
#define POLL_FD_SIZE 1024 int doServicePoll(int listenFd) { struct sockaddr_in cliAddr; socklen_t le ...
- 机器学习之K-means算法
前言 以下内容是个人学习之后的感悟,转载请注明出处~ 简介 在之前发表的线性回归.逻辑回归.神经网络.SVM支持向量机等算法都是监督学习算法,需要样本进行训练,且 样本的类别是知 ...
- <正则吃饺子> :关于新项目的环境搭建(一)
来到新的公司,需要使用myeclipse.maven.svn.tomcat.mysql: 对于先前一直只用 netbeans 的我,在这里把环境搭建 的情况记录下来.来加深自己的学习和帮助后来者. 第 ...
- 1.8-1.10 大数据仓库的数据收集架构及监控日志目录日志数据,实时抽取之hdfs系统上
一.数据仓库架构 二.flume收集数据存储到hdfs 文档:http://flume.apache.org/releases/content/1.9.0/FlumeUserGuide.html#hd ...