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住
          主站蜘蛛池模板: 桓台县| 揭阳市| 阿图什市| 自治县| 平湖市| 庄河市| 襄城县| 克什克腾旗| 合阳县| 策勒县| 东乌珠穆沁旗| 临泽县| 中阳县| 昌吉市| 错那县| 江城| 巴南区| 漯河市| 长泰县| 富平县| 浦东新区| 兴海县| 喀喇沁旗| 祁阳县| 凤山市| 江都市| 建始县| 禄劝| 报价| 沁水县| 磐石市| 义乌市| 延津县| 阳新县| 老河口市| 金堂县| 沂水县| 颍上县| 五寨县| 遂平县| 涡阳县|