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

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

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

    中文JAVA技術(shù)平等自由協(xié)作創(chuàng)造

    Java專題文章博客和開源

    常用鏈接

    統(tǒng)計(jì)

    最新評(píng)論

    Java實(shí)現(xiàn)隨機(jī)驗(yàn)證碼功能實(shí)例

      現(xiàn)在許多系統(tǒng)的注冊、登錄或者發(fā)布信息模塊都添加的隨機(jī)碼功能,就是為了避免自動(dòng)注冊程序或者自動(dòng)發(fā)布程序的使用雅思答案

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

      在這里,我們使用servlet來實(shí)現(xiàn)隨機(jī)驗(yàn)證碼的實(shí)現(xiàn)。

      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;

      /**

      * 生成隨機(jī)驗(yàn)證碼

      * @author bitiliu

      *

      */

      public class ValidateCodeServlet extends HttpServlet

      {

      private static final long serialVersionUID = 1L;

      //驗(yàn)證碼圖片的寬度。

      private int width=60;

      //驗(yàn)證碼圖片的高度。

      private int height=20;

      //驗(yàn)證碼字符個(gè)數(shù)

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

      /**

      * 初始化驗(yàn)證圖片屬性

      */

      public void init() throws ServletException

      {

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

      //寬度

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

      //高度

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

      //字符個(gè)數(shù)

      String strCodeCount=this.getInitParameter("codeCount");

      //將配置的信息轉(zhuǎn)換成數(shù)值

      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();

      //創(chuàng)建一個(gè)隨機(jī)數(shù)生成器類

      Random random = new Random();

      //將圖像填充為白色

      g.setColor(Color.WHITE);

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

      //創(chuàng)建字體,字體的大小應(yīng)該根據(jù)圖片的高度來定。

      Font font = new Font("Fixedsys", Font.PLAIN, fontHeight);

      //設(shè)置字體。

      g.setFont(font);

      //畫邊框。

      g.setColor(Color.BLACK);

      g.drawRect(0, 0, width - 1, height - 1);

      //隨機(jī)產(chǎn)生160條干擾線,使圖象中的認(rèn)證碼不易被其它程序探測到。

      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用于保存隨機(jī)產(chǎn)生的驗(yàn)證碼,以便用戶登錄后進(jìn)行驗(yàn)證。

      StringBuffer randomCode = new StringBuffer();

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

      //隨機(jī)產(chǎn)生codeCount數(shù)字的驗(yàn)證碼。

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

      //得到隨機(jī)產(chǎn)生的驗(yàn)證碼數(shù)字。

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

      //產(chǎn)生隨機(jī)的顏色分量來構(gòu)造顏色值,這樣輸出的每位數(shù)字的顏色值都將不同。

      red = random.nextInt(255);

      green = random.nextInt(255);

      blue = random.nextInt(255);

      //用隨機(jī)產(chǎn)生的顏色將驗(yàn)證碼繪制到圖像中。

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

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

      //將產(chǎn)生的四個(gè)隨機(jī)數(shù)組合在一起。

      randomCode.append(strRand);

      }

      // 將四位數(shù)字的驗(yàn)證碼保存到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

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

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


    只有注冊用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    PK10開獎(jiǎng) PK10開獎(jiǎng)
    主站蜘蛛池模板: 99久久综合国产精品免费| 久久精品免费观看国产| 成人免费视频网址| 亚洲一卡2卡三卡4卡无卡下载| 欧洲一级毛片免费| 色偷偷亚洲女人天堂观看欧| 最新欧洲大片免费在线| 亚洲日韩AV无码一区二区三区人| 在线观看免费国产视频| 国产精品亚洲综合一区在线观看| 免费播放特黄特色毛片| eeuss影院ss奇兵免费com| 亚洲AV无码成人精品区蜜桃| 日韩免费无码视频一区二区三区| 亚洲视频在线观看不卡| 成年在线观看网站免费| 亚洲av中文无码字幕色不卡 | 精品国产日韩久久亚洲| 岛国片在线免费观看| 国产精品久久久久久亚洲小说 | 91制片厂制作传媒免费版樱花| 91嫩草亚洲精品| 日韩免费观看的一级毛片| 免费人成再在线观看网站| 亚洲美女又黄又爽在线观看| 777成影片免费观看| 亚洲精品GV天堂无码男同| 亚洲精品国产福利一二区| 日本视频在线观看永久免费| 亚洲国产精品yw在线观看| 国产男女性潮高清免费网站| 中国一级特黄高清免费的大片中国一级黄色片 | 福利免费在线观看| 亚洲人xxx日本人18| 亚洲高清偷拍一区二区三区| 久久久久亚洲?V成人无码| 久久精品一区二区免费看| 亚洲精品宾馆在线精品酒店 | 亚洲男人的天堂在线| 国产婷婷高清在线观看免费| 日本免费中文字幕|