信手拈来,java生成验证码

java生成验证码应该说还是比较容易的,下面我把代码贴出来

写生成验证码图片的Servlet:

package test;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;



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

import javax.imageio.ImageIO;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class Img
 */
public class Img extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Img() {
        super();
        // TODO Auto-generated constructor stub
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
		response.setContentType("image/jpeg");//设置浏览器无缓存
		response.setHeader("Pragma","No-cache");
		response.setHeader("Cache-Control","no-cache");
	    response.setDateHeader("Expires",0);
	    
	    
	    int width=60,height=20;
	    BufferedImage image=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//在内存中创建图片
		Graphics g=image.getGraphics();//得到图片的上下文
		g.setColor(getRandColor(200,250));//设置背景颜色
		g.fillRect(0, 0, width, height);//绘制图形
		g.setFont(new Font("Times New Roman",Font.PLAIN, 18));//设置字体
		Random random=new Random();
		
		g.setColor(getRandColor(160,200));
		for(int i=0;i<155;i++)//绘制155条干扰线
		{int x=random.nextInt(width);
		  int y=random.nextInt(height);
		  int x1=random.nextInt(12);
		  int y1=random.nextInt(12);
		  g.drawLine(x, y,x+x1,y+y1);
		}
		
		String str="";
		char mapTable[]={//验证码出现的码
			      'a','b','c','d','e','f',
			      'g','h','i','j','k','l',
			      'm','n','o','p','q','r',
			      's','t','u','v','w','x',
			      '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'};
		for(int i=0;i<4;i++)
		{
			String rand=String.valueOf(mapTable[random.nextInt(mapTable.length)]);
			str+=rand;
			g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
			g.drawString(rand,13*i+6, 16);
			
		}
		
		HttpSession session=request.getSession();
		session.setAttribute("rand",str);
		System.out.println(str);
		g.dispose();
        ServletOutputStream resOutputStream=response.getOutputStream();
		ImageIO.write(image,"JPEG",resOutputStream);//输出图片
		resOutputStream.flush();
		resOutputStream.close();
	
		
	}
	public 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);
		 
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
         throws ServletException, IOException {
		
	}

}

下面写访问的jsp   


<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title></title>
<script type="text/javascript">
function reloadCode()
{
 var img=document.getElementById("codeImg");
 img.setAttribute('src','http://localhost/Code/Img?'+Math.random());
 

}
</script>
</head>
<body>
<form action="check.jsp" method="get">
<label>验证码:</label><img  id="codeImg" alt="" src="http://localhost/Code/Img">
<a href="javascript:reloadCode();"><font Size="1px">看不清,再换一张</font></a><br/>
<label>输入验证码:</label><input type="text" name="code"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>

提交后到验证jsp做验证

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title></title>
<%
String realCode=(String)session.getAttribute("rand");
String getCode=request.getParameter("code");
System.out.println(realCode+":"+getCode);
if(getCode==null)
	getCode="";
String msg="";
if(realCode.equals(getCode))
{
	msg="验证码输入正确";
}
else
{
	msg="验证码输入错误";}



%>
</head>
<body>
<%=msg %>
</body>
</html>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值