JSP生成驗(yàn)證碼

          Posted on 2007-04-18 19:54 久城 閱讀(1079) 評(píng)論(3)  編輯  收藏 所屬分類: Jsp學(xué)習(xí)
          <%@ page contentType="image/jpeg"
              
          import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"
              pageEncoding
          ="gb2312"%>
          <%!Color getRandColor(int fc, int bc) {//給定范圍獲得隨機(jī)顏色   
                  Random random = new Random();
                  
          if (fc > 255)
                      fc 
          = 255;
                  
          if (bc > 255)
                      bc 
          = 255;
                  
          int r = fc + random.nextInt(bc - fc);
                  
          int g = fc + random.nextInt(bc - fc);
                  
          int b = fc + random.nextInt(bc - fc);
                  
          return new Color(r, g, b);
              }
          %>
          <%
              
          //設(shè)置頁(yè)面緩存   
              response.setHeader("Pragma""No-cache");
              response.setHeader(
          "Cache-Control""no-cache");
              response.setDateHeader(
          "Expires"0);
              
          // 在內(nèi)存中創(chuàng)建圖象   
              int width = 60, height = 20;
              BufferedImage image 
          = new BufferedImage(width, height,
                      BufferedImage.TYPE_INT_RGB);
              
          // 獲取圖形上下文   
              Graphics g = image.getGraphics();
              
          //生成隨機(jī)類   
              Random random = new Random();
              
          // 設(shè)定背景色   
              g.setColor(getRandColor(200250));
              g.fillRect(
          00, width, height);
              
          //設(shè)定字體   
              g.setFont(new Font("Times New Roman", Font.PLAIN, 18));  
              
          // 隨機(jī)產(chǎn)生155條干擾線,使圖象中的認(rèn)證碼不易被其它程序探測(cè)到   
              g.setColor(getRandColor(160200));
              
          for (int i = 0; i < 155; 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);
              }

              
          // 取隨機(jī)產(chǎn)生的認(rèn)證碼(4位數(shù)字)   
              String sRand = "";
              
          for (int i = 0; i < 4; i++{
                  String rand 
          = String.valueOf(random.nextInt(10));
                  sRand 
          += rand;
                  
          // 將認(rèn)證碼顯示到圖象中   
                  g.setCor(new Color(20 + random.nextInt(110), 20 + random
                  .nextInt(
          110), 20 + random.nextInt(110)));
                  
          //調(diào)用函數(shù)出來(lái)的顏色相同,可能是因?yàn)榉N子太接近,所以只能直接生成   
                  g.drawString(rand, 13 * i + 616);
              }

              
          // 將認(rèn)證碼存入SESSION   
              session.setAttribute("rand", sRand);
              
          // 圖象生效   
              g.dispose();
              
          // 輸出圖象到頁(yè)面   
              ImageIO.write(image, "JPEG", response.getOutputStream());
          %>


          歡迎來(lái)訪!^.^!
          本BLOG僅用于個(gè)人學(xué)習(xí)交流!
          目的在于記錄個(gè)人成長(zhǎng).
          所有文字均屬于個(gè)人理解.
          如有錯(cuò)誤,望多多指教!不勝感激!

          Feedback

          # re: JSP生成驗(yàn)證碼  回復(fù)  更多評(píng)論   

          2007-04-18 20:34 by 靜兒
          其實(shí)我經(jīng)常登陸你的blog,一直覺(jué)得你是個(gè)奇人。現(xiàn)在最令我奇怪的一件事發(fā)生了:你怎么知道我的blog的?呵呵,以后我得多向你學(xué)習(xí),你可別嫌麻煩哦!

          # re: JSP生成驗(yàn)證碼[未登錄](méi)  回復(fù)  更多評(píng)論   

          2007-06-11 22:33 by ^_^
          最好寫(xiě)一下調(diào)用并判斷驗(yàn)證碼的過(guò)程

          # re: JSP生成驗(yàn)證碼  回復(fù)  更多評(píng)論   

          2007-08-15 15:07 by ddd
          LS, 調(diào)用和判斷很簡(jiǎn)單呀!

          既然程序里已經(jīng)生成了驗(yàn)證碼,

          用它直接跟User輸入的比較就好。。。

          至于驗(yàn)證碼如何保存,Session,Request啥的,就是喜好問(wèn)題了

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


          網(wǎng)站導(dǎo)航:
           

          Copyright © 久城

          主站蜘蛛池模板: 乡城县| 西昌市| 嘉定区| 南丹县| 石嘴山市| 罗平县| 行唐县| 崇州市| 辽中县| 凤山县| 四子王旗| 南召县| 开远市| 黄大仙区| 衡阳市| 吉木乃县| 乌审旗| 宁晋县| 凌海市| 祁阳县| 京山县| 中牟县| 铜鼓县| 江源县| 华阴市| 措勤县| 北海市| 华安县| 科技| 泰兴市| 玛纳斯县| 平武县| 长子县| 油尖旺区| 布拖县| 岫岩| 河北省| 康马县| 沙河市| 西藏| 沈丘县|