博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java后台验证码的生成
阅读量:4673 次
发布时间:2019-06-09

本文共 2207 字,大约阅读时间需要 7 分钟。

前台代码:

	验证码		

后台java代码:

public class CheckCodeAction {	private ByteArrayInputStream inputStream;	  	public void setInputStream(ByteArrayInputStream inputStream) {		this.inputStream = inputStream;	}	public ByteArrayInputStream getInputStream() {		return inputStream;	}	public String execute() throws Exception {		// 在内存中创建图象		int width = 60, height = 20;		BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);		// 获取图形上下文		Graphics g = image.getGraphics();		// 生成随机类		Random random = new Random();		// 设定背景色		g.setColor(getRandColor(200, 250));		g.fillRect(0, 0, width, height);		// 设定字体		g.setFont(new Font("Times New Roman", Font.PLAIN, 18));		// 随机产生60条干扰线,使图象中的认证码不易被其它程序探测到		g.setColor(getRandColor(160, 200));		for (int i = 0; i < 60; i++) {			int x = random.nextInt(width);			int y = random.nextInt(height);			int xl = random.nextInt(12);			int yl = random.nextInt(12);			g.drawLine(x, y, x + xl, y + yl);		}		// 取随机产生的认证码(4位数字)		String rand,sRand = "" ;				for (int i = 0; i < 4; i++) {			rand = String.valueOf(random.nextInt(10));			sRand += rand;			// 将认证码显示到图象中			g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));			// 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成			g.drawString(rand, 13 * i + 6, 16);		}		// 将认证码存入SESSION		HttpSession session = this.getSession();		session.setAttribute("rand", sRand); 		System.out.println(sRand);		// 图象生效		g.dispose();		ByteArrayOutputStream output = new ByteArrayOutputStream();		ImageOutputStream imageOut = ImageIO.createImageOutputStream(output);		ImageIO.write(image, "JPEG", imageOut);		imageOut.close();		ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray());		this.setInputStream(input);		return SUCCESS;	}	/*	 * 给定范围获得随机颜色	 */	private Color getRandColor(int fc, int bc) {		Random random = new Random();		if (fc > 255)			fc = 255;		if (bc > 255)			bc = 255;		int r = fc + random.nextInt(bc - fc);		int g = fc + random.nextInt(bc - fc);		int b = fc + random.nextInt(bc - fc);		return new Color(r, g, b);	}}

配置文件:

  
image/jpeg   
inputStream

  

 

转载于:https://www.cnblogs.com/estellez/p/4108528.html

你可能感兴趣的文章
Mybatis中mapper.xml文件判断语句中的单双引号问题
查看>>
frameset和frame
查看>>
饥饿的小易(规律,同余大数)
查看>>
ats透明代理
查看>>
PHP 小代码
查看>>
2016/03/16 codes
查看>>
2018年7月21日工作总结
查看>>
Linux shell 命令判断执行语法 ; , && , ||
查看>>
vim代码格式化插件clang-format
查看>>
What does the dot after dollar sign mean in jQuery when declaring variables?
查看>>
windows registry
查看>>
jquery 动画总结(主要指效果函数)
查看>>
【BZOJ4155】[Ipsc2015]Humble Captains
查看>>
【事件】阻止事件的冒泡
查看>>
mac os 安装 geckodriver
查看>>
【数据分析 R语言实战】学习笔记 第十一章 对应分析
查看>>
谁的青春不迷茫
查看>>
socket知识总结
查看>>
Qt做的简易图片浏览
查看>>
[开发技巧]·pandas如何保存numpy元素
查看>>