易网时代-编程资源站
Welcome
微信登录
编程资源
图片资源库
蚂蚁家优选
PDF转换器
软件资源
软件开发
、
小程序制作
、
系统集成与运维
、
空间租用
、
硬件开发
、
视频监控
、
技术咨询与支持
——联系电话:0311-88999002/88999003
首页
/
操作系统
/
Linux
/
Java生成验证码
Java生成验证码
package
cn.net.seek.util;
import
java.awt.Color;
import
java.awt.Font;
import
java.awt.Graphics;
import
java.awt.image.BufferedImage;
import
java.io.IOException;
import
java.io.OutputStream;
import
java.util.Random;
import
javax.imageio.ImageIO;
public
class
ImgZoom {
// 验证码图片中可以出现的字符集,可根据需要修改
private
char
mapTable[] = {
"A"
,
"B"
,
"C"
,
"D"
,
"E"
,
"F"
,
"G"
,
"H"
,
"I"
,
"J"
,
"K"
,
"L"
,
"M"
,
"N"
,
"O"
,
"P"
,
"Q"
,
"R"
,
"S"
,
"T"
,
"U"
,
"V"
,
"W"
,
"X"
,
"Y"
,
"Z"
,
"a"
,
"b"
,
"c"
,
"d"
,
"e"
,
"f"
,
"g"
,
"h"
,
"i"
,
"j"
,
"k"
,
"l"
,
"m"
,
"n"
,
"o"
,
"p"
,
"q"
,
"r"
,
"s"
,
"t"
,
"u"
,
"v"
,
"w"
,
"x"
,
"y"
,
"z"
,
"0"
,
"1"
,
"2"
,
"3"
,
"4"
,
"5"
,
"6"
,
"7"
,
"8"
,
"9"
};
/**
* 生成验证码
* @param width 宽度 60
* @param height 高度 24
* @param os 输出流
* @return 生成的随机字符串
*/
public
String getCertPic(
int
width,
int
height, OutputStream os) {
BufferedImage image =
new
BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 获取图形上下文
Graphics g = image.getGraphics();
// 生成随机类
Random random =
new
Random();
// 设定背景色
// g.setColor(getRandColor(200, 250)); //随机生成背景色
g.setColor(
new
Color(
255
,
255
,
255
));
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 = 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);
}
// 取随机产生的认证码(5位)
String sRand =
""
;
for
(
int
i =
0
; i <
5
; i++) {
String rand = mapTable[(
int
) (mapTable.length * Math.random())]
+
""
;
sRand += rand;
// 将认证码显示到图象中
g.setColor(
new
Color(
20
+ random.nextInt(
110
),
20
+ random
.nextInt(
110
),
20
+ random.nextInt(
110
)));
// 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand,
10
* i +
3
, (
int
) (Math.random() *
9
+
14
));
// 14-23 Math.round(Math.random()*(Max-Min)+Min)
}
// 释放图形上下文
g.dispose();
try
{
// 输出图象到页面
ImageIO.write(image,
"JPEG"
, os);
}
catch
(IOException e) {
return
""
;
}
return
sRand;
}
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);
}
}
收藏该网址
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图