随机验证码程序
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 阅读(216)
评论(0) 编辑 收藏 所属分类:
Java基础知识