整理文档,搜刮出一个java Servlet 实现动态验证码图片的代码,稍微整理精简一下做下分享。
代码如下 | 复制代码 |
packagecom.hacker;
importjava.awt.Color; importjava.awt.Font; importjava.awt.Graphics2D; importjava.awt.image.BufferedImage; importjava.io.BufferedReader; importjava.io.ByteArrayOutputStream; importjava.io.File; importjava.io.FileOutputStream; importjava.io.IOException; importjava.io.OutputStream; importjava.net.URLEncoder; importjava.util.Date; importjava.util.Locale; importjava.util.Random;
importjavax.imageio.ImageIO; importjavax.servlet.ServletException; importjavax.servlet.ServletOutputStream; importjavax.servlet.annotation.WebServlet; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importjavax.servlet.http.HttpSession;
importcom.bean.Student;
publicclassHackerServletextendsHttpServlet {
//验证码图片的宽度。 privateintwidth=60; //验证码图片的高度。 privateintheight=20; @Override protectedvoiddoGet(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException { BufferedImage buffImg=newBufferedImage(width,height, BufferedImage.TYPE_INT_RGB); Graphics2D g=buffImg.createGraphics();
//创建一个随机数生成器类。 Random random=newRandom();
g.setColor(Color.WHITE); g.fillRect(0,0,width,height);
//创建字体,字体的大小应该根据图片的高度来定。 Font font=newFont("Times New Roman",Font.PLAIN,18); //设置字体。 g.setFont(font);
//画边框。 g.setColor(Color.BLACK); g.drawRect(0,0,width-1,height-1);
//随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。 g.setColor(Color.GRAY); for(inti=0;i<160;i++) { intx = random.nextInt(width); inty = random.nextInt(height); intxl = random.nextInt(12); intyl = random.nextInt(12); g.drawLine(x,y,x+xl,y+yl); }
//randomCode用于保存随机产生的验证码,以便用户登录后进行验证。 StringBuffer randomCode=newStringBuffer(); intred=0,green=0,blue=0;
//随机产生4位数字的验证码。 for(inti=0;i<4;i++) { //得到随机产生的验证码数字。 String strRand=String.valueOf(random.nextInt(10));
//产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。 red=random.nextInt(110); green=random.nextInt(50); blue=random.nextInt(50);
//用随机产生的颜色将验证码绘制到图像中。 g.setColor(newColor(red,green,blue)); g.drawString(strRand,13*i+6,16);
//将产生的四个随机数组合在一起。 randomCode.append(strRand); } //将四位数字的验证码保存到Session中。 HttpSession session=req.getSession(); session.setAttribute("randomCode",randomCode.toString());
//禁止图像缓存。 resp.setHeader("Pragma","no-cache"); resp.setHeader("Cache-Control","no-cache"); resp.setDateHeader("Expires",0);
resp.setContentType("img/JPG");
//将图像输出到Servlet输出流中。 ServletOutputStream sos=resp.getOutputStream(); ImageIO.write(buffImg,"JPG",sos); sos.close(); }
} |
当然这还需要改进成平常见到的验证码 形式,还需要努力
忍者必须死34399账号登录版 最新版v1.0.138v2.0.72
下载勇者秘境oppo版 安卓版v1.0.5
下载忍者必须死3一加版 最新版v1.0.138v2.0.72
下载绝世仙王官方正版 最新安卓版v1.0.49
下载Goat Simulator 3手机版 安卓版v1.0.8.2
Goat Simulator 3手机版是一个非常有趣的模拟游
Goat Simulator 3国际服 安卓版v1.0.8.2
Goat Simulator 3国际版是一个非常有趣的山羊模
烟花燃放模拟器中文版 2025最新版v1.0
烟花燃放模拟器是款仿真的烟花绽放模拟器类型单机小游戏,全方位
我的世界动漫世界 手机版v友y整合
我的世界动漫世界模组整合包是一款加入了动漫元素的素材整合包,
我的世界贝爷生存整合包 最新版v隔壁老王
我的世界MITE贝爷生存整合包是一款根据原版MC制作的魔改整