驗證碼的實現

    各種網頁的登錄界面上,登錄時都有驗證碼,常規的驗證碼就是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;
	}
}

    不足之處,請大家多多指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章