随机验证码

随机验证码程序

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.servlet.Servlet;
import  javax.servlet.ServletException;

import  javax.servlet.http.HttpServlet;
import  javax.servlet.http.HttpServletRequest;
import  javax.servlet.http.HttpServletResponse;

/**
 * 
@version      1.0
 * 
@author       baiyf
 
*/

public   class  ValidateImg  extends  HttpServlet  implements  Servlet  {
    
public  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);
    }

    
/**
    * 
@see  javax.servlet.http.HttpServlet#void (javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
    
*/

    
public   void  doGet(HttpServletRequest req, HttpServletResponse resp)
        
throws  ServletException, IOException  {
        doPost(req, resp);
    }


    
/**
    * 
@see  javax.servlet.http.HttpServlet#void (javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
    
*/

    
public   void  doPost(HttpServletRequest req, HttpServletResponse resp)
        
throws  ServletException, IOException  {
        resp.setHeader(
" Pragma " " No-cache " );
        resp.setHeader(
" Cache-Control " " no-cache " );
        resp.setDateHeader(
" Expires " 0 );

//  在内存中创建图象 
         int  width  =   90 , height  =   40 ;
        BufferedImage image 
=      new  BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

//  获取图形上下文 
        Graphics g  =  image.createGraphics();

//  设定背景色 
        g.setColor(getRandColor( 180 250 ));
        g.fillRect(
0 0 , width, height);
        
        Random random 
=   new  Random();    
        
        
// 生成干扰椭圆    
         for  ( int  i  =   0 ; i  <   5 ; i ++ {
            g.setColor(getRandColor(
50 100 ));
            
int  x  =  random.nextInt(width);
            
int  y  =  random.nextInt(height);
            g.drawOval(x, y, 
4 4 );
        }


        g.setFont(
new  Font( "" , Font.PLAIN,  40 ));

        String sRand 
=   "" ;
        
for  ( int  i  =   0 ; i  <   4 ; i ++ {
        
//  取随机产生的认证码(4位数字) 
            String rand  =  String.valueOf(random.nextInt( 10 ));
            sRand 
+=  rand;
        
//  随机产生颜色    
            g.setColor(
                
new  Color(
                    
20   +  random.nextInt( 80 ),
                    
20   +  random.nextInt( 100 ),
                    
20   +  random.nextInt( 90 )));
        
//  画数字
            g.drawString(rand, ( 17   +  random.nextInt( 3 ))  *  i  +   8 34 );

    
// 生成干扰线
             for  ( int  k  =   0 ; k  <   12 ; k ++ {
                
int  x  =  random.nextInt(width);
                
int  y  =  random.nextInt(height);
                
int  xl  =  random.nextInt( 9 );
                
int  yl  =  random.nextInt( 9 );
                g.drawLine(x, y, x 
+  xl, y  +  yl);
            }

        }

        req.getSession().setAttribute(
" rand " ,sRand);
        g.dispose();
        javax.imageio.ImageIO.write(image, 
" JPEG " , resp.getOutputStream());

    }

}

posted on 2006-06-26 22:02 baim 阅读(207) 评论(0)  编辑  收藏


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


网站导航:
 
<2006年6月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

导航

常用链接

随笔分类(27)

随笔档案(28)

搜索

最新评论