首页 > 代码库 > 验证码 Demo

验证码 Demo

 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