首页 > 代码库 > 验证码 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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。