用java實(shí)現(xiàn)彩色驗(yàn)證碼

          Posted on 2006-12-20 15:06 flustar 閱讀(608) 評(píng)論(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);
          }
          %>
          <%
          ? //設(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_BGR);
          ?
          ? //獲取圖像
          ? Graphics g=image.getGraphics();
          ? //生成隨機(jī)類
          ? Random rand=new Random();
          ? //設(shè)定背景顏色
          ? g.setColor(getRandColor(200,250));
          ? g.fillRect(0,0,width,height);
          ? //設(shè)定字體
          ? g.setFont(new Font("Times New Roman",Font.PLAIN,18));
          //隨機(jī)產(chǎn)生155條干擾線,使圖象中的認(rèn)證碼不易被其它程序探測(cè)到
          ?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);
          ?
          ?}
          ?//取隨機(jī)產(chǎn)生的4位驗(yàn)證碼
          ?String sRand="";
          ?for(int i=0;i<4;i++){
          ? String strRand=String.valueOf(rand.nextInt(10));
          ? sRand+=strRand;
          ? //將驗(yàn)證碼顯示到圖像中
          ? g.setColor(new Color(20+rand.nextInt(110),20+rand.nextInt(110),20+rand.nextInt(110)));
          ? g.drawString(strRand,13*i+6,16);

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

          ?

          %>


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


          網(wǎng)站導(dǎo)航:
           

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

          Copyright © flustar

          主站蜘蛛池模板: 虎林市| 沙湾县| 石首市| 弋阳县| 长治市| 青河县| 怀安县| 鹤山市| 白沙| 唐山市| 扶余县| 嘉禾县| 广汉市| 灌阳县| 台山市| 五大连池市| 水城县| 荣昌县| 鹿邑县| 宁都县| 文成县| 宁武县| 涞水县| 宜君县| 高要市| 安徽省| 建平县| 陵川县| 赫章县| 泰来县| 聂荣县| 清河县| 曲周县| 木兰县| 阿拉尔市| 丰县| 十堰市| 金川县| 银川市| 迁安市| 通州区|