java 实现动态验证码_Java web实现动态图片验证码的示例代码

验证码

防止恶意表单注册

生成验证码图片

定义宽高

int width = 100;

int height = 50;

使用bufferedimage再内存中生成图片

bufferedimage image = new bufferedimage(width, height, bufferedimage.type_int_rgb);

绘制背景和边框

graphics g = image.getgraphics();

g.setcolor(color.white);

g.fillrect(0, 0, width, height);

g.setcolor(color.black);

g.drawrect(0, 0, width - 1, height - 1);

创建随机字符集和随机数对象

//字符集

string str = "abcdefghijklmnopqrstuvwxyzabcdefgjijklmnopqrstuvwxyz";

//随机数

random ran = new random();

创建随机颜色生成方法

private color getrandomcolor(random random) {

//获取随机颜色

int colorindex = random.nextint(3);

switch (colorindex) {

case 0:

return color.blue;

case 1:

return color.green;

case 2:

return color.red;

case 3:

return color.yellow;

default:

return color.magenta;

}

}

绘制验证码字符

//绘制验证码

for (int i = 0; i < 4; i++) {

//获取随机字符

int index = ran.nextint(str.length());

char ch = str.charat(index);

//获取随机色

color randomcolor = getrandomcolor(ran);

g.setcolor(randomcolor);

//设置字体

font font = new font("宋体", font.bold, height / 2);

g.setfont(font);

//写入验证码

g.drawstring(ch + "", (i == 0) ? width / 4 * i + 2 : width / 4 * i, height - height / 4);

}

绘制干扰线

//干扰线

for (int i = 0; i < 10; i++) {

int x1 = ran.nextint(width);

int x2 = ran.nextint(width);

int y1 = ran.nextint(height);

int y2 = ran.nextint(height);

color randomcolor = getrandomcolor(ran);

g.setcolor(randomcolor);

g.drawline(x1, x2, y1, y2);

}

使用imageio输出图片

imageio.write(image, "jpg", resp.getoutputstream());

成果图

9130a3c6bd0766e204266191d7f90fa5.png

实现刷新效果

新建html页面

使用img标签实现图片展示

identcode

看不清,换一张

使用js实现刷新效果

//点击图片时

var img = document.getelementbyid("identcode");

img.onclick = function (){

refesh();

}

//点击连接时

var a = document.getelementbyid("refesh");

a.onclick = function (){

refesh();

//返回false防止a标签默认href行为

return false;

}

function refesh() {

/**

* 由于路径相同时浏览器会自动调用缓存中的图片

* 所以在连接后加时间戳解决此问题

*/

var date = new date().gettime();

img.src = "identcode?" + date;

}

效果

afa04febd510186886d09aa50c963367.png

d53a6bd8bffeedb9dce3db157cad8bd6.png

项目源码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值