⑴ 驗證碼源代碼,jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="java.awt.image.BufferedImage"%>
<%@page import="java.awt.Graphics2D"%>
<%@page import="java.awt.Color"%>
<%@page import="java.awt.Font"%>
<%@page import="javax.imageio.ImageIO"%>
<%
int width = 60;
int height = 20;
// 創建具有可訪問圖像數據緩沖區的Image
BufferedImage buffImg = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
// 創建一個隨機數生成器
Random random = new Random();
g.setColor(Color.WHITE);
g.fillRect(0, 0, width, height);
// 創建字體,字體的大小應該根據圖片的高度來定
Font font = new Font("Times New Roman", Font.PLAIN, 18);
// 設置字體
g.setFont(font);
// 畫邊框
g.setColor(Color.BLACK);
g.drawRect(0, 0, width - 1, height - 1);
// 隨機產生160條干擾線
g.setColor(Color.LIGHT_GRAY);
for (int i = 0; i < 160; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int x1 = random.nextInt(12);
int y1 = random.nextInt(12);
g.drawLine(x, y, x + x1, y + y1);
}
// randomCode 用於保存隨機產生的驗證碼
StringBuffer randomCode = new StringBuffer();
int red = 0, green = 0, blue = 0;
// 隨機產生4位數字的驗證碼
for (int i = 0; i < 4; i++) {
// 得到隨機產生的驗證碼數字
String strRand = String.valueOf(random.nextInt(10));
// 產生隨機的顏色分量來構造顏色值
red = random.nextInt(110);
green = random.nextInt(50);
blue = random.nextInt(50);
// 用隨機產生的顏色將驗證碼繪制到圖像中
g.setColor(new Color(red, green, blue));
g.drawString(strRand, 13 * i + 6, 16);
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 sos = response.getOutputStream();
ImageIO.write(buffImg, "jpeg", sos);
sos.close();
//sos = null;
out.clear();
out = pageContext.pushBody();
%>