Java生成验证码

  

<强> Java生成验证码的流程是:

  

  

<强> Java验证验证码的流程是:

  

  

下面通过一个例子来展示验证码的生成流程,该例子使用基本Java春天框架的其他接口,可以使用任何平台来获取验证码:

  

服务器处理验证码的例子:

  

     /* *   *接收验证码请求   */@RequestMapping (value=" https://www.yisu.com/zixun/captchacode ")   公共空间CaptchaCode () {   尝试{   .getCode CaptchaCodeModel CaptchaCodeModel=new CaptchaCode () ();//将验证码放到会话中   HttpServletRequest HttpServletRequest=super.getRequest ();   httpServletRequest.getSession ()。setAttribute (“captchacodekey captchaCodeModel.getCaptchaCode ());//将图片写到客户端   HttpServletResponse HttpServletResponse=super.getResponse ();//禁止缓存   httpServletResponse。setHeader(“杂注”,“no - cache”);   httpServletResponse。setHeader(“cache - control”、“no - cache”);   httpServletResponse。setDateHeader(“到期”,0);   ServletOutputStream ServletOutputStream=httpServletResponse.getOutputStream ();//输出图片   ImageIO.write (captchaCodeModel.getCaptchaImage (), jpeg, servletOutputStream);   servletOutputStream.close ();   }捕捉(异常e) {   logger.info(“验证码生成失败:“+ e.getMessage ());   }   }      

        公开课CaptchaCode {   私人int宽度=90;//定义图片的宽度   私人int高度=20;//定义图片的高度   私人int codeCount=4;//定义图片上显示验证码的个数   私人int xx=15;   私人int fontHeight=18;   私人int codeY=16;   char [] codeSequence={A, B, C, D, E, F, G, H,“我”、“J”,   ‘K’,‘L’,‘米’,‘N’,‘O’,‘P’,‘问’,‘R’,‘S’,‘T’,‘你’,‘V’,‘W’,   ' X ', ' Y ', ' Z ', ' 0 ', ' 1 ', ' 2 ', ' 3 ', ' 4 ', ' 5 ', ' 6 ', ' 7 ', ' 8 ', ' 9 '};            公共CaptchaCodeModel getCode()抛出IOException {//定义图像缓冲区   BufferedImage buffImg=new BufferedImage(宽度、高度,   BufferedImage.TYPE_INT_RGB);   图形gd=buffImg.getGraphics ();//创建一个随机数生成器类   随机随机=new随机();//将图像填充为白色   gd.setColor (Color.WHITE);   gd。fillRect(0, 0,宽度、高度);//创建字体,字体的大小应该根据图片的高度来定。=新字体(字体字体“Fixedsys”,字体。大胆,fontHeight);//设置字体。   gd.setFont(字体);//画边框。   gd.setColor (Color.BLACK);   gd。宽度绘制矩形(0,0,- 1,- 1)高度;//随机产生40条干扰线,使图象中的认证码不易被其它程序探测到。   gd.setColor (Color.BLACK);   for (int i=0;我& lt;40;我+ +){   int x=random.nextInt(宽度);   int y=random.nextInt(高度);   int xl=random.nextInt (12);   int yl=random.nextInt (12);   gd。画直线(x + xl x, y, y +黄);   }//randomCode用于保存随机产生的验证码,以便用户登录后进行验证。   StringBuffer randomCode=new StringBuffer ();   int红色=0,绿色=0,蓝色=0;//随机产生codeCount数字的验证码。   for (int i=0;我& lt;codeCount;我+ +){//得到随机产生的验证码数字。   字符串代码=String.valueOf (codeSequence [random.nextInt (36)]);//产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。   红色=random.nextInt (255);   绿色=random.nextInt (255);   蓝色=random.nextInt (255);//用随机产生的颜色将验证码绘制到图像中。   gd。改变颜色(新颜色(红、绿、蓝));   gd。拉带(代码,(i + 1) * xx, codeY);//将产生的四个随机数组合在一起。   randomCode.append(代码);   }   CaptchaCodeModel CaptchaCodeModel=new CaptchaCodeModel ();   captchaCodeModel.setCaptchaCode (randomCode.toString ());   captchaCodeModel.setCaptchaImage (buffImg);   返回captchaCodeModel;   }   公开课CaptchaCodeModel {//验证码的字符串形式   私人字符串captchaCode;//验证码的图片形式   私人BufferedImage captchaImage;   公共字符串getCaptchaCode () {   返回captchaCode;   }   公共空间setCaptchaCode(字符串captchaCode) {   这一点。captchaCode=captchaCode;   }   公共BufferedImage getCaptchaImage () {   返回captchaImage;   }   公共空间setCaptchaImage (BufferedImage captchaImage) {   这一点。captchaImage=captchaImage;   }   }   之前      

     /* *   *验证验证码   */@RequestMapping (value=" https://www.yisu.com/zixun/valicatpcha ")   公共空间register_R () {   PageData PageData=https://www.yisu.com/zixun/super.getPageData ();//获取验证码   字符串captchaCode=pageData.getString (“captchaCode”);   HttpServletRequest HttpServletRequest=super.getRequest ();   对象codeObject=httpServletRequest.getSession () .getAttribute (“captchacodekey”);//验证码错误   如果(codeObject==null   | | Tools.isEmptyString (captchaCode)   | | ! String.valueOf (codeObject) .toUpperCase ()   .equals (captchaCode.toUpperCase ())) {   setResult (   MessageManager.getInstance () .getMessage (“invalidcaptcha”),   ResultType.Error);   返回;   }   }   

Java生成验证码