這篇文章主要介紹了Java如何實(shí)現(xiàn)驗(yàn)證碼生成,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

驗(yàn)證碼大家都知道,它的作用也不用我多說(shuō)了吧。如果不太清楚請(qǐng)參見(jiàn)百度百科中的解釋,一般驗(yàn)證碼的生成就是隨機(jī)產(chǎn)生字符(數(shù)字、字母或者漢字等),然后將這些生成的字符繪制成一張圖片,再在圖片上加上一些干擾元素,如各種線條之類的。好了廢話不多說(shuō)一起往下看:

簡(jiǎn)單的登錄頁(yè)面(代碼并不完整,只有驗(yàn)證碼部分)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>驗(yàn)證碼</title>
<script type="text/javascript">
<span data-filtered="filtered"></span><span > </span> //刷新驗(yàn)證碼的js函數(shù)
<span > </span>function changeCode() {
<span > </span>var imgNode = document.getElementById("vimg");
<span > </span>//重新加載驗(yàn)證碼,達(dá)到刷新的目的
<span > </span>imgNode.src = "servlet/AuthImageServlet?t=" + Math.random(); // 防止瀏覽器緩存的問(wèn)題
<span > </span>}
</script>
</head>
<body>
<form action="checkServlet" method="post">
<label>輸入驗(yàn)證碼</label><br/>
<input type="text" name="randomCode"/><img id="vimg" title="點(diǎn)擊更換" onclick="changeCode();" src="servlet/AuthImageServlet"><br/>
<input type="submit" value="submit">
</form>
</body>
</html>通過(guò)session.getAttribute("rand"),獲得生成的驗(yàn)證碼,然后跟用戶輸入的進(jìn)行比較,再根據(jù)比較結(jié)果做相應(yīng)的處理。
通過(guò)servlet生成驗(yàn)證碼:
package com.util.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.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class AuthImageServlet extends HttpServlet {
private static final String CONTENT_TYPE = "text/html; charset=gb2312";
//設(shè)置字母的大小,大小
private Font mFont = new Font("Times New Roman", Font.PLAIN, 17);
public void init() throws ServletException
{
super.init();
}
Color getRandColor(int fc,int bc)
{
Random random = new Random();
if(fc>255) fc=255;
if(bc>255) bc=255;
int r=fc+random.nextInt(bc-fc);
int g=fc+random.nextInt(bc-fc);
int b=fc+random.nextInt(bc-fc);
return new Color(r,g,b);
}
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
//表明生成的響應(yīng)是圖片
response.setContentType("image/jpeg");
int width=100, height=18;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
Random random = new Random();
g.setColor(getRandColor(200,250));
g.fillRect(1, 1, width-1, height-1);
g.setColor(new Color(102,102,102));
g.drawRect(0, 0, width-1, height-1);
g.setFont(mFont);
g.setColor(getRandColor(160,200));
//畫隨機(jī)線
for (int i=0;i<155;i++)
{
int x = random.nextInt(width - 1);
int y = random.nextInt(height - 1);
int xl = random.nextInt(6) + 1;
int yl = random.nextInt(12) + 1;
g.drawLine(x,y,x + xl,y + yl);
}
//從另一方向畫隨機(jī)線
for (int i = 0;i < 70;i++)
{
int x = random.nextInt(width - 1);
int y = random.nextInt(height - 1);
int xl = random.nextInt(12) + 1;
int yl = random.nextInt(6) + 1;
g.drawLine(x,y,x - xl,y - yl);
}
//生成隨機(jī)數(shù),并將隨機(jī)數(shù)字轉(zhuǎn)換為字母
String sRand="";
for (int i=0;i<6;i++)
{
int itmp = random.nextInt(26) + 65;
char ctmp = (char)itmp;
sRand += String.valueOf(ctmp);
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
g.drawString(String.valueOf(ctmp),15*i+10,16);
}
HttpSession session = request.getSession(true);
session.setAttribute("rand",sRand);
g.dispose();
ImageIO.write(image, "JPEG", response.getOutputStream());
}
}web.xml中的servlet配置信息:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>AuthImageServlet</servlet-name> <servlet-class>com.util.servlet.AuthImageServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AuthImageServlet</servlet-name> <url-pattern>/servlet/AuthImageServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Java如何實(shí)現(xiàn)驗(yàn)證碼生成”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
當(dāng)前題目:Java如何實(shí)現(xiàn)驗(yàn)證碼生成-創(chuàng)新互聯(lián)
本文鏈接:http://chinadenli.net/article10/diiido.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站策劃、App開(kāi)發(fā)、動(dòng)態(tài)網(wǎng)站、企業(yè)網(wǎng)站制作、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容