`

java生成验证码图片

 
阅读更多
参考了些网上代码,自己写了一个验证


第一:写一个图片生成类

package com.demo.util;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 生成一个校验图片
 */
public class ImageUtil {
	private static final int WIDTH = 80;
	private static final int HIGHT = 30;
	private static final char[] CODE_SEQUENCE = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
			'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
			'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
	// 验证码字符个数
	private static final int CODE_COUNT = 4;
	// 字体的位置参数
	private static final int FONT_AREA = WIDTH / (CODE_COUNT + 1);

	public static void createCheckImg(HttpServletRequest request,
			HttpServletResponse response) throws IOException {
		// 定义图像
		BufferedImage bi = new BufferedImage(WIDTH, HIGHT,
				BufferedImage.TYPE_INT_RGB);
		Graphics2D gd = bi.createGraphics();
		// 随机数
		Random random = new Random();
		// 矩形填充为白色
		gd.fillRect(0, 0, WIDTH, HIGHT);
		gd.setColor(Color.white);
		// 根据高宽设置字体
		// 字体四种风格  plain bold italic
		Font font = new Font("Fixedsys", Font.BOLD, HIGHT - 5);
		gd.setFont(font);
		// 画边框
		gd.setColor(Color.BLACK);
		gd.drawRect(0, 0, WIDTH - 1, HIGHT - 1);
		gd.setColor(Color.BLACK);    
		// 随机产生几条干扰线
		for (int i = 0; i < 6; i++) {
			int x1 = random.nextInt(WIDTH);
			int y1 = random.nextInt(HIGHT);
			int x2 = random.nextInt(20);
			int y2 = random.nextInt(10);
			gd.drawLine(x1, y1, x1 + x2, y1 + y2);
		}
		// 产生随机码
		int red = 0, green = 0, blue = 0;
		// 存储数据的buffer
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < CODE_COUNT; i++) {
			// 得到随机数
			String strRand = String.valueOf(CODE_SEQUENCE[random.nextInt(36)]);
			// 产生随机的颜色
			red = random.nextInt(255);
			green = random.nextInt(255);
			blue = random.nextInt(255);
			// 将验证码绘成图案
			gd.setColor(new Color(red, green, blue));
			gd.drawString(strRand, (i ) * FONT_AREA, HIGHT - 4);// x,y表坐标位置,按照宽度分5个坐标
			// 拼接数字
			sb.append(strRand);
		}
		// 设置session
		request.getSession().setAttribute("checkCode", sb.toString());
		// 禁止图像缓存。
		response.setHeader("Pragma", "no-cache");
		response.setHeader("Cache-Control", "no-cache");
		response.setDateHeader("Expires", 0);
		response.setContentType("image/jpeg");
		ServletOutputStream sos = response.getOutputStream();
		ImageIO.write(bi, "jpg", sos);
		sos.close();
	}
}

第二:
    前端获取验证码
  
 <img src="${ctx}/uploadFile/createImg" id="checkImg" alt="wait..."/>
 <a href="#" onclick="changeImg()">换一张</a> 
 <script type="text/javascript">
 //换验证图片
 	function changeImg(){
	 var img = $("#checkImg");
	 var imgSrc = img.attr("src");
	 img.attr("src",changeUrl(imgSrc));
 }
 
 //无了使图片不一样,不让浏览器加上缓存,所以用时间戳来作为参数
	function changeUrl(imgSrc){
	   var timestamp = (new Date()).valueOf();
	   var indexTemp =imgSrc.indexOf("="); 
	   if(indexTemp>0){
		   var subUrl = imgSrc.substring(0,indexTemp);
		   var resultUrl = subUrl + "=" + timestamp; 
		   return resultUrl;
	   }else{
		   var resultUrl = imgSrc + "?" + "timestamp=" + "timestamp";
		   return resultUrl;
	   }
 }
</script>
分享到:
评论

相关推荐

    java生成验证码图片的文件已完成测试

    java生成验证码图片的文件已完成测试

    JAVA生成验证码图片工具类

    用于java生成验证码图片的工具类。(源码 .java 文件)

    java 生成图片验证码

    在IT领域,验证码(CAPTCHA)是一...在提供的压缩包文件“图片验证码生成”中,可能包含了实现上述功能的源代码示例,你可以通过学习和理解这些代码,加深对Java生成图片验证码的理解,并根据实际需求进行调整和优化。

    java生成图片的验证码工具类及其使用

    java生成验证码的工具类,这个现在有依赖可以直接引入调用,但这个工具类没有引入依赖,大家也容易看懂代码,理解其含义。也可直接去工具类中调整生成验证码的宽度、高度、颜色、背景颜色、生成的随机数数量、干扰线...

    Java随机生成验证码图片

    Java随机生成验证码图片,适用于web登录验证等。个人觉得很不错~

    java写的生成验证码图片类

    用java写的验证码类,可以生成4个字符,且字体和大小都随机

    java生成验证码的参考资料(中英文验证码)

    总的来说,Java生成验证码是一个结合了数学随机性、图像处理和安全性考量的过程。通过学习和使用`kaptcha`或其他验证码生成库,开发者能够快速地在自己的项目中实现这一功能。同时,理解和实现验证码的生成也能加深...

    java生成验证码demo

    这个"java生成验证码demo"提供了生成自定义验证码图片的方法,包括设置图片尺寸、验证码长度,以及添加各种视觉混淆元素,以增加机器识别的难度。 首先,我们要理解验证码的基本原理。它通常由一组随机生成的字母或...

    java生成图片验证码

    首先,我们来看标题"java生成图片验证码"。这个标题暗示我们将探讨的是在Java环境中生成随机的、可读性较差的文本,并将其转化为图像的过程,以创建一个验证码。验证码通常由字母、数字或两者混合组成,设计的目的...

    java图片验证码源码

    验证码(Vercode)是网络应用中常用的一种...总的来说,创建Java图片验证码涉及多个技术点,包括字符串生成、图像处理、随机数生成等。通过理解并实践这些技术,开发者可以创建出适合自己应用的高效安全的验证码系统。

    Java生成图片验证码工具类源码

    该工具类使用随机字符生成验证码,并支持自定义验证码长度和字体样式。生成的验证码图片背景透明,线条清晰,可轻松辨认。本源码包含了工具类源码及调用示例,可供开发者参考使用,集成到您的项目中。

    java生成验证码源码包括彩色验证码

    java生成验证码源码包括彩色验证码 包括jsp生成验证码和彩色验证码

    JAVA图片验证码 图片验证码

    JAVA图片验证码 图片验证码JAVA图片验证码 图片验证码JAVA图片验证码 图片验证码JAVA图片验证码 图片验证码JAVA图片验证码 图片验证码JAVA图片验证码 图片验证码

    java生成验证码代码

    在Java中生成验证码涉及到图像处理、随机数生成以及字符编码等多个知识点。以下将详细介绍如何在Java中创建一个能生成中文、英文和数字的验证码。 1. **随机数生成**:首先,我们需要生成随机的验证码字符。Java...

    java/web生成图片验证码(完整)

    这是我个人从网上载的比较好的方法,跟大家推荐分享下。

    SpringMVC生成的验证码图片不显示问题及解决方法

    在SpringMVC中,生成验证码图片需要使用@Controller注解的Controller类,通过@RequestMapping注解的方法来处理验证码图片的生成。在本例中,使用ValidateCodeController类来生成验证码图片,并将其输出到客户端。 ...

    java 生成动态gif 验证码

    - **Servlet**:在Servlet中调用工具类的方法,生成验证码并将其保存到服务器的一个临时目录,同时将验证码内容保存在Session中,以供后续验证使用。 - **响应客户端**:Servlet返回生成的GIF图像到客户端,通常...

    生成验证码图片的jsp代码

    在Web开发中,使用JSP(JavaServer Pages)来生成验证码图片是一种常见的方法。下面我们将详细讨论如何在JSP中实现验证码的生成。 首先,我们需要理解验证码的基本原理。验证码通常包含一串随机的字母和数字,有时...

    java生成随机验证码

    java生成随机验证码, 这是一个demo, eclipse项目,导入eclipse即可

    Java生成算数运算中文图片验证码

    Java生成算数运算中文图片验证码的实现,结合了编程语言、图像处理和安全验证的多种技术,为用户提供了一种既安全又友好的验证方式。下面我们将深入探讨这个主题。 首先,验证码的核心是生成随机的算数运算表达式。...

Global site tag (gtag.js) - Google Analytics