代码说明:
- 生成4位长度的验证码;
- 范围是0 - 9+A - Z;
代码如下:
<%@ page language="java" contentType="image/jpeg" pageEncoding="UTF-8"%>
<%@ page import="java.util.*,java.awt.image.*,java.awt.*,javax.imageio.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%!
/*指定范围内的随机颜色*/
Color getRandomColor(int start,int end){
Random random = new Random();
if(start > 255){
start = 255;
}
if(end > 255){
end = 255;
}
int r = start + random.nextInt(end-start);
int g = start + random.nextInt(end-start);
int b = start + random.nextInt(end-start);
return new Color(r,g,b);
}
%>
<%
/*页面不缓存*/
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(getRandomColor(200,250));
//填充
g.fillRect(0, 0, width, height);
//字体
g.setFont(new Font("Times New Roman",Font.PLAIN,18));
//干扰线
g.setColor(getRandomColor(100,250));
for(int i = 0; i < 50; i++) {
int startX = random.nextInt(width);
int startY = random.nextInt(height);
int endX = random.nextInt(width);
int endY = random.nextInt(height);
g.drawLine(startX, startY, startX+endX, startY+endY);
}
//生成验证码
String sRand = "";
String seed = "0123456789ABCDEFGHIGKLMNOPQRSTUVWSXY";
int len = seed.length();
for(int i = 0; i < 4; i++) {
String rand = String.valueOf(seed.charAt(random.nextInt(len)));
sRand+=rand;
g.setColor(new Color(20+random.nextInt(100),20+random.nextInt(100),20+random.nextInt(100)));
g.drawString(rand, 12*i+6, 15);
}
//保存到session会话层
session.setAttribute("rand",sRand);
//显示图像
g.dispose();
//写图像到页面
ImageIO.write(image, "JPEG", response.getOutputStream());
%>
</body>
<script>
</script>
</html>
运行结果: