生成随机码

import javax.servlet.*;
import javax.servlet.http.*;

import java.io.*;
import java.awt.*;
import java.awt.image.*;
import java.util.*;
import javax.imageio.*;
/**
 * @author wing.cai [email protected]
 * @version 1.0
 * <br>Copyright (C), 2008-2009, wing.cai
 * <br>This program is protected by copyright laws.
 * <br>Program Name:
 * <br>Date: 
 */

public class Img extends HttpServlet {
	private Font mFont = new Font("Arial Black",Font.PLAIN,16);
	public void init() throws ServletException {
		// Put your code here
		super.init();
	}
	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);
	}
	
	private String getRandomChar(){
		int rand = (int)Math.round(Math.random() * 2);
		long itmp = 0;
		char ctmp = '\u0000';
		switch (rand){
			//生成大写字母的情形
		case 1:
			itmp = Math.round(Math.random() * 25 + 65);
			ctmp = (char)itmp;
			return String.valueOf(ctmp);
			//生成小写字母
		case 2:
			itmp = Math.round(Math.random() * 25 + 97);
			ctmp = (char)itmp;
			return String.valueOf(ctmp);
			//生成数字
		default:
			itmp = Math.round(Math.random() * 9);
			return String.valueOf(itmp);
		}
	}
	
	//生成服务器响应的service方法
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		//阻止生成的页面内容被缓存,保证每次重新生成随机验证码
		resp.setHeader("Pragma", "No-cache");
		resp.setHeader("Cache-Control", "no-cache");
		resp.setDateHeader("Expires", 0);
		resp.setContentType("image/jpeg");
		//指定图形验证码图片的大小
		int width = 100, height = 18;
		//生成一张新图片
		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(1, 1, width-1, height-1);
		g.setColor(new Color(102,102,102));
		g.drawRect(0, 0, width-1, height-1);
		g.setFont(mFont);
		//随机生成线条,让图片看起来更加杂乱
		g.setColor(getRandColor(160,200));
		for (int i = 0; i < 155; i++){
			int x = random.nextInt(width - 1);
			int y = random.nextInt(height - 1);
			int x1 = random.nextInt(6) + 1;
			int y1 = random.nextInt(12) +1;
			g.drawLine(x, y, x + x1, y + y1);
		}
		//随机生成线条,让图片看起来更加杂乱
		for (int i = 0; i < 70; i++){
			int x = random.nextInt(width - 1);
			int y = random.nextInt(height - 1);
			int x1 = random.nextInt(12) + 1;
			int y1 = random.nextInt(6) + 1;
			g.drawRect(x, y, x + x1, y + y1);
		}
		//该变量用于保存系统生成的随即字符串
		String sRand = "";
		for (int i = 0; i < 6; i++){
			//取得一个随机字符
			String tmp = getRandomChar();
			sRand += tmp;
			//将系统生成的随机字符添加到图形验证码图片上
			g.setColor(new Color(20+random.nextInt(110),
						20+random.nextInt(110),20+random.nextInt(110)));
			g.drawString(tmp, 15 * i + 10, 15);
		}
		//取得用户Session
		HttpSession session = req.getSession(true);
		//将系统生成的图形验证码添加到用户Session中
		session.setAttribute("rand", sRand);
		g.dispose();
		//输出图形验证码图片 
		ImageIO.write(image, "JPEG", resp.getOutputStream());
	}
	
	
	
	

}

你可能感兴趣的:(cache,servlet)