|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
不得不提一下的是:.net是看到java红,而开发出来的工具。js|图形完成认证码手艺,必要以下几方面的筹办:
1.天生认证码:
我们可让体系随机发生一个数字来作为认证码,这方面在Javascript剧本言语和JAVA言语中都可得以完成。前者能够用Math.random()失掉一个介于0与1之间的小数,用它乘以10000再取整数部分,便可失掉0至9999之间的随机数。后者能够用Random类的nextInt(N)办法失掉一个介于0至N-1之间的随机类。
在完成时,我们接纳了前者,即用Javascript天生的随机数作为认证码。次要缘故原由是Javascript是HTML内置的剧本言语,不论页面是行进、前进仍是革新,都能包管实时发生新的认证码,增添了随机性。而用JAVA完成时,则不具有此特征,扫瞄器还保留本来的认证码,随机性不强。
2.天生认证码图像:
这是对照关头的部分。侥幸的是,JAVA言语给我们供应了壮大的撑持。我们能够使用BufferedImage类在内存中绘制图像,并可使用ImageIO类将图像输入到JSP页面中。在绘制图像时,我们就能够将随机发生的认证码,绘制到图像中,进而展示在用户眼前。另,为了增添破译的难度,我们能够随机画一些点。
3.保留认证码:
在JSP言语中,我们能够充实使用该言语内置的SESSION对象来保留认证码之值,办法是:session.setAttribute("认证码名字",认证码之值)。并可用session.getAttribute("认证码名字")失掉体系保留的认证码之值,用来和用户输出的认证码比拟较,非常便利。
3、认证码手艺的JSP完成
1.image.jsp
这个JSP程序的功效是:依据页面参数rand天生响应的认证码图像,同时设定SESSION变量rand,以便check.jsp考证用户输出的认证码时利用。
源程序以下:
<%@pagecontentType="image/jpeg"import="java.awt.*,
java.awt.image.*,java.util.*,javax.imageio.*"%>
<%
//在内存中创立图像
intwidth=60,height=20;
BufferedImageimage=newBufferedImage(width,height,
BufferedImage.TYPE_INT_RGB);
//猎取图形高低文
Graphicsg=image.getGraphics();
//设定背景致
g.setColor(Color.white);
g.fillRect(0,0,width,height);
//画边框
g.setColor(Color.black);
g.drawRect(0,0,width-1,height-1);
//取随机发生的认证码(4位数字)
Stringrand=request.getParameter("rand");
rand=rand.substring(0,rand.indexOf("."));
switch(rand.length())
{
case1:rand="000"+rand;break;
case2:rand="00"+rand;break;
case3:rand="0"+rand;break;
default:rand=rand.substring(0,4);break;
}
//将认证码存进SESSION
session.setAttribute("rand",rand);
//将认证码显现到图像中
g.setColor(Color.black);
g.setFont(newFont("TimesNewRoman",Font.PLAIN,18));
g.drawString(rand,10,15);
//随机发生88个搅扰点,使图像中的认证码不容易被别的程序探测到
Randomrandom=newRandom();
for(inti=0;i<88;i++)
{
intx=random.nextInt(width);
inty=random.nextInt(height);
g.drawLine(x,y,x,y);
}
//图像失效
g.dispose();
//输入图像到页面
ImageIO.write(image,"JPEG",response.getOutputStream());
%>
2.a.jsp
这个JSP程序的功效是:显现认证码,供应表单让用户输出认证码供校验用。注重,程序中显现认证码图像时,用了Javascript的document.write,并用了Math.random函数,从而包管了认证码的实时更新特征。
源程序以下:
<%@pagecontentType="text/html;charset=gb2312"%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
<html>
<head>
<title>认证码输出页面</title>
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
<METAHTTP-EQUIV="Pragma"CONTENT="no-cache">
<METAHTTP-EQUIV="Cache-Control"CONTENT="no-cache">
<METAHTTP-EQUIV="Expires"CONTENT="0">
</head>
<body>
<formmethod=postaction="check.jsp">
<table>
<tr>
<tdalign=left>体系发生的认证码:</td>
<td><script>document.write("");</script></td>
</tr>
<tr>
<tdalign=left>输出下面的认证码:</td>
<td><inputtype=textname=randmaxlength=4value=""></td>
</tr>
<tr>
<tdcolspan=2align=center><inputtype=submitvalue="提交检测"></td>
</tr>
</form>
</body>
</html>
3.check.jsp
这个JSP程序的感化是对照用户输出的认证码与SESSION变量中保留的认证码,不异时提醒认证乐成,不然提醒认证失利。
源程序以下:
<%@pagecontentType="text/html;charset=gb2312"language="java"
import="java.sql.*"errorPage=""%>
<html>
<head>
<title>认证码考证页面</title>
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
<METAHTTP-EQUIV="Pragma"CONTENT="no-cache">
<METAHTTP-EQUIV="Cache-Control"CONTENT="no-cache">
<METAHTTP-EQUIV="Expires"CONTENT="0">
</head>
<body>
<%
Stringrand=(String)session.getAttribute("rand");
Stringinput=request.getParameter("rand");
%>
体系发生的认证码为:<%=rand%><br>
您输出的认证码为:<%=input%><br>
<br>
<%
if(rand.equals(input)){
%>
<fontcolor=green>输出不异,认证乐成!</font>
<%
}else{
%>
<fontcolor=red>输出分歧,认证失利!</font>
<%
}
%>
</body>
</html>
专门做了这个例子;而java的这个例子好像就是为了教学而写的,很多教学目的的例子是不考虑优化、性能的。 |
|