博客
关于我
强烈建议你试试无所不能的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

你可能感兴趣的文章
R 指定安装镜像的方法
查看>>
Unity shader实现水效果(折射,反射,波浪,1.菲尼尔,深度颜色)
查看>>
URAL1018 Binary Apple Tree
查看>>
Servlet注解
查看>>
今后几个月的IT读书计划
查看>>
蓝桥杯 传球游戏 动态规划
查看>>
apk反编译、smali修改、回编译笔记
查看>>
.Net程序员学习Linux最简单的方法(转载)
查看>>
基于.NET Socket API 通信的综合应用
查看>>
python 装饰器
查看>>
eclipse配置
查看>>
openGL 绘制文本font(csGL)
查看>>
BZOJ 1072 排列
查看>>
BZOJ 3779 LCT 线段树 DFS序 坑
查看>>
group by rollup | cube 学习
查看>>
上传图片的步骤
查看>>
hadoop-0.20.2完全分布式集群
查看>>
How to turn off the binary log for mysqld_multi instances?
查看>>
easyui弹出窗关闭前调用确认窗口,先关闭页面后调用弹出窗口
查看>>
BZOJ1018 堵塞的交通(线段树)
查看>>