//第一个类
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.http.HttpServletResponse;
public class Validatenumber {
private static final String CODE_LIST = "1234567890";
private HttpServletResponse response = null;
private static final int HEIGHT = 20;
private static final int FONT_NUM = 4;
private int width = 0;
private int iNum = 0;
private String codeList = "";
private boolean drawBgFlag = false;
private int rBg = 0;
private int gBg = 0;
private int bBg = 0;
public Validatenumber(HttpServletResponse response)
{
this.response = response;
this.width = 13 * FONT_NUM + 12;
this.iNum = FONT_NUM;
this.codeList = CODE_LIST;
}
public Validatenumber(HttpServletResponse response,int iNum,String codeList)
{
this.response = response;
this.width = 13 * iNum + 12;
this.iNum = iNum;
this.codeList = codeList;
}
public String createRandImage()
{
BufferedImage image = new BufferedImage(width, HEIGHT,BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
Random random = new Random();
if ( drawBgFlag )
{
g.setColor(new Color(rBg,gBg,bBg));
g.fillRect(0, 0, width, HEIGHT);
}
else
{
g.setColor(getRandColor(200, 250));
g.fillRect(0, 0, width, HEIGHT);
for (int i = 0; i < 155; i++)
{
g.setColor(getRandColor(140, 200));
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);
}
}
g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
String sRand="";
for (int i=0;i<iNum;i++)
{
int rand=random.nextInt(codeList.length());
String strRand=codeList.substring(rand,rand+1);
sRand+=strRand;
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
g.drawString(strRand,13*i+6,16);
}
g.dispose();
try{
ImageIO.write(image, "JPEG", response.getOutputStream());
}
catch(IOException e)
{
}
return sRand;
}
public void setBgColor(int r,int g,int b)
{
drawBgFlag = true;
this.rBg = r;
this.gBg = g;
this.bBg = b;
}
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);
}
//验证
}
//第二个类
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
/*** @author SinNeR@blueidea.com * create a image*/
public class Validateimg
{ public static void main(String[] args)
{
BufferedImage image = new BufferedImage(130, 40,BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
g.setColor(new Color(255,255,255));
g.fillRect(0, 0, 130, 40);
g.setColor(new Color(0,0,0));
g.drawString("HelloImage",6,16);
g.dispose();
try
{
ImageIO.write(image, "jpeg", new File("C://helloImage.jpeg"));
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
//jsp文件。获取图片
<%@ page contentType="image/jpeg" import="cn.forum.biz.*" %>
<%
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
Validatenumber rc = new Validatenumber(response);
//RandImgCreater rc = new RandImgCreater(response,8,"abcdef");
//rc.setBgColor(100,100,100);
String rand = rc.createRandImage();
session.setAttribute("rand",rand);
out.clear();
out = pageContext.pushBody();
%>
//比较验证码输入正确或者不正确 JSP
Userlogininfo us=new Userlogininfo();
Validatelogin vali=new Validatelogin();
Userexecutelogin login=new Userexecutelogin();
request.setCharacterEncoding("GBK");
response.setCharacterEncoding("GBK");
String code = (String)session.getAttribute("rand");
String inputCode = request.getParameter("txtvalidate");