码迷,mamicode.com
首页 > 其他好文 > 详细

验证码 Demo

时间:2014-11-26 13:55:06      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   os   sp   for   on   

 1         //设置响应头
 2         response.setCharacterEncoding("image/jpeg");
 3         int width=160;
 4         int height=40;
 5         BufferedImage image=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
 6         Graphics g=image.getGraphics();
 7         Graphics2D g2d = (Graphics2D) g;
 8         g2d.setColor(Color.WHITE);
 9         g2d.fillRect(0, 0, width, height);
10         g2d.setFont(new Font("宋体", Font.BOLD, 18));
11          Random random=new Random();
12         for(int i=0;i<4;i++)//获取随机四个汉字
13         {
14             Color c=new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256));
15             String s=GetStr();
16             
17             AffineTransform aff = new AffineTransform();
18             aff.rotate(Math.random(),i*10,height-20);//旋转
19             aff.scale(0.2+Math.random(), 0.2+Math.random());//缩放
20             g2d.setTransform(aff);
21             System.err.println(">:"+s);        
22             
23             g2d.setColor(c);
24             g2d.drawString(s, i*10, height- 5);
25         }
26         
27         for(int i=0;i<3;i++)    //干扰线
28         {
29             Color c=new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256));
30             g2d.setColor(c);
31             g2d.drawLine(random.nextInt(width), random.nextInt(height), random.nextInt(width), random.nextInt(height));
32             
33         }
34         g2d.dispose();//图片生效
35         ImageIO.write(image, "jpeg", response.getOutputStream());//输出    
36         System.out.println("输出");
37     }
38     
39     //获取汉字
40     private static String GetStr()
41     {
42         String str = null;
43         try {
44             
45             int hightPos, lowPos; // 定义高低位
46             Random random = new Random();
47             hightPos = (176 + Math.abs(random.nextInt(39)));//获取高位值
48             lowPos = (161 + Math.abs(random.nextInt(93)));//获取低位值
49             byte[] b = new byte[2];
50             b[0] = (new Integer(hightPos).byteValue());
51             b[1] = (new Integer(lowPos).byteValue());
52             str = new String(b, "GBK");//转成中文
53             
54         } catch (Exception e) {
55             e.printStackTrace();
56         }
57         return str;
58         
59     }

 PS:写验证码不能把所有的都用上,这样就无法识别了,可以选择其中的几种进行,如写汉字只加干扰线,写字母加旋转等。

验证码 Demo

标签:style   blog   io   ar   color   os   sp   for   on   

原文地址:http://www.cnblogs.com/liuwt365/p/4122977.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!