JSP好用驗(yàn)證碼

新建JSP文件 如code.jsp

復(fù)制如下代碼

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"

import="java.io.*,

java.util.*,

com.sun.image.codec.jpeg.*,

java.awt.*,

java.awt.image.*"%>

<%

String s = "";

int intCount = 0;

/**

* 驗(yàn)證碼寬度

*/

int width=113;

/**

* 驗(yàn)證碼高度

*/

int height=30;

/**

* 驗(yàn)證碼字符集

*/

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',

'2','3','4','5','6','7','8','9'};

/**

*? 創(chuàng)建一個(gè)隨機(jī)數(shù)生成器類

*/

Random random = new Random();

// 隨機(jī)產(chǎn)生codeCount數(shù)字的驗(yàn)證碼沮榜。

for (int i = 0; i < 4; i++) {

// 得到隨機(jī)產(chǎn)生的驗(yàn)證碼數(shù)字戚绕。

String strRand = String.valueOf(code[random.nextInt(code.length)]);

// 將產(chǎn)生的四個(gè)隨機(jī)數(shù)組合在一起而叼。

s=s+strRand;

}

// 保存入session,用于與用戶的輸入進(jìn)行比較.

// 注意比較完之后清除session.

session.setAttribute("validateCode", 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);

// 創(chuàng)建字體,字體的大小應(yīng)該根據(jù)圖片的高度來定碾阁。

//字體對(duì)象構(gòu)造方法public Font(String familyName,int style,int size)

// familyName字體名;字體名可以分成兩大類:中文字體:宋體、楷體氯哮、黑體等;英文字體:Arial商佛、Times New Roman等等喉钢;

// style風(fēng)格。PLAIN普通字體良姆,BOLD(加粗)肠虽,ITALIC(斜體),F(xiàn)ont.BOLD+ Font.ITALIC(粗斜體)

//size 大小

Font font = new Font("宋體", Font.BOLD+Font.ITALIC, height-1);//

// 設(shè)置字體玛追。

gra.setFont(font);

// 畫邊框税课。

gra.setColor(getColor());

gra.drawRect(0, 0, width - 1, height - 1);

// 隨機(jī)產(chǎn)生干擾線,使圖象中的認(rèn)證碼不易被其它程序探測(cè)到痊剖。

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);

}

// 輸出數(shù)字

char c;

for (int i = 0; i < 4; i++) {

c = s.charAt(i);

gra.drawString(c + "", i * 25 + 4, 25); // 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;

// 產(chǎn)生隨機(jī)的顏色分量來構(gòu)造顏色值,這樣輸出的每位數(shù)字的顏色值都將不同陆馁。

red = random.nextInt(255);

green = random.nextInt(255);

blue = random.nextInt(255);

return new Color(red,green,blue);

}

%>

session名為 validateCode

可在上面代碼:

session.setAttribute("validateCode", s);

中定義

引用方式:


<img src="code.jsp">

可添加樣式控制大小? 建議配合點(diǎn)擊刷新事件引用

最后強(qiáng)調(diào)一下 調(diào)用jsp生成驗(yàn)證碼后 值自動(dòng)存在session中 默認(rèn)為validateCode
?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末找颓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子叮贩,更是在濱河造成了極大的恐慌击狮,老刑警劉巖佛析,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異彪蓬,居然都是意外死亡寸莫,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門寞焙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來储狭,“玉大人,你說我怎么就攤上這事捣郊×杀罚” “怎么了?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵呛牲,是天一觀的道長(zhǎng)刮萌。 經(jīng)常有香客問我,道長(zhǎng)娘扩,這世上最難降的妖魔是什么着茸? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮琐旁,結(jié)果婚禮上涮阔,老公的妹妹穿的比我還像新娘。我一直安慰自己灰殴,他們只是感情好敬特,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著牺陶,像睡著了一般伟阔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上掰伸,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天皱炉,我揣著相機(jī)與錄音,去河邊找鬼狮鸭。 笑死合搅,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的怕篷。 我是一名探鬼主播历筝,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼廊谓!你這毒婦竟也來了梳猪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎春弥,沒想到半個(gè)月后呛哟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡匿沛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年扫责,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逃呼。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鳖孤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出抡笼,到底是詐尸還是另有隱情苏揣,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布推姻,位于F島的核電站平匈,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏藏古。R本人自食惡果不足惜增炭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拧晕。 院中可真熱鬧隙姿,春花似錦、人聲如沸厂捞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蔫敲。三九已至,卻和暖如春炭玫,著一層夾襖步出監(jiān)牢的瞬間奈嘿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工吞加, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留裙犹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓衔憨,卻偏偏與公主長(zhǎng)得像叶圃,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子践图,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring mvc之java實(shí)現(xiàn)登陸時(shí)驗(yàn)證碼邏輯 摘要 一個(gè)優(yōu)良的web系統(tǒng)的登陸模塊或者功能掺冠,為了防止機(jī)器暴力...
    森森不熄閱讀 3,038評(píng)論 1 1
  • 經(jīng)過對(duì)django的初步學(xué)習(xí),我們已經(jīng)對(duì)后臺(tái)的基本流程以及django的運(yùn)作有了一定的了解码党,但是這還不足夠德崭,dja...
    coder_ben閱讀 3,827評(píng)論 8 34
  • http://blog.csdn.net/ayhlay/article/details/13625275 1.驗(yàn)證...
    蘋果_283e閱讀 443評(píng)論 0 0
  • 有沒有那么一個(gè)人眉厨,讓你默默地關(guān)心著锌奴,愛著,卻不敢靠近
    一笙我的他閱讀 165評(píng)論 0 0
  • 禪茶一味憾股,品茶就是悟道鹿蜀。茶,遇水舍己服球,而成茶飲茴恰,是為布施;葉蘊(yùn)茶香有咨,猶如戒香琐簇,是為持戒;忍蒸炒酵座享,受擠壓揉婉商,是為忍...
    xcy無名閱讀 410評(píng)論 0 1