用java實現彩色驗證碼

          Posted on 2006-12-20 15:06 flustar 閱讀(607) 評論(0)  編輯  收藏 所屬分類: J2ee

          <%@ page language="java" contentType="image/jpeg"
          ??? pageEncoding="gb2312"%>
          <%@ page import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"%>

          <%!
          ?? Color getRandColor(int fc,int bc){
          ?Random rand=new Random();
          ?if(fc>255) fc=255;
          ?if(bc>255) bc=255;
          ?int r=fc+rand.nextInt(bc-fc);
          ?int g=fc+rand.nextInt(bc-fc);
          ?int b=fc+rand.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_BGR);
          ?
          ? //獲取圖像
          ? Graphics g=image.getGraphics();
          ? //生成隨機類
          ? Random rand=new Random();
          ? //設定背景顏色
          ? g.setColor(getRandColor(200,250));
          ? g.fillRect(0,0,width,height);
          ? //設定字體
          ? g.setFont(new Font("Times New Roman",Font.PLAIN,18));
          //隨機產生155條干擾線,使圖象中的認證碼不易被其它程序探測到
          ?g.setColor(getRandColor(160,200));
          ?for(int i=0;i<155;i++){
          ? int x=rand.nextInt(width);
          ? int y=rand.nextInt(height);
          ? int x1=rand.nextInt(12);
          ? int y1=rand.nextInt(12);
          ? g.drawLine(x,y,x+x1,y+y1);
          ?
          ?}
          ?//取隨機產生的4位驗證碼
          ?String sRand="";
          ?for(int i=0;i<4;i++){
          ? String strRand=String.valueOf(rand.nextInt(10));
          ? sRand+=strRand;
          ? //將驗證碼顯示到圖像中
          ? g.setColor(new Color(20+rand.nextInt(110),20+rand.nextInt(110),20+rand.nextInt(110)));
          ? g.drawString(strRand,13*i+6,16);

          ?}
          ?//將驗證碼放入session
          ? session.setAttribute("rand",sRand);
          ?
          ?g.dispose();
          //輸出圖象到頁面
          ?ImageIO.write(image, "JPEG", response.getOutputStream());

          ?

          %>


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          posts - 146, comments - 143, trackbacks - 0, articles - 0

          Copyright © flustar

          主站蜘蛛池模板: 洱源县| 永顺县| 平塘县| 西和县| 广丰县| 高台县| 德化县| 永城市| 长沙市| 雅安市| 延川县| 洛浦县| 玛多县| 江油市| 九龙坡区| 西乡县| 张家界市| 台湾省| 宣威市| 许昌县| 舟山市| 玛曲县| 临清市| 大洼县| 柯坪县| 浮梁县| 白银市| 社旗县| 绿春县| 牡丹江市| 和顺县| 鄢陵县| 盐边县| 恭城| 当涂县| 云梦县| 小金县| 海南省| 琼结县| 班戈县| 德保县|