各種網頁的登錄界面上,登錄時都有驗證碼,常規的驗證碼就是4位,26個字母及10個阿拉伯數字組成,下面,我就寫一個常規驗證碼的製作
package com.tly.Servlet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.p_w_picpath.BufferedImage; import java.io.IOException; import java.io.OutputStream; import java.util.Random; import javax.p_w_picpathio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class DrawImage extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* * 繪圖 */ //1.創建一個內存映像(畫布) BufferedImage p_w_picpath = new BufferedImage(80, 30, BufferedImage.TYPE_INT_RGB); //2.獲得畫筆 Graphics g = p_w_picpath.getGraphics(); //3.設置畫筆顏色 g.setColor(new Color(255,255,255)); //4.設置畫布背景顏色 g.fillRect(0, 0, 80, 30); //5.生成一個隨機數 Random r = new Random(); //String number = r.nextInt(10000) + ""; String number = getNumber(4); //將隨機數綁定到session對象 HttpSession session = request.getSession(); session.setAttribute("number", number); //6.將隨機數繪製到圖片上 g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255))); g.setFont(new Font(null, Font.ITALIC, 24)); g.drawString(number, 4, 25); //7.加干擾線 for(int i = 0;i < 8;i++){ g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255))); g.drawLine(r.nextInt(80), r.nextInt(30), r.nextInt(80), r.nextInt(30)); } /* * 壓縮圖片,然後輸出 */ //1.設置服務器返回的數據類型爲圖片 response.setContentType("p_w_picpath/jpeg"); //2.獲得輸出流 OutputStream os = response.getOutputStream(); //3.壓縮圖片並輸出 ImageIO.write(p_w_picpath, "jpeg", os); os.close(); } private String getNumber(int size){ String number = ""; String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; Random r = new Random(); for(int i = 0;i < size;i++){ number += chars.charAt(r.nextInt(chars.length())); } return number; } }
不足之處,請大家多多指正。