jsp驗證碼的產生

來源:互聯網
上載者:User

標籤:

 

 

ValidateCodeServlet.java

package com.hpe.servlet;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.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet("/ValidateCodeServlet")public class ValidateCodeServlet extends HttpServlet {    private static final long serialVersionUID = 1L;    public ValidateCodeServlet() {        super();    }    protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        doPost(request, response);    }    protected void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        // 回應標頭資訊        response.setHeader("Pragma", "No-Cache");        response.setHeader("Cache-Control", "no-cache");        response.setDateHeader("Expries", 0);        // 隨機數產生類        Random random = new Random();        // 定義驗證碼的位元        int size = 5;        // 定義變數儲存產生的驗證碼        String vCode = "";        char c;        // 產生驗證碼        for (int i = 0; i < size; i++) {            // 產生一個26以內的隨機整數            int number = random.nextInt(26);            // 如果產生的是偶數,則隨機產生一個數字            if (number % 2 == 0) {                c = (char) (‘0‘ + (char) ((int) (Math.random() * 10)));                // 如果產生的是奇數,則隨機產生一個字母            } else {                c = (char) ((char) ((int) (Math.random() * 26)) + ‘A‘);            }            vCode = vCode + c;        }        // 儲存產生的5位驗證碼        request.getSession().setAttribute("vCode", vCode);        // 驗證碼圖片的產生        // 定義圖片的寬度和高度        int width = (int) Math.ceil(size * 20);        int height = 50;        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);        // 擷取圖片的上下文        Graphics gr = image.getGraphics();        // 設定圖片背景顏色        gr.setColor(Color.WHITE);        gr.fillRect(0, 0, width, height);        // 設定圖片邊框        gr.setColor(Color.GRAY);        gr.drawRect(0, 0, width - 1, height - 1);        // 畫十條幹擾線        for (int i = 0; i < 5; i++) {            int x1 = random.nextInt(width);            int y1 = random.nextInt(height);            int x2 = random.nextInt(width);            int y2 = random.nextInt(height);            gr.setColor(randomColor());            gr.drawLine(x1, y1, x2, y2);        }        // 設定字型,畫驗證碼        gr.setColor(randomColor());        gr.setFont(randomFont());        gr.drawString(vCode, 10, 22);        // 映像生效        gr.dispose();        // 輸出到頁面        ImageIO.write(image, "JPEG", response.getOutputStream());    }    // 產生隨機的顏色    private Color randomColor() {        int red = r.nextInt(150);        int green = r.nextInt(150);        int blue = r.nextInt(150);        return new Color(red, green, blue);    }    private String[] fontNames = { "宋體", "華文楷體", "黑體", "微軟雅黑", "楷體_GB2312" };    private Random r = new Random();    // 產生隨機的字型    private Font randomFont() {        int index = r.nextInt(fontNames.length);        String fontName = fontNames[index];// 產生隨機的字型名稱        int style = r.nextInt(4);        int size = r.nextInt(3) + 24; // 產生隨機字型大小, 24 ~ 28        return new Font(fontName, style, size);    }}

直接運行Java產生的結果:

在網頁上顯示的效果:

 

jsp驗證碼的產生

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.