生成数字和字母组合的验证码
2014-03-24 13:22
387 查看
//生成数字和字母组合的验证码
public class ResponseDemo3 extends HttpServlet {
private static final long serialVersionUID =
1L;
private int WIDTH=140;
private int HEIGHT=35;
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws
ServletException, IOException {
BufferedImage image=new
BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
Graphics
g=image.getGraphics();
//1、设置背景色
setBackGround(g);
//2、设置边框
serBorder(g);
//3、画干扰线
drawRandomLine(g);
//4、写随机数
drawRandomNum((Graphics2D)g);
//禁止图像缓存。
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control",
"no-cache");
response.setDateHeader("Expires", 0);
//5、图形写给浏览器
response.setContentType("text/jpeg");
ImageIO.write(image, "jpg",
response.getOutputStream());
}
private void setBackGround(Graphics g) {
g.setColor(getRandColor(190,230));
g.fillRect(0, 0, WIDTH,
HEIGHT);
}
private void serBorder(Graphics g) {
g.setColor(Color.BLACK);
g.drawRect(1, 1, WIDTH-2,
HEIGHT-2);
}
private void drawRandomLine(Graphics g) {
g.setColor(Color.GRAY);
for(int
i=0;i<4;i++){
int x1=new
Random().nextInt(WIDTH);
int y1=new
Random().nextInt(HEIGHT);
int x2=new
Random().nextInt(WIDTH);
int y2=new
Random().nextInt(HEIGHT);
g.drawLine(x1,
y1, x2, y2);
}
}
private void drawRandomNum(Graphics2D g)
{
g.setColor(getRandColor(20,80));
//设置字体的大小
g.setFont(new
Font("宋体",Font.BOLD,30));
String
base="abcdefghijklmnopqrstuvwxyz0123456789";
int x=10;
for(int
i=0;i<6;i++){
int
degree=new Random().nextInt()0;//角度范围在-30-30
String
ch=base.charAt(new Random().nextInt(base.length()))+"";
//设置旋转角度
g.rotate(degree*Math.PI/180,x,20);
g.drawString(ch,
x, 25);
//每次旋转完后再把角度设置成原来的
g.rotate(-degree*Math.PI/180,x,20);
x+=20;
}
}
//给定范围获得随机颜色
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);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws
ServletException, IOException {
doGet(request,
response);
}
}
public class ResponseDemo3 extends HttpServlet {
private static final long serialVersionUID =
1L;
private int WIDTH=140;
private int HEIGHT=35;
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws
ServletException, IOException {
BufferedImage image=new
BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
Graphics
g=image.getGraphics();
//1、设置背景色
setBackGround(g);
//2、设置边框
serBorder(g);
//3、画干扰线
drawRandomLine(g);
//4、写随机数
drawRandomNum((Graphics2D)g);
//禁止图像缓存。
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control",
"no-cache");
response.setDateHeader("Expires", 0);
//5、图形写给浏览器
response.setContentType("text/jpeg");
ImageIO.write(image, "jpg",
response.getOutputStream());
}
private void setBackGround(Graphics g) {
g.setColor(getRandColor(190,230));
g.fillRect(0, 0, WIDTH,
HEIGHT);
}
private void serBorder(Graphics g) {
g.setColor(Color.BLACK);
g.drawRect(1, 1, WIDTH-2,
HEIGHT-2);
}
private void drawRandomLine(Graphics g) {
g.setColor(Color.GRAY);
for(int
i=0;i<4;i++){
int x1=new
Random().nextInt(WIDTH);
int y1=new
Random().nextInt(HEIGHT);
int x2=new
Random().nextInt(WIDTH);
int y2=new
Random().nextInt(HEIGHT);
g.drawLine(x1,
y1, x2, y2);
}
}
private void drawRandomNum(Graphics2D g)
{
g.setColor(getRandColor(20,80));
//设置字体的大小
g.setFont(new
Font("宋体",Font.BOLD,30));
String
base="abcdefghijklmnopqrstuvwxyz0123456789";
int x=10;
for(int
i=0;i<6;i++){
int
degree=new Random().nextInt()0;//角度范围在-30-30
String
ch=base.charAt(new Random().nextInt(base.length()))+"";
//设置旋转角度
g.rotate(degree*Math.PI/180,x,20);
g.drawString(ch,
x, 25);
//每次旋转完后再把角度设置成原来的
g.rotate(-degree*Math.PI/180,x,20);
x+=20;
}
}
//给定范围获得随机颜色
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);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws
ServletException, IOException {
doGet(request,
response);
}
}
相关文章推荐
- 2012年05月28日
- sqlserver卸载
- 跳转错误
- Only&nbsp;a&nbsp;type&nbsp;can&nbsp;be&nbsp;imported
- 利用commons-fileupload-1.2.2上传…
- 从数据库中查询出来的图片按表格的…
- javax.el.ELException:&nbsp;Function&nbsp;&#039;…
- com.microsoft.sqlserver.jdbc.SQL…
- java.io.EOFException
- 每个程序员都应该学习使用Python或Ruby
- linux工作进程状态显示---------top命令
- Win32 GUI编程之一---------编程需要的工具
- 在字符串中删除特定的字符
- 欢迎您在新浪博客安家
- 博客
- Unable&nbsp;to&nbsp;compile&nbsp;class&nbsp;for&nbsp;JSP
- 心得体会
- Unterminated&nbsp;&lt;%@&nbsp;page&nbsp;tag
- Unable&nbsp;to&nbsp;compile&nbsp;class&nbsp;for&nbsp;JSP
- Duplicate&nbsp;local&nbsp;variable&nbsp;user