Java 生成Web验证码

使用Java生成图片验证码

本文适合学习java的初学者,通过java生成验证码图片并通过Servlet控制器返回到页面

例子如下:


import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.https.HttpServlet;
import javax.servlet.https.HttpServletRequest;
import javax.servlet.https.HttpServletResponse;

public class ImageServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }

    
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        String type = request.getParameter("type").equals("134")?"admin":"customer";
        
        //定义BufferedImage 对象
        BufferedImage bi = new BufferedImage(68, 22, BufferedImage.TYPE_INT_BGR);
       //获得Graphics对象
        Graphics g = bi.getGraphics();
        //得到背景颜色
        g.setColor(getRandColor(200,250));  
        g.fillRect(0, 0, 68, 22);    //绘制背景  
       //设置背景颜色
       //验证字符串数组
        char [] ch = "AaBb1CcDd2EeFf3GgHh4IiJj5KkLl6MmNn7OoPp8QqR9rSsT0tUuVvWwXxYyZz".toCharArray();
        
        Random r = new Random();
        int len = ch.length,index;
        //随机获取字符
       StringBuffer sb = new StringBuffer();
       for (int i = 0; i < 5; i++) {
           //通过Random产生随机验证码信息
            index = r.nextInt(len);
            g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255)));
            //使用Graphics绘制图片
            g.drawString(ch[index]+"",(i*14)+1,16);
           //字符串追加
            sb.append(ch[index]);
        }
        //记录验证码信息到session
        System.out.println(type);
        request.getSession().setAttribute(type, sb.toString());
        //使用ImageIO输出图片
        ImageIO.write(bi, "JPG", response.getOutputStream());
            
    }
    /*该方法主要作用是获得随机生成的颜色*/   
    public Color getRandColor(int s,int e){  
        Random random=new Random ();  
        if(s>255) s=255;  
        if(e>255) e=255;  
        int r,g,b;  
        r=s+random.nextInt(e-s);    //随机生成RGB颜色中的r值  
        g=s+random.nextInt(e-s);    //随机生成RGB颜色中的g值  
        b=s+random.nextInt(e-s);    //随机生成RGB颜色中的b值  
        return new Color(r,g,b);  
    }
}


这里生成的图片样式比较简单,您可以自行添加样式,如:线条和、像素点、扭曲等去控制验证码的识别难度

最后修改:2018/03/25 21:38
如果觉得我的文章对你有用,请随意赞赏

发表评论

颜文字