posts - 23, comments - 6, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          JSP 驗證碼

          Posted on 2007-01-26 14:34 小傻 閱讀(220) 評論(0)  編輯  收藏 所屬分類: jsp

          1.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());
          %>
          //調用頁面
          2.Test.jsp
          <form name="form" method="post" action="Pass.jsp">
          <input? name=rand type=text id="rand"? size="6" maxlength="4">
          ??????? <img src="image.jsp" width="60" height="20">
          <input name="ok" type="submit" value=" 注 冊 ">
          </form>
          //驗證頁面
          3.Pass.jsp
          <%@ page?
          language="java"
          contentType="text/html;charset=gb2312"
          import = "java.util.*"
          import = "java.sql.*"
          import = "java.text.*"?
          import = "java.io.*"
          %>
          ?<%request.setCharacterEncoding("gb2312");%>
          <%String rand = (String)session.getAttribute("rand");
          ???? String input = request.getParameter("rand");
          ??if (rand.equals(input))?{
          ?? out.println("ok!");
          ? }else{
          out.println("wrong!");
          }
          %>

          主站蜘蛛池模板: 德清县| 昌图县| 太康县| 泌阳县| 深水埗区| 汪清县| 岳阳县| 瑞昌市| 涡阳县| 莲花县| 张北县| 南丹县| 沛县| 云林县| 桃源县| 冀州市| 景泰县| 寿宁县| 麦盖提县| 福建省| 宣汉县| 昌平区| 郯城县| 高雄县| 壶关县| 林州市| 连州市| 屏东市| 林甸县| 大渡口区| 黑河市| 隆尧县| 上饶县| 苍山县| 永泰县| 新泰市| 沛县| 江城| 美姑县| 常熟市| 格尔木市|