生成验证码的java代码_Java代码生成图片验证码

1.jsp页面显示验证码,src跳转到Controller里的:getImg_validate,reloadImg()作用是点击验证码就会换一张(重新请求getImg_validate)

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

  • 验证码:
  • getImg_validate

functionreloadImg() {

document.getElementById("img_validate").src="image/getImg_validate";

}

View Code

2e7b88be2115fe0d2473a0db8555fdef.png

2.写一个ImageUtil工具类,在里面可以自定义图片生成的大小,字体大小,背景色,验证码个数,干扰线条条数等等

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.svse.house.util;importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics;importjava.awt.image.BufferedImage;importjava.util.Random;public classImageUtil {//1.定义变量保存生成后的验证码字符串

static String code = "";//2.生成验证码

public staticString createcode() {

code= "";

String a= "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";//随机生成的字符范围(0-9,a-z,A-Z)//生成验证码的位数(这里是4位)

for (int i = 0; i < 4; i++) {int index = (int) (Math.random() * 62);//会产生一个[0,62)的数,不包含小数

char b =a.charAt(index);

code= code +b;

}returncode;

}//查看已经生成的验证码

public staticString getCode() {returncode;

}//3.生成图片

public staticBufferedImage createimage() {//前2个参数为:width, height.后面是图像类型//创建一个不带透明色的BufferedImage对象,TYPE_INT_ARGB为带透明色

BufferedImage bi = new BufferedImage(130,50, BufferedImage.TYPE_INT_RGB);//1.得到一个画布

Graphics g =bi.getGraphics();//2.添加背景颜色

g.setColor(Color.WHITE);

g.fillRect(0, 0, 130, 50);//3.添加干扰线

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

Random r= newRandom();int red = r.nextInt(256);int green = r.nextInt(256);int blue = r.nextInt(256);

Color c= newColor(red, green, blue);

g.setColor(c);int x1 = r.nextInt(131);int y1 = r.nextInt(51);int x2 = r.nextInt(131);int y2 = r.nextInt(51);

g.drawLine(x1,y1,x2,y2);//画线//g.drawOval(x1, y1, x2, y2);//画曲线

}//3.添加文字

g.setColor(Color.BLACK);

g.setFont(new Font("宋体", Font.BOLD, 50));

String str=getCode();//4.将文字填充到画板中

g.drawString(str, 15, 40);//5.关闭画布

g.dispose();returnbi;

}

}

View Code

3.在controller层调用getImg_validate,试用过jpeg和bmp格式的setContentType,都可以

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.svse.house.controller;importjava.awt.image.BufferedImage;importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjavax.imageio.ImageIO;importjavax.servlet.ServletOutputStream;importjavax.servlet.http.HttpServletResponse;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importcom.svse.house.util.ImageUtil;

@Controller

@RequestMapping("/image")public classImageController {

@RequestMapping("/getImg_validate")public voidyanzheng(HttpServletResponse response){try{

ImageUtil.createcode();

BufferedImage image=ImageUtil.createimage();//以流的方式返回给客户端

response.setContentType("image/jpeg");//response.setContentType("image/bmp");

ByteArrayOutputStream bt = newByteArrayOutputStream();//将图片转换成字节流

ImageIO.write(image,"jpeg",bt);//ImageIO.write(image,"bmp",bt);//得到输出流,返回客户端

ServletOutputStream outputStream =response.getOutputStream();

outputStream.write(bt.toByteArray());

}catch(IOException e) {

e.printStackTrace();

}

}

}

View Code

513acf360bfdade049629c137b49cc1b.png

4.最后的验证

当时一直想在前台获取随机生成的四位数验证码来和自己输入的进行比较,可以通过session来获取但如果刷新验证码session里的值不会改变除非刷新整个页面。

后来想想真傻,直接在后台比较不就好了吗。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值