1. 程式人生 > >生成純數字的驗證碼

生成純數字的驗證碼

public class RandomCode {
    private int width = 84;
    private int height = 28;
    public void getCode(HttpServletRequest request,HttpServletResponse response) throws IOException{
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics2D g = image.createGraphics();
        
        //建立一個隨機數生成器類
        Random random = new Random();
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, width, height);
        
        //建立字型,字型的大小應該根據圖片的高度來定
        Font font = new Font("雅黑", Font.ITALIC, 30);
        //設定字型
        g.setFont(font);
        //畫邊框
        g.setColor(Color.BLACK);
        g.drawRect(0, 0, width, height);
        //隨機產生160條幹擾線,使影象中的認證碼不易被其他程式探測到
        g.setColor(Color.GRAY);
        for (int i = 0; i < 10; 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);
        }
        //randomCode用於儲存隨機產生的驗證碼,以便使用者登入後進行驗證
        StringBuffer randomCode=new StringBuffer();
        int red=0,green=0,blue=0;
        //隨機產生4位數字的驗證碼
        for (int i = 0; i < 5; i++) {
            //得到產生的隨機驗證碼數字
            String strRand = String.valueOf(random.nextInt(10));
            //產生隨機的顏色分量來構造顏色值,這樣輸出的每位數字的顏色值都將不同
            red=random.nextInt(200);
            green=random.nextInt(200);
            blue=random.nextInt(200);
            
            //產生隨機高度13至height之間
            float imght = 0;
            while(imght<=12){
                imght = Float.parseFloat(String.valueOf(random.nextInt(height)));
            }
            //用隨機產生的顏色將驗證碼繪製到影象中
            g.setColor(new Color(red, green, blue));
            g.drawString(strRand, 13*i+6, height);
            //將產生的四個隨機數組合在一起
            randomCode.append(strRand);
        }
        //將四位數字的驗證碼儲存到Session中
        HttpSession session = request.getSession();
        session.setAttribute("randomCode", randomCode.toString());
        //禁止影象快取
        response.setHeader("Pragma", "no-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);
        response.setContentType("image/jpeg");
        //將影象輸出到Servlet輸出流中
        ServletOutputStream stream = response.getOutputStream();
        ImageIO.write(image, "jpeg", stream);
        stream.close();
    }
}