实现机理:生成一串随机数,其中可以是固定值,可以是可变值,本人的随机数长度固定为4(可根据您自己的程序进行改变),等到随机字符串产生后,将此字符串打乱成字符,然后一个一个的把字符画到输出流里,其中每个字符的颜色即RGB值也是随机产生,在画面的同时,再产生若干条干扰线,以防止验证码被破解。然后把图象流输出到客户端。其中客户端的HTML代码利用img标签实现。
1
package com.kai;
2![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
import java.awt.Color;
4
import java.awt.Font;
5
import java.awt.Graphics2D;
6
import java.awt.image.BufferedImage;
7
import java.io.IOException;
8
import java.util.Random;
9![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
import javax.imageio.ImageIO;
11
import javax.servlet.ServletException;
12
import javax.servlet.http.HttpServlet;
13
import javax.servlet.http.HttpServletRequest;
14
import javax.servlet.http.HttpServletResponse;
15![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
16
public class Getshowimg extends HttpServlet {
17![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
18
private static final long serialVersionUID = -4880176221277149304L;
19![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
20
public void service(HttpServletRequest req, HttpServletResponse resp)
21
throws ServletException, IOException {
22
//设置响应格式
23
resp.setContentType("image/jpeg");
24
//定义一个BufferedImage对象 其构造函数属性参照API
25
BufferedImage image = new BufferedImage(80,20,BufferedImage.SCALE_SMOOTH);
26
//根据上述对象产生一个Graphics2D上下文
27
Graphics2D graphics = image.createGraphics();
28
//将上下文颜色设置为白色
29
graphics.setColor(Color.WHITE);
30
graphics.fillRect(0, 0,100,20);
31
//设置书写字体
32
graphics.setFont(new Font("Roman",Font.CENTER_BASELINE,18));
33
//randomString方法见后面,负责产生由4个字符组成的字符串
34
String randomStr=randomString(4);
35
for(int i=0;i<4;i++){
36
//随机设置上下文颜色
37
graphics.setColor(new Color(new Random().nextInt(250),new Random().nextInt(250),
38
new Random().nextInt(250)));
39
//按字符把其画出来
40
graphics.drawString(randomStr.substring(i,i+1),15*i+15,15);
41
//产生干扰线
42
Random ran = new Random();
43
graphics.drawLine(ran.nextInt(80),ran.nextInt(20),ran.nextInt(80), ran.nextInt(20));
44
}
45
//禁止缓冲代码,没有这段的话则不能进行更新显示,删除效果请自行测试
46
resp.setHeader("Prama", "no-cache");
47
resp.setHeader("Coche-Control", "no-cache");
48
resp.setDateHeader("Expires", 0);
49
//写入到客户端
50
ImageIO.write(image,"jpeg",resp.getOutputStream());
51
}
52
53
//number 产生有number个字符组成的字符串
54
public String randomString(int number){
55
//字符串的内容组成
56
String str="1234567890qwertyuioplkjhgfdsazxcvbnm";
57
char[] chars=str.toCharArray();
58
int length=chars.length;
59
StringBuilder sb=new StringBuilder();
60
Random random=new Random();
61
//随机生成number个字符
62
for(int i=0;i<number;i++){
63
//把单个字符转换成字符串然后追加到已经产生的字符串中
64
sb.append(new String(new Character(chars[random.nextInt(length)]).toString()));
65
}
66
return sb.toString();
67
}
68
}
69![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
34
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
35
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
36
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
37
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
38
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
39
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
40
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
41
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
42
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
43
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
44
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
45
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
46
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
47
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
48
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
49
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
50
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
51
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
52
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
53
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
54
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
55
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
56
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
57
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
58
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
59
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
60
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
61
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
62
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
63
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
64
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
65
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
66
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
67
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
68
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
69
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<script type="text/javascript">
function doinit()
{
document.getElementById("img0").src="servlet/Getshowimg";
}
</script>
</head>
<body>
验证码:
<IMG src='servlet/Getshowimg' id="img0" vspace=3 ><a onclick="doinit()" style="cursor: pointer">看不清?</a>
</body>
function doinit()
{
document.getElementById("img0").src="servlet/Getshowimg";
}
</script>
</head>
<body>
验证码:
<IMG src='servlet/Getshowimg' id="img0" vspace=3 ><a onclick="doinit()" style="cursor: pointer">看不清?</a>
</body>