posts - 22,comments - 35,trackbacks - 0

          <%@ page language="java" pageEncoding="UTF-8"%>
          <%@ pagecontentType
          ="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*,com.swetake.util.Qrcode"%>
          <%!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(200, 250));
          g.fillRect(0, 0, width, height);

          //設(shè)定字體
          g.setFont(new Font("Comic    Sans    MS", Font.PLAIN, 20));

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

          //    隨機(jī)產(chǎn)生155條干擾線,使圖象中的認(rèn)證碼不易被其它程序探測(cè)到
          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);
          }

          //    取隨機(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.setColor(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 + 6, 16);
          }

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


          //    圖象生效
          g.dispose();
          out.clear();
          out = pageContext.pushBody();

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

           

          注:要先下載com.swetake.util.Qrcode包

          posted on 2009-06-29 15:47 kelven 閱讀(204) 評(píng)論(0)  編輯  收藏 所屬分類: jsp/servlet

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 临西县| 贵阳市| 新乡县| 繁昌县| 青龙| 多伦县| 饶河县| 榆树市| 四平市| 泗阳县| 元氏县| 正安县| 射阳县| 三江| 全南县| 长兴县| 息烽县| 三河市| 汝城县| 盐津县| 余姚市| 平顶山市| 同心县| 昌黎县| 望都县| 桃源县| 会宁县| 平阳县| 临沂市| 罗定市| 平果县| 华阴市| 镇坪县| 永胜县| 元阳县| 东乡县| 建昌县| 阿克苏市| 东乌| 卫辉市| 庄浪县|