<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    中文JAVA技術平等自由協作創造

    Java專題文章博客和開源

    常用鏈接

    統計

    最新評論

    Java實現隨機驗證碼功能實例

      現在許多系統的注冊、登錄或者發布信息模塊都添加的隨機碼功能,就是為了避免自動注冊程序或者自動發布程序的使用雅思答案

      驗證碼實際上就是隨機選擇一些字符以圖片的形式展現在頁面上,如果進行提交操作的同時需要將圖片上的字符同時提交,如果提交的字符與服務器session保存的不同,則認為提交信息無效。為了避免自動程序分析解析圖片,通常會在圖片上隨機生成一些干擾線或者將字符進行扭曲,增加自動識別的難度。

      在這里,我們使用servlet來實現隨機驗證碼的實現。

      package com.servlet;

      import java.awt.Color;

      import java.awt.Font;

      import java.awt.Graphics2D;

      import java.awt.image.BufferedImage;

      import java.util.Random;

      import javax.imageio.ImageIO;

      import javax.servlet.ServletException;

      import javax.servlet.ServletOutputStream;

      import javax.servlet.http.HttpServlet;

      import javax.servlet.http.HttpServletRequest;

      import javax.servlet.http.HttpServletResponse;

      import javax.servlet.http.HttpSession;

      /**

      * 生成隨機驗證碼

      * @author bitiliu

      *

      */

      public class ValidateCodeServlet extends HttpServlet

      {

      private static final long serialVersionUID = 1L;

      //驗證碼圖片的寬度。

      private int width=60;

      //驗證碼圖片的高度。

      private int height=20;

      //驗證碼字符個數

      private int codeCount=4;

      private int x=0;

      //字體高度

      private int fontHeight;

      private int codeY;

      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' };

      /**

      * 初始化驗證圖片屬性

      */

      public void init() throws ServletException

      {

      //從web.xml中獲取初始信息

      //寬度

      String strWidth=this.getInitParameter("width");

      //高度

      String strHeight=this.getInitParameter("height");

      //字符個數

      String strCodeCount=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(NumberFormatException e)

      {}

      x=width/(codeCount+1);

      fontHeight=height-2;

      codeY=height-4;

      }

      protected void service(HttpServletRequest req, HttpServletResponse resp)

      throws ServletException, java.io.IOException {

      //定義圖像buffer

      BufferedImage buffImg = new BufferedImage(

      width, height,BufferedImage.TYPE_INT_RGB);

      Graphics2D g = buffImg.createGraphics();

      //創建一個隨機數生成器類

      Random random = new Random();

      //將圖像填充為白色

      g.setColor(Color.WHITE);

      g.fillRect(0, 0, width, height);

      //創建字體,字體的大小應該根據圖片的高度來定。

      Font font = new Font("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(int i = 0; i < 160; i++)

      {

      int x = random.nextInt(width);

      int y = random.nextInt(height);

      int xl = random.nextInt(12);

      int yl = random.nextInt(12);

      g.drawLine(x, y, x + xl, y + yl);

      }

      //randomCode用于保存隨機產生的驗證碼,以便用戶登錄后進行驗證。

      StringBuffer randomCode = new StringBuffer();

      int red = 0, green = 0, blue = 0;

      //隨機產生codeCount數字的驗證碼。

      for (int i = 0; i < codeCount; i++) {

      //得到隨機產生的驗證碼數字。

      String strRand = String.valueOf(codeSequence[random.nextInt(36)]);

      //產生隨機的顏色分量來構造顏色值,這樣輸出的每位數字的顏色值都將不同。

      red = random.nextInt(255);

      green = random.nextInt(255);

      blue = random.nextInt(255);

      //用隨機產生的顏色將驗證碼繪制到圖像中。

      g.setColor(new Color(red, green, blue));

      g.drawString(strRand, (i + 1) * x, codeY);

      //將產生的四個隨機數組合在一起。

      randomCode.append(strRand);

      }

      // 將四位數字的驗證碼保存到Session中。

      HttpSession session = req.getSession();

      session.setAttribute("validateCode", randomCode.toString());

      // 禁止圖像緩存。

      resp.setHeader("Pragma", "no-cache");

      resp.setHeader("Cache-Control", "no-cache");

      resp.setDateHeader("Expires", 0);

      resp.setContentType("image/jpeg");

      //將圖像輸出到Servlet輸出流中。

      ServletOutputStream sos = resp.getOutputStream();

      ImageIO.write(buffImg, "jpeg", sos);

      sos.close();

      }

      }

      需要在web.xml中聲明servlet

      ValidateCodeServlet

      com.servlet.ValidateCodeServlet

      width

      200

      height

      80

      codeCount

      5

      ValidateCodeServlet

      /validateCodeServlet

      用戶提交后就可以將用戶輸入的驗證碼與session中保存的字符串進行比對,達到驗證的效果雅思改分

    posted on 2013-06-09 22:51 好不容易 閱讀(193) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    PK10開獎 PK10開獎
    主站蜘蛛池模板: 特黄特色的大片观看免费视频| 亚洲日韩国产一区二区三区| 国产成人精品免费视频动漫| 午夜视频在线免费观看| www.xxxx.com日本免费| 国产精品综合专区中文字幕免费播放| 精品一区二区三区免费毛片| 国产亚洲蜜芽精品久久| 国产综合激情在线亚洲第一页| 美女裸免费观看网站| 国产精品亚洲综合天堂夜夜| 精品久久久久亚洲| 特黄aa级毛片免费视频播放| 一级做α爱过程免费视频| 国产亚洲日韩在线a不卡| 又硬又粗又长又爽免费看| fc2成年免费共享视频网站| 中国一级全黄的免费观看| 男人j进入女人j内部免费网站| 无码人妻一区二区三区免费看| 99re视频精品全部免费| 皇色在线视频免费网站| 日韩一区二区在线免费观看 | 18pao国产成视频永久免费| 69av免费观看| 好爽…又高潮了毛片免费看| 四虎影视精品永久免费网站| 亚洲视频在线精品| 亚洲狠狠综合久久| 亚洲中文字幕无码一去台湾| 老子影院午夜伦不卡亚洲| 一区二区三区视频免费观看| 久久狠狠躁免费观看| 欧亚精品一区三区免费| 免费在线观看黄色毛片| 亚洲动漫精品无码av天堂| 亚洲一区电影在线观看| 免费的黄网站男人的天堂| 亚洲免费人成在线视频观看 | 西西人体免费视频| 国产成人精品免费午夜app|