用java实现彩色验证码

Posted on 2006-12-20 15:06 flustar 阅读(599) 评论(0)  编辑  收藏 所属分类: J2ee

<%@ page language="java" contentType="image/jpeg"
    pageEncoding="gb2312"%>
<%@ page import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"%>

<%!
   Color getRandColor(int fc,int bc){
 Random rand=new Random();
 if(fc>255) fc=255;
 if(bc>255) bc=255;
 int r=fc+rand.nextInt(bc-fc);
 int g=fc+rand.nextInt(bc-fc);
 int b=fc+rand.nextInt(bc-fc);
 return new Color(r,g,b);
}
%>
<%
  //设置页面不缓存
  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_BGR);
 
  //获取图像
  Graphics g=image.getGraphics();
  //生成随机类
  Random rand=new Random();
  //设定背景颜色
  g.setColor(getRandColor(200,250));
  g.fillRect(0,0,width,height);
  //设定字体
  g.setFont(new Font("Times New Roman",Font.PLAIN,18));
//随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
 g.setColor(getRandColor(160,200));
 for(int i=0;i<155;i++){
  int x=rand.nextInt(width);
  int y=rand.nextInt(height);
  int x1=rand.nextInt(12);
  int y1=rand.nextInt(12);
  g.drawLine(x,y,x+x1,y+y1);
 
 }
 //取随机产生的4位验证码
 String sRand="";
 for(int i=0;i<4;i++){
  String strRand=String.valueOf(rand.nextInt(10));
  sRand+=strRand;
  //将验证码显示到图像中
  g.setColor(new Color(20+rand.nextInt(110),20+rand.nextInt(110),20+rand.nextInt(110)));
  g.drawString(strRand,13*i+6,16);

 }
 //将验证码放入session
  session.setAttribute("rand",sRand);
 
 g.dispose();
//输出图象到页面
 ImageIO.write(image, "JPEG", response.getOutputStream());

 

%>


只有注册用户登录后才能发表评论。


网站导航:
 

posts - 146, comments - 143, trackbacks - 0, articles - 0

Copyright © flustar