java图片验证码的实现代码
makeCertPic.java
packagepic;
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics;
importjava.awt.image.BufferedImage;
importjava.io.IOException;
importjava.io.OutputStream;
importjava.util.Random;
importjavax.imageio.ImageIO;
/**
*@authordzy
*生成验证码图片
*/
publicclassmakeCertPic{
//验证码图片中可以出现的字符集,可根据需要修改
privatecharmapTable[]={
"a","b","c","d","e","f",
"g","h","i","j","k","l",
"m","n","o","p","q","r",
"s","t","u","v","w","x",
"y","z","0","1","2","3",
"4","5","6","7","8","9"};
/**
*功能:生成彩色验证码图片
*参数width为生成图片的宽度,参数height为生成图片的高度,参数os为页面的输出流
*/
publicStringgetCertPic(intwidth,intheight,OutputStreamos){
if(width<=0)width=60;
if(height<=0)height=20;
BufferedImageimage=newBufferedImage(width,height,
BufferedImage.TYPE_INT_RGB);
//获取图形上下文
Graphicsg=image.getGraphics();
//设定背景色
g.setColor(newColor(0xDCDCDC));
g.fillRect(0,0,width,height);
//画边框
g.setColor(Color.black);
g.drawRect(0,0,width-1,height-1);
//取随机产生的认证码
StringstrEnsure="";
//4代表4位验证码,如果要生成更多位的认证码,则加大数值
for(inti=0;i<4;++i){
strEnsure+=mapTable[(int)(mapTable.length*Math.random())];
}
// 将认证码显示到图像中,如果要生成更多位的认证码,增加drawString语句
g.setColor(Color.black);
g.setFont(newFont("AtlanticInline",Font.PLAIN,18));
Stringstr=strEnsure.substring(0,1);
g.drawString(str,8,17);
str=strEnsure.substring(1,2);
g.drawString(str,20,15);
str=strEnsure.substring(2,3);
g.drawString(str,35,18);
str=strEnsure.substring(3,4);
g.drawString(str,45,15);
//随机产生10个干扰点
Randomrand=newRandom();
for(inti=0;i<10;i++){
intx=rand.nextInt(width);
inty=rand.nextInt(height);
g.drawOval(x,y,1,1);
}
//释放图形上下文
g.dispose();
try{
//输出图像到页面
ImageIO.write(image,"JPEG",os);
}catch(IOExceptione){
return"";
}
returnstrEnsure;
}
}
在getCertPic()方法中,首先创建了一个内存图像的实例对象,再得到此内存图像的图形上下文对象,接着再用这个上下文对象画背景、边框。接下来,随机生成4个在mapTable[]数组中的字符,组成字符串作为验证字符串,并输出在内存中,为了造成一定的干扰,随机画了10个干扰点,如果要加大干扰效果,可再多画一些点。
makeCertPic.jsp页面用于调用生成验证码图片的JavaBean,并在客户端显示,源代码如下:
makeCertPic.jsp
<%@pagecontentType="image/jpeg"%>
<jsp:useBeanid="image"scope="page"class="pic.makeCertPic"/>
<%
Stringstr=image.getCertPic(0,0,response.getOutputStream());
//将认证码存入SESSION
session.setAttribute("certCode",str);
out.clear();
out=pageContext.pushBody();
%>
这里把生成的验证码作为session变量写入,因此在接收登录页面输入的数据页面中,可用用户输入的验证码和这个session变量作比较,如果相同则表示验证通过。
LoginPic.jsp
<%@pagecontentType="text/html;charset=GB2312"%>
<scripttype="text/javascript">
functionreloadcode(){
varverify=document.getElementById("code");
verify.setAttribute("src","makeCertPic.jsp?it="+Math.random());
}
</script>
<html>
<head><title>登录页面</title></head>
<body>
<tablealign="center"border="0">
<tralign="center"><td><fontcolor="red"><html:errors/></font></td></tr>
<tralign="center"><td>系统登录</td></tr>
<form.action="loginCheck.jsp"method="post"focus="username">
<tr><td>用户名:<inputtype="text"name="username"/></td></tr>
<tr><td>密 码:<inputtype="password"name="password"/></td></tr>
<tr><td>验证码<imgsrc="makeCertPic.jsp"id="code"onclick="reloadcode()"style="cursor:pointer;"alt="看不清楚,换一张"></td></tr>
<tralign="left"><td>
<inputtype="submit"value="确定"/></td></tr>
</form>
</table>
</body>
</html>
验证码的输入是否正确可用如下语句验证:
StringcertCode=request.getParameter("certCode");
if(certCode.equals((String)session.getAttribute("certCode")))
out.print("验证码输入正确");
else
out.print("验证码输入错误");
相关文章
- java集合介绍_java代码分析框架
- MQ发送消息到队列的Java代码详解编程语言
- java生成高质量缩略图的代码实现详解编程语言
- Java实现打字练习的代码详解编程语言
- 学习如何使用Linux环境运行Java程序(linux下的java)
- 解决Linux下重启Java程序的方法(linux重启java)
- 数据库写入Java实现MySQL数据库的写入操作(java向mysql)
- Java编程实现MySQL数据库连接(java连mysql数据库)
- Java实现嵌入式MySQL的新解决方案(java嵌入式mysql)
- Java程序在Linux系统中实现命令操作(java运行linux命令)
- 秘籍学习实现纯Java版Redis(纯java版redis)
- Redis无法与Java建立连接(redis连不上java)
- Java实现随机验证码功能实例代码