验证码

话不多说 直接上代码 里面有详细的注释,新手可以进来看看,有不对的或者可以改进的地方 希望您指正!

package checkCode;

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.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;

public class CheckCode extends HttpServlet{

    /**
     * @author zx
     */
    private static final long serialVersionUID = 1L;

    @Override
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
        int width = 100;
        int height = 40;
        BufferedImage bfi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        
        Graphics g = bfi.getGraphics();//获得画笔
        g.setColor(Color.WHITE);//设置背景颜色
        g.fillRect(0, 0, width, height);//画矩形框
        
        String str = "";//保存随机数
        Random r = new Random();
        
        g.setFont(new Font("a",Font.BOLD,20));//设置字体
        
        for(int i=0;i<4;i++){
            int num = r.nextInt(10);//生成十以内的随机数
            g.setColor(new Color(r.nextInt(255),r.nextInt(255) ,r.nextInt(255)  ));
            g.drawString(""+num, 20+i, 20+r.nextInt(10));//20+r 表示 每一位数字之间的间隔,自己调试出位置
                                                         //nextInt(10) 数字离中心位置的上下波动距离
        
        }
         //画干扰线
        for(int i=0;i<10;i++){
            g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255) ));//设置颜色
            g.drawLine(r.nextInt(100), r.nextInt(40), r.nextInt(100), r.nextInt(40));
        }
        
        g.dispose();//这是最重要的 ,不愕然显示不出来哦
        
        ImageIO.write(bfi, "jpeg", response.getOutputStream());//图片用字节流,直接得到
        
    }
 
    
}

posted @ 2016-05-09 18:38  积累+沉淀  阅读(159)  评论(0编辑  收藏  举报