//生成数字和字母组合的验证码
public class ResponseDemo3 extends HttpServlet {
private static final long serialVersionUID = 1L;
private int WIDTH=140;
private int HEIGHT=35;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
BufferedImage image=new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
Graphics g=image.getGraphics();
//1、设置背景色
setBackGround(g);
//2、设置边框
serBorder(g);
//3、画干扰线
drawRandomLine(g);
//4、写随机数
drawRandomNum((Graphics2D)g);
//禁止图像缓存。
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
//5、图形写给浏览器
response.setContentType("text/jpeg");
ImageIO.write(image, "jpg", response.getOutputStream());
}
private void setBackGround(Graphics g) {
g.setColor(getRandColor(190,230));
g.fillRect(0, 0, WIDTH, HEIGHT);
}
private void serBorder(Graphics g) {
g.setColor(Color.BLACK);
g.drawRect(1, 1, WIDTH-2, HEIGHT-2);
}
private void drawRandomLine(Graphics g) {
g.setColor(Color.GRAY);
for(int i=0;i<4;i++){
int x1=new Random().nextInt(WIDTH);
int y1=new Random().nextInt(HEIGHT);
int x2=new Random().nextInt(WIDTH);
int y2=new Random().nextInt(HEIGHT);
g.drawLine(x1, y1, x2, y2);
}
}
private void drawRandomNum(Graphics2D g) {
g.setColor(getRandColor(20,80));
//设置字体的大小
g.setFont(new Font("宋体",Font.BOLD,30));
String base="abcdefghijklmnopqrstuvwxyz0123456789";
int x=10;
for(int i=0;i<6;i++){
int degree=new Random().nextInt()0;//角度范围在-30-30
String ch=base.charAt(new Random().nextInt(base.length()))+"";
//设置旋转角度
g.rotate(degree*Math.PI/180,x,20);
g.drawString(ch, x, 25);
//每次旋转完后再把角度设置成原来的
g.rotate(-degree*Math.PI/180,x,20);
x+=20;
}
}
//给定范围获得随机颜色
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);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}