国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JSP > 正文

JSP生成彩色驗(yàn)證碼程序

2024-09-05 00:20:23
字體:
供稿:網(wǎng)友

生成有4個(gè)隨機(jī)數(shù)字和雜亂背景的圖片,數(shù)字和背景顏色會(huì)改變,服務(wù)器端刷新(用history.go(-1)也會(huì)變) 

產(chǎn)生驗(yàn)證碼圖片的文件image.jsp

<%@ page contenttype="image/jpeg" import="java.awt.*,
java.awt.image.*,java.util.*,javax.imageio.*" %>
<%!
color getrandcolor(int fc,int bc){//給定范圍獲得隨機(jī)顏色
        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);
        }
%>
<%
//設(shè)置頁面不緩存
response.setheader("pragma","no-cache");
response.setheader("cache-control","no-cache");
response.setdateheader("expires", 0);

// 在內(nèi)存中創(chuàng)建圖象
int width=60, height=20;
bufferedimage image = new bufferedimage(width, height, bufferedimage.type_int_rgb);

// 獲取圖形上下文
graphics g = image.getgraphics();

//生成隨機(jī)類
random random = new random();

// 設(shè)定背景色
g.setcolor(getrandcolor(200,250));
g.fillrect(0, 0, width, height);

//設(shè)定字體
g.setfont(new font("times new roman",font.plain,18));

//畫邊框
//g.setcolor(new color());
//g.drawrect(0,0,width-1,height-1);

// 隨機(jī)產(chǎn)生155條干擾線,使圖象中的認(rèn)證碼不易被其它程序探測(cè)到
g.setcolor(getrandcolor(160,200));
for (int i=0;i<155;i++)
{
 int x = random.nextint(width);
 int y = random.nextint(height);
        int xl = random.nextint(12);
        int yl = random.nextint(12);
 g.drawline(x,y,x+xl,y+yl);
}

// 取隨機(jī)產(chǎn)生的認(rèn)證碼(4位數(shù)字)
string srand="";
for (int i=0;i<4;i++){
    string rand=string.valueof(random.nextint(10));
    srand+=rand;
    // 將認(rèn)證碼顯示到圖象中
    g.setcolor(new color(20+random.nextint(110),20+random.nextint(110),20+random.nextint(110)));
//調(diào)用函數(shù)出來的顏色相同,可能是因?yàn)榉N子太接近,所以只能直接生成
    g.drawstring(rand,13*i+6,16);
}

// 將認(rèn)證碼存入session
session.setattribute("rand",srand);

// 圖象生效
g.dispose();

// 輸出圖象到頁面
imageio.write(image, "jpeg", response.getoutputstream());
%>



使用驗(yàn)證碼圖片的文件a.jsp 

<%@ page contenttype="text/html;charset=gb2312" %>
<!doctype html public "-//w3c//dtd html 4.01 transitional//en">
<html>
<head>
<title>認(rèn)證碼輸入頁面</title>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<meta http-equiv="pragma" content="no-cache"> 
<meta http-equiv="cache-control" content="no-cache"> 
<meta http-equiv="expires" content="0"> 
</head>
<body>
<form method=post action="check.jsp">
<table>
<tr>
<td align=left>系統(tǒng)產(chǎn)生的認(rèn)證碼:</td>
<td><img border=0 src="image.jsp"></td>
</tr>
<tr>
<td align=left>輸入上面的認(rèn)證碼:</td>
<td><input type=text name=rand maxlength=4 value=""></td>
</tr>
<tr>
<td colspan=2 align=center><input type=submit value="提交檢測(cè)"></td>
</tr>
</form>
</body>
</html>



驗(yàn)證的頁面check.jsp

<%@ page contenttype="text/html; charset=gb2312" language="java" import="java.sql.*" errorpage="" %>
<html>
<head>
<title>認(rèn)證碼驗(yàn)證頁面</title>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<meta http-equiv="pragma" content="no-cache"> 
<meta http-equiv="cache-control" content="no-cache"> 
<meta http-equiv="expires" content="0"> 
</head>

<body>
<% 
 string rand = (string)session.getattribute("rand");
 string input = request.getparameter("rand");
%>
系統(tǒng)產(chǎn)生的認(rèn)證碼為: <%= rand %><br>
您輸入的認(rèn)證碼為: <%= input %><br>
<br>
<%
  if (rand.equals(input)) {
%>
<font color=green>輸入相同,認(rèn)證成功!</font>
<%
  } else {
%>
<font color=red>輸入不同,認(rèn)證失敗!</font>
<%
  }
%>
</body>
</html>

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 麻城市| 贵阳市| 九龙坡区| 湟中县| 闽清县| 峡江县| 宿州市| 平乐县| 彰化市| 潼南县| 东乡族自治县| 烟台市| 清远市| 嵊州市| 乃东县| 富民县| 怀柔区| 军事| 凌海市| 探索| 浮梁县| 黄浦区| 固镇县| 碌曲县| 贵溪市| 平邑县| 乌恰县| 锡林浩特市| 多伦县| 安吉县| 苍梧县| 原阳县| 名山县| 湟源县| 福贡县| 阳东县| 巴彦淖尔市| 双城市| 屏南县| 潢川县| 无极县|