生成驗證碼的jsp頁面createCode.jsp:
<%@ page language="java" contentType="image/jpegRoomAction.javaRoomAction.javaRoomAction.java; charset=utf-8" pageEncoding="utf-8"%>
<%@page import="java.io.*,java.util.*,com.sun.image.codec.jpeg.*,java.awt.*,java.awt.image.*"%>
<%
String s = "";
int intCount = 0;
/**
* 驗證碼寬度
*/
int width = 100;
/**
* 驗證碼高度
*/
int height = 25;
/**
* 驗證碼字符集
*/
char[] code = new char[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'I', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U',
'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't',
'u', 'v', 'w', 'x', 'y', 'z', '2', '3', '4', '5', '6', '7',
'8', '9' };
/**
* 創建一個隨機數生成器類
*/
Random random = new Random();
// 隨機產生codeCount數字的驗證碼。
for (int i = 0; i < 4; i++) {
// 得到隨機產生的驗證碼數字。
String strRand = String.valueOf(code[random
.nextInt(code.length)]);
// 將產生的四個隨機數組合在一起。
s = s + strRand;
}
// 保存入session,用于與用戶的輸入進行比較.
// 注意比較完之后清除session.
session.setAttribute("rand", s);
response.setContentType("image/gif");
// 定義圖像buffer
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D gra = image.createGraphics();
// 將圖像填充為白色
gra.setColor(Color.WHITE);
gra.fillRect(0, 0, width, height);
// 創建字體,字體的大小應該根據圖片的高度來定。
//字體對象構造方法public Font(String familyName,int style,int size)
// familyName字體名;字體名可以分成兩大類:中文字體:宋體、楷體、黑體等;英文字體:Arial、Times New Roman等等;
// style風格。PLAIN普通字體,BOLD(加粗),ITALIC(斜體),Font.BOLD+ Font.ITALIC(粗斜體)
//size 大小
Font font = new Font("宋體", Font.BOLD + Font.ITALIC, height - 1);//
// 設置字體。
gra.setFont(font);
// 畫邊框。
gra.setColor(getColor());
gra.drawRect(0, 0, width - 1, height - 1);
// 隨機產生干擾線,使圖象中的認證碼不易被其它程序探測到。
gra.setColor(Color.BLACK);
for (int i = 0; i < 50; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(5);
int yl = random.nextInt(5);
gra.setColor(getColor());
gra.drawLine(x, y, x + xl, y + yl);
}
// 輸出數字
char c;
for (int i = 0; i < 4; i++) {
c = s.charAt(i);
gra.drawString(c + "", i * 25 + 4, 20); // 25為寬度,11為上下高度位置
}
OutputStream toClient = response.getOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(toClient);
encoder.encode(image);
toClient.close();
out.clear();
out = pageContext.pushBody();
%>
<%!private Color getColor() {
Random random = new Random();
int red = 0, green = 0, blue = 0;
// 產生隨機的顏色分量來構造顏色值,這樣輸出的每位數字的顏色值都將不同。
red = random.nextInt(255);
green = random.nextInt(255);
blue = random.nextInt(255);
return new Color(red, green, blue);
}%>
引用驗證碼的的jsp頁面regist.jsp:
<script type="text/javascript" >
//<![CDATA[
function idenfunc()
{
$("#input06").val("");
$("#idenimage").attr("src","/html/member/createMa.jsp?temp="+new Date());
}
function toRegist(){
$.get('/getyzqqLoginAction.do?id='+$('#input06').val(),function(data){
if(data=='1'){
alert('效驗碼不正確,請重新輸入.');
$('#errorM').html('效驗碼不正確,請重新輸入.');
return;
}
})
}
//]]>
</script>
<html>
<head><title></title></head>
<body>
<div>
<s:form>
<table>
<tr>
<th><label for="input06">校驗碼:</label></th>
<td><input type="text" class="input01" id="input06" /></td>
<td><img id="idenimage" src="/html/member/createMa.jsp" alt="" />
<a href="#" onclick="idenfunc();" class="blue">看不清</a>
</td>
</tr>
</table>
</s:form>
<div class="infobox_register">
<p>
<img onclick="toRegist();return false;" style="cursor:pointer" src="http://www.tkk7.com/images/button/btn01_regist_info.gif" alt="" />
</p>
</div>
</body>
</html>
java驗證代碼:
public void getyz()throws Exception{
HttpServletRequest request = ServletActionContext.getRequest();
String identity = request.getParameter("id") != null ? request.getParameter("id") : "" ;
HttpSession session = request.getSession();
String realidentity=(String)session.getAttribute("rand");
HttpServletResponse response = ServletActionContext.getResponse();
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
if(!identity.trim().equalsIgnoreCase(realidentity.trim())){
response.getWriter().write("1");
response.getWriter().close();
}else{
session.removeAttribute("rand");
response.getWriter().write("0");
response.getWriter().close();
}
}

]]>