北京北大青鳥學術部:JSP驗證碼介紹

      本篇文章由北京北大青鳥通州校區ACCP學術部提供:

      1. random.jsp (產生四位的隨機字符,由0-9,a-z,A-Z構成.并把最終字符串放到session中保存以讓后續頁面驗證真偽)
      代碼如下
      <%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*;" pageEncoding="UTF-8" %>
      <%!
       private 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 = 100, height = 30;
       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);

       // 隨機產生5條干擾線,使圖象中的認證碼不易被其它程序探測到(北京北大青鳥) 
       for (int i = 0; i < 5; i++) {
        g.setColor(new Color(random.nextInt(50),random.nextInt(50),random.nextInt(50)));
        //設定字體
        g.setFont(new Font("Times New Roman", Font.PLAIN, random.nextInt(10)+20));
        int x = random.nextInt(30);
        int y = random.nextInt(30);
        int xl = random.nextInt(30)+80;
        int yl = random.nextInt(30);
        g.drawLine(x, y, xl, yl);
       }

       // 取隨機產生的認證碼(4位隨機符號)
       String sRand = "";
       //種子,可以放中文
       String rand = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
       for (int i = 0; i < 4; i++) {
        String temp = String.valueOf(rand.charAt(random.nextInt(rand.length())));
        sRand += temp;
        // 將認證碼顯示到圖象中,調用函數出來的顏色相同,可能是因為種子太接近,所以直接生成(北京北大青鳥) 
        g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
        g.drawString(temp, 20 * i + 6, 20);
       }

       // 將認證碼存入SESSION
       session.setAttribute("numRand", sRand);
       // 圖象生效
       g.dispose();

       // 輸出圖象到頁面
       ImageIO.write(image, "JPEG", response.getOutputStream());
       out.clear();
       out = pageContext.pushBody();
      %>

      2. index.jsp (顯示驗證圖片)
      <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
      <%
      String path = request.getContextPath();
      String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
      %>

      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      <html>
        <head>
          <base href="<%=basePath%>">
          <title>驗證碼測試</title>
        </head>
       
        <body>
          <img src="random.jsp" alt="不清楚,單擊更換圖片" onclick="this.src='',this.src='random.jsp'" />
        </body>
      </html>
      北京北大青鳥) 

      北大青鳥網上報名
      北大青鳥招生簡章
      主站蜘蛛池模板: 污污内射在线观看一区二区少妇| 无码国产精品一区二区免费式芒果 | 日本一区二区三区不卡视频| 久久影院亚洲一区| 精品乱码一区二区三区四区| 一区二区三区四区在线观看视频| 乱码人妻一区二区三区| 日本免费一区二区三区四区五六区| 日韩一本之道一区中文字幕| 国产成人一区二区精品非洲| 无码日韩AV一区二区三区| 中文字幕乱码亚洲精品一区 | 一区二区三区免费视频观看| 国产精品无码一区二区三区不卡| 亚洲色精品三区二区一区| 精品无码一区二区三区电影| 亚洲高清日韩精品第一区| 少妇无码一区二区二三区| 少妇激情一区二区三区视频| 精品一区二区三区无码免费视频| 亚洲AV综合色一区二区三区| 亚洲av无码一区二区三区乱子伦 | 亚洲av成人一区二区三区观看在线| 久久一区二区精品| 国产福利91精品一区二区| 亚洲精品伦理熟女国产一区二区 | 日韩国产精品无码一区二区三区| 亚洲国产一区国产亚洲| 蜜桃无码AV一区二区| 日韩一区二区a片免费观看| 无码一区二区三区亚洲人妻| 色噜噜一区二区三区| 中文字幕亚洲乱码熟女一区二区| 国产麻豆精品一区二区三区v视界| 中文字幕无线码一区| 无码精品人妻一区二区三区中| 精品视频一区二区三三区四区| 国产日产久久高清欧美一区| 波多野结衣电影区一区二区三区 | 精品一区二区三区| 日本在线视频一区|