zoukankan      html  css  js  c++  java
  • 验证码 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:写验证码不能把所有的都用上,这样就无法识别了,可以选择其中的几种进行,如写汉字只加干扰线,写字母加旋转等。

  • 相关阅读:
    shell脚本比较字符串相等
    从自身的经历讨论手工测试与自动化测试
    读《Linux Shell脚本攻略》(第2版) 一遍、二遍体会
    也许开发需要的只是一份简单明了的表格
    linux 命令:tr 的简单使用
    docker的数据持久化
    docker基础操作
    centos7 docker镜像源设置
    DockerUI(图形化管理)
    Docker 常用命令
  • 原文地址:https://www.cnblogs.com/liuwt365/p/4122977.html
Copyright © 2011-2022 走看看