隨機驗證碼程序
?
import
??java.awt.Color;
?
import
??java.awt.Font;
?
import
??java.awt.Graphics;
?
import
??java.awt.image.BufferedImage;
?
import
??java.io.IOException;
?
import
??java.util.Random;
?
import
??javax.servlet.Servlet;
?
import
??javax.servlet.ServletException;
?
import
??javax.servlet.http.HttpServlet;
?
import
??javax.servlet.http.HttpServletRequest;
?
import
??javax.servlet.http.HttpServletResponse;
?
/**
?
*/
?
/**
?
?*??
@version
??????1.0
?*??
@author
???????baiyf
??
*/
?
??
public
???
class
??ValidateImg??
extends
??HttpServlet??
implements
??Servlet???{
?????
public
??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);
????}?
??????
/**
?
*/
?
/**
?
????*??
@see
??javax.servlet.http.HttpServlet#void?(javax.servlet.http.HttpServletRequest,?javax.servlet.http.HttpServletResponse)
?????
*/
?
?????
public
???
void
??doGet(HttpServletRequest?req,?HttpServletResponse?resp)
?????????
throws
??ServletException,?IOException???{
????????doPost(req,?resp);
????}?
?
??????
/**
?
*/
?
/**
?
????*??
@see
??javax.servlet.http.HttpServlet#void?(javax.servlet.http.HttpServletRequest,?javax.servlet.http.HttpServletResponse)
?????
*/
?
?????
public
???
void
??doPost(HttpServletRequest?req,?HttpServletResponse?resp)
?????????
throws
??ServletException,?IOException???{
????????resp.setHeader(?
"
?Pragma?
"
?,??
"
?No-cache?
"
?);
????????resp.setHeader(?
"
?Cache-Control?
"
?,??
"
?no-cache?
"
?);
????????resp.setDateHeader(?
"
?Expires?
"
?,??
0
?);
?
//
??在內存中創建圖象??
??????????
int
??width??
=
???
90
?,?height??
=
???
40
?;
????????BufferedImage?image??
=
??????
new
??BufferedImage(width,?height,?BufferedImage.TYPE_INT_RGB);
?
//
??獲取圖形上下文??
?????????Graphics?g??
=
??image.createGraphics();
?
//
??設定背景色??
?????????g.setColor(getRandColor(?
180
?,??
250
?));
????????g.fillRect(?
0
?,??
0
?,?width,?height);
????????
????????Random?random??
=
???
new
??Random();????
????????
?????????
//
?生成干擾橢圓?????
???????????
for
??(?
int
??i??
=
???
0
?;?i??
<
???
5
?;?i?
++
?)???{
????????????g.setColor(getRandColor(?
50
?,??
100
?));
?????????????
int
??x??
=
??random.nextInt(width);
?????????????
int
??y??
=
??random.nextInt(height);
????????????g.drawOval(x,?y,??
4
?,??
4
?);
????????}?
?
????????g.setFont(?
new
??Font(?
""
?,?Font.PLAIN,??
40
?));
????????String?sRand??
=
???
""
?;
?????????
for
??(?
int
??i??
=
???
0
?;?i??
<
???
4
?;?i?
++
?)???{
?????????
//
??取隨機產生的認證碼(4位數字)??
?????????????String?rand??
=
??String.valueOf(random.nextInt(?
10
?));
????????????sRand??
+=
??rand;
?????????
//
??隨機產生顏色?????
?????????????g.setColor(
?????????????????
new
??Color(
?????????????????????
20
???
+
??random.nextInt(?
80
?),
?????????????????????
20
???
+
??random.nextInt(?
100
?),
?????????????????????
20
???
+
??random.nextInt(?
90
?)));
?????????
//
??畫數字?
?????????????g.drawString(rand,?(?
17
???
+
??random.nextInt(?
3
?))??
*
??i??
+
???
8
?,??
34
?);
?????
//
?生成干擾線?
???????????????
for
??(?
int
??k??
=
???
0
?;?k??
<
???
12
?;?k?
++
?)???{
?????????????????
int
??x??
=
??random.nextInt(width);
?????????????????
int
??y??
=
??random.nextInt(height);
?????????????????
int
??xl??
=
??random.nextInt(?
9
?);
?????????????????
int
??yl??
=
??random.nextInt(?
9
?);
????????????????g.drawLine(x,?y,?x??
+
??xl,?y??
+
??yl);
????????????}?
????????}?
????????req.getSession().setAttribute(?
"
?rand?
"
?,sRand);
????????g.dispose();
????????javax.imageio.ImageIO.write(image,??
"
?JPEG?
"
?,?resp.getOutputStream());
????}?
}?
posted on 2006-07-05 14:18
knowhow 閱讀(220)
評論(0) 編輯 收藏 所屬分類:
Java基礎知識