文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>生成验证码图片的jsp页面

生成验证码图片的jsp页面

时间:2008-10-27  来源:yong_kang

<%@ page contentType="image/jpeg"%>  
<%@ page import="java.awt.Font,
                 java.awt.Color,
     java.util.Random,
     java.awt.Graphics,
     java.io.OutputStream,
     javax.imageio.ImageIO,
     java.awt.image.BufferedImage"%>
<%! 
 private int type = 0; //类型:0 字母数字,  1 数字;
 private static final String IMAGE_SESSION_ATTRIBUTE = "TEMP_IMAGE"; 
 //初始化随机数表
 private static char c[] = new char[62];
 static{
  for (int i=97, j=0; i<123; i++, j++) {
   c[j] = (char) i;
  }  
  for (int o=65, p=26; o<91; o++, p++) {
   c[p] = (char) o;
  }
  for (int m=48, n=52; m<58; m++, n++) {
   c[n] = (char) m;
  }   
 }
 //给定范围获得随机颜色
 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);  
 }
%>  
<% 
    //设置页面不缓存  
 response.setHeader("Pragma","No-cache");  
 response.setHeader("Cache-Control","no-cache");  
 response.setDateHeader("Expires",   0);  
 response.setContentType("image/jpeg");  //在内存中创建图象  
 int width=60, height=20;  
 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(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  = 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);  
 }  
   
 //取随机产生的认证码(4位数字)  
 String sRand = "";  
 for (int i=0; i<4; i++){ 
  String rand = null;
  if(0 == type){
   int x = random.nextInt(62);
   rand = String.valueOf(c[x]);
  }else{
   rand = String.valueOf(random.nextInt(10));  
  }
  sRand += rand;  
  //将认证码显示到图象中  
  g.setColor(new Color(20+random.nextInt(110), 20+random.nextInt(110), 20+random.nextInt(110)));  
  //调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成  
  g.drawString(rand, 13*i+6, 16);  
 }  
   
 //将认证码存入SESSION  
 ///session.setAttribute(IMAGE_SESSION_ATTRIBUTE, sRand);  
 session.setAttribute("zxfk",sRand);
 //图象生效  
 g.dispose();  
  
 OutputStream os = response.getOutputStream();
 //输出图象到页面
 ImageIO.write(image, "JPEG", os);  
 os.flush();
 os.close();
 os = null;
 response.flushBuffer();
 out.clear();
 out = pageContext.pushBody();
%>  
   
 
<img title="请在前面的输入框中输入此处显示的数字" src="/admin/admin/tokenimage.jsp">
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载