天天看點

JSP彩色驗證碼

産生驗證碼圖檔的檔案-----image.jsp

<col>

&lt;%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %&gt;

&lt;%!

Color getRandColor(int fc,int bc){//給定範圍獲得随機顔色

        Random random = new Random();

        if(fc&gt;255) fc=255;

        if(bc&gt;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);

        }

%&gt;

&lt;%

//設定頁面不緩存

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&lt;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&lt;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());

---------------使用驗證碼圖檔的檔案---------a.jsp------------------------------------

&lt;%@ page contentType="text/html;charset=gb2312" %&gt;

&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;

&lt;html&gt;

&lt;head&gt;

&lt;title&gt;認證碼輸入頁面&lt;/title&gt;

&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;

&lt;META HTTP-EQUIV="Pragma" CONTENT="no-cache"&gt; 

&lt;META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"&gt; 

&lt;META HTTP-EQUIV="Expires" CONTENT="0"&gt; 

&lt;/head&gt;

&lt;body&gt;

&lt;form method=post action="check.jsp"&gt;

&lt;table&gt;

&lt;tr&gt;

&lt;td align=left&gt;系統産生的認證碼:&lt;/td&gt;

&lt;td&gt;&lt;img border=0 src="image.jsp"&gt;&lt;/td&gt;

&lt;/tr&gt;

&lt;td align=left&gt;輸入上面的認證碼:&lt;/td&gt;

&lt;td&gt;&lt;input type=text name=rand maxlength=4 value=""&gt;&lt;/td&gt;

&lt;td colspan=2 align=center&gt;&lt;input type=submit value="送出檢測"&gt;&lt;/td&gt;

&lt;/form&gt;

&lt;/body&gt;

&lt;/html&gt;

-----------------驗證的頁面----------check.jsp

&lt;%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %&gt;

&lt;title&gt;認證碼驗證頁面&lt;/title&gt;

&lt;% 

 String rand = (String)session.getAttribute("rand");

 String input = request.getParameter("rand");

系統産生的認證碼為: &lt;%= rand %&gt;&lt;br&gt;

您輸入的認證碼為: &lt;%= input %&gt;&lt;br&gt;

&lt;br&gt;

  if (rand.equals(input)) {

&lt;font color=green&gt;輸入相同,認證成功!&lt;/font&gt;

  } else {

&lt;font color=red&gt;輸入不同,認證失敗!&lt;/font&gt;

  }