Java技術專區--Hilly

          http://blog.duyouyou.com
             :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理

          jsp生成隨機驗證碼圖片(轉)

          Posted on 2006-08-06 21:45 duyouyou.com 閱讀(2099) 評論(7)  編輯  收藏 所屬分類: web技術
          轉自:http://www.matrix.org.cn/resource/article/0/910.html


          生成有4個隨機數字和雜亂背景的圖片,數字和背景顏色會改變,服務器端刷新(用history.go(-1)也會變)
          原型參考ALIBABA??http://china.alibaba.com/member/showimage

          ------------產生驗證碼圖片的文件-----image.jsp-------------------------------------------


          <%@?page?contentType="image/jpeg"?import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"?%>
          <%!
          Color?getRandColor(
          int?fc,int?bc){//給定范圍獲得隨機顏色
          ????????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);
          ????????}
          %>
          <%
          //設置頁面不緩存
          response.setHeader("Pragma","No-cache");
          response.setHeader(
          "Cache-Control","no-cache");
          response.setDateHeader(
          "Expires",?0);

          //?在內存中創建圖象
          int?width=60,?height=20;
          BufferedImage?image?
          =?new?BufferedImage(width,?height,?BufferedImage.TYPE_INT_RGB);

          //?獲取圖形上下文
          Graphics?g?=?image.getGraphics();

          //生成隨機類
          Random?random?=?new?Random();

          //?設定背景色
          g.setColor(getRandColor(200,250));
          g.fillRect(
          0,?0,?width,?height);

          //設定字體
          g.setFont(new?Font("Times?New?Roman",Font.PLAIN,18));

          //畫邊框
          //
          g.setColor(new?Color());
          //
          g.drawRect(0,0,width-1,height-1);


          //?隨機產生155條干擾線,使圖象中的認證碼不易被其它程序探測到
          g.setColor(getRandColor(160,200));
          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);
          }

          //?取隨機產生的認證碼(4位數字)
          String?sRand="";
          for?(int?i=0;i<4;i++){
          ????String?rand
          =String.valueOf(random.nextInt(10));
          ????sRand
          +=rand;
          ????
          //?將認證碼顯示到圖象中
          ????g.setColor(new?Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//調用函數出來的顏色相同,可能是因為種子太接近,所以只能直接生成
          ????g.drawString(rand,13*i+6,16);
          }

          //?將認證碼存入SESSION
          session.setAttribute("rand",sRand);


          //?圖象生效
          g.dispose();

          //?輸出圖象到頁面
          ImageIO.write(image,?"JPEG",?response.getOutputStream());


          %>?

          ---------------使用驗證碼圖片的文件---------a.jsp------------------------------------


          <%@?page?contentType="text/html;charset=gb2312"?%>
          <!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN">
          <html>
          <head>
          <title>認證碼輸入頁面</title>
          <meta?http-equiv="Content-Type"?content="text/html;?charset=gb2312">
          <META?HTTP-EQUIV="Pragma"?CONTENT="no-cache">?
          <META?HTTP-EQUIV="Cache-Control"?CONTENT="no-cache">?
          <META?HTTP-EQUIV="Expires"?CONTENT="0">?
          </head>
          <body>
          <form?method=post?action="check.jsp">
          <table>
          ??? <tr>
          ???????
          <td?align=left>系統產生的認證碼:</td>
          ???????
          <td><img?border=0?src="image.jsp"></td>
          ???
          </tr>
          ???
          <tr>
          ???????
          <td?align=left>輸入上面的認證碼:</td>
          ???????
          <td><input?type=text?name=rand?maxlength=4?value=""></td>
          ???
          </tr>
          ???
          <tr>
          ???????
          <td?colspan=2?align=center><input?type=submit?value="提交檢測"></td>
          ????
          </tr>
          </table>
          </form>
          </body>
          </html>


          -----------------驗證的頁面----------check.jsp

          <%@?page?contentType="text/html;?charset=gb2312"?language="java"?import="java.sql.*"?errorPage=""?%>
          <html>
          <head>
          <title>認證碼驗證頁面</title>
          <meta?http-equiv="Content-Type"?content="text/html;?charset=gb2312">
          <META?HTTP-EQUIV="Pragma"?CONTENT="no-cache">?
          <META?HTTP-EQUIV="Cache-Control"?CONTENT="no-cache">?
          <META?HTTP-EQUIV="Expires"?CONTENT="0">?
          </head>

          <body>
          <%?
          String?rand?
          =?(String)session.getAttribute("rand");
          String?input?
          =?request.getParameter("rand");
          %>
          系統產生的認證碼為:?
          <%=?rand?%><br>
          您輸入的認證碼為:?
          <%=?input?%><br>
          <br>
          <%
          ??
          if?(rand.equals(input))?{
          %>
          <font?color=green>輸入相同,認證成功!</font>
          <%
          ??}?
          else?{
          %>
          <font?color=red>輸入不同,認證失敗!</font>
          <%
          ??}
          %>
          </body>
          </html>


          評論

          # re: jsp生成隨機驗證碼圖片(轉)  回復  更多評論   

          2006-08-07 12:44 by ming
          zan

          # re: jsp生成隨機驗證碼圖片(轉)  回復  更多評論   

          2006-08-12 12:32 by 游子
          收藏

          # re: jsp生成隨機驗證碼圖片(轉)  回復  更多評論   

          2006-11-08 11:12 by 00[匿名]
          好東西,同意

          # re: jsp生成隨機驗證碼圖片(轉)  回復  更多評論   

          2007-05-15 20:37 by dyjs
          hao

          # re: jsp生成隨機驗證碼圖片(轉)[未登錄]  回復  更多評論   

          2007-05-23 16:52 by 00
          good

          # re: jsp生成隨機驗證碼圖片(轉)  回復  更多評論   

          2007-06-27 10:25 by justin
          good job!

          # re: jsp生成隨機驗證碼圖片(轉)  回復  更多評論   

          2007-12-20 15:36 by 暗暗啊
          為什么我的圖片生成不了了??>???誰幫我下啊1
          Hold住
          主站蜘蛛池模板: 南和县| 鹿泉市| 呼伦贝尔市| 巴青县| 揭东县| 阳城县| 正镶白旗| 泰安市| 新野县| 泰宁县| 烟台市| 沂水县| 常州市| 关岭| 巴楚县| 汉川市| 葵青区| 太和县| 永善县| 土默特左旗| 平安县| 行唐县| 普宁市| 红原县| 刚察县| 广平县| 绍兴县| 隆回县| 海南省| 大英县| 温宿县| 渝中区| 金阳县| 威远县| 莲花县| 如东县| 大荔县| 漳浦县| 永福县| 新余市| 南投市|