Java 实现随机验证码功能简单实例
Java实现随机验证码功能简单实例
现在许多系统的注册、登录或者发布信息模块都添加的随机码功能,就是为了避免自动注册程序或者自动发布程序的使用。
验证码实际上就是随机选择一些字符以图片的形式展现在页面上,如果进行提交操作的同时需要将图片上的字符同时提交,如果提交的字符与服务器session保存的不同,则认为提交信息无效。为了避免自动程序分析解析图片,通常会在图片上随机生成一些干扰线或者将字符进行扭曲,增加自动识别的难度。
在这里,我们使用servlet来实现随机验证码的实现。
实现代码:
packagecom.servlet; importjava.awt.Color; importjava.awt.Font; importjava.awt.Graphics2D; importjava.awt.image.BufferedImage; importjava.util.Random; importjavax.imageio.ImageIO; importjavax.servlet.ServletException; importjavax.servlet.ServletOutputStream; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importjavax.servlet.http.HttpSession; /** *生成随机验证码 *@authorbitiliu * */ publicclassValidateCodeServletextendsHttpServlet { privatestaticfinallongserialVersionUID=1L; //验证码图片的宽度。 privateintwidth=60; //验证码图片的高度。 privateintheight=20; //验证码字符个数 privateintcodeCount=4; privateintx=0; //字体高度 privateintfontHeight; privateintcodeY; char[]codeSequence={'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'}; /** *初始化验证图片属性 */ publicvoidinit()throwsServletException { //从web.xml中获取初始信息 //宽度 StringstrWidth=this.getInitParameter("width"); //高度 StringstrHeight=this.getInitParameter("height"); //字符个数 StringstrCodeCount=this.getInitParameter("codeCount"); //将配置的信息转换成数值 try { if(strWidth!=null&&strWidth.length()!=0) { width=Integer.parseInt(strWidth); } if(strHeight!=null&&strHeight.length()!=0) { height=Integer.parseInt(strHeight); } if(strCodeCount!=null&&strCodeCount.length()!=0) { codeCount=Integer.parseInt(strCodeCount); } } catch(NumberFormatExceptione) {} x=width/(codeCount+1); fontHeight=height-2; codeY=height-4; } protectedvoidservice(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,java.io.IOException{ //定义图像buffer BufferedImagebuffImg=newBufferedImage( width,height,BufferedImage.TYPE_INT_RGB); Graphics2Dg=buffImg.createGraphics(); //创建一个随机数生成器类 Randomrandom=newRandom(); //将图像填充为白色 g.setColor(Color.WHITE); g.fillRect(0,0,width,height); //创建字体,字体的大小应该根据图片的高度来定。 Fontfont=newFont("Fixedsys",Font.PLAIN,fontHeight); //设置字体。 g.setFont(font); //画边框。 g.setColor(Color.BLACK); g.drawRect(0,0,width-1,height-1); //随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。 g.setColor(Color.BLACK); 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用于保存随机产生的验证码,以便用户登录后进行验证。 StringBufferrandomCode=newStringBuffer(); intred=0,green=0,blue=0; //随机产生codeCount数字的验证码。 for(inti=0;i需要在web.xml中声明servlet
ValidateCodeServlet com.servlet.ValidateCodeServlet width 200 height 80 codeCount 5 ValidateCodeServlet /validateCodeServlet 需要引用的页面可以这样来写:
用户提交后就可以将用户输入的验证码与session中保存的字符串进行比对,达到验证的效果。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!