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

验证码

时间:2015-09-04 07:08:29      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

防止恶意攻击,机器人注册,暴力破解。
    *Java:一处编译,到处运行。
    ×自定义;用AWT(Abstract Window Toolkits,依赖本地的类库,平台依赖性)实现,有点费劲
        >用例:VerifyCode
            //验证码:实体类
            public class VerifyCode(){
                //验证码矩形宽高
                private int width=70;
                private int hight=35;
                //随机数,下面有用
                private Random random=new Random();
                //验证码中的字体类型
                private String[] fontNames={};
                //矩形框背景色,默认为白色
                private Color bgColor=new Color(255,255,255);
                private String codes="";
                
                //验证码文本,此处为字符串
                private String text;
                
                //画3条线,随机长度(范围自定义),颜色为蓝色
                public void drawLine(BufferedImage image){
                    
                    //画线条数据
                    int num=3;
                    
                    //得到2维制图工具
                    Graphics2D g2=image.getGraphics();
                    
                    //循环画3条线
                    for(int i=0;i<num;i++){

                        //分别得到画线两个点的坐标
                        int x1=random.nextInt(width);
                        int y1=random.nextInt(height);
                        int x2=random.nextInt(width);
                        int y2=random.nextInt(height);
                        
                        //设置画笔为1.5px框
                        g2.setStroke(new BasicStroke(1.5F));
                        //设置线条夜色为蓝色
                        g2.setColor(Color.blue);
                        //划线
                        g2.drawLine(x1,y2,x2,y2);
                    }
                }
                
                //创建缓冲区图片
                public BufferedImage createImage(){
                        
                        //创建缓冲区图片
                        BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
                        //得到2维制图工具
                        Graphics2D g2=(Graphics2D)image.getGraphics();

                        //划线
                        g2.fillRect(0,0,width,height);
                        return image;
                }

                //获取图片接口,其中绘制4个字符串,设置字体,颜色。
                public BufferedImage getImage(){
                        
                        //创建缓冲区图片
                        BufferedImage image=createImage();
                        //得到制图工具
                        Graphics2D g2=image.getGraphics();
                        //设置字符串建立者(效率高)
                        StringBuilder sb=new StringBuilder();
                        
                        //画4个字符串
                        for(int i=0;i<4;i++){
                            //设置要绘制的字符
                            String str=getRandomChar();
                            //追加字符
                            sb.append(str);
                            //设置线条字体
                            g2.setFont(getRandomFont());
                            //设置线条颜色
                            g2.setColor(getRandomColor());    
                            //基线点横坐标
                            int x=i*1.0F*width/4;
                            //基线点纵坐标
                            int y=height-5;
                            //画4个字符
                            g2.drawString(str,x,y);
                        }
                        //text的setter
                        this.text=sb.toString();
                        drawLine(image);

                        
                }
                
                //供外部访问的接口,得到text
                public String getText(){
                    return text;    
                }
                
                //得到随机字体
                public Font getRandomFont(){
                    
                    //
                    int index=random.nextInt(fontNames.length);
                    //字体名字
                    String fontName=fontNames[index];
                    //字体样式
                    int style=random.nextInt(4);
                    //字体大小
                    int size=random.nextInt(5)+24;
                    
                    return new Font(fontName,style,size);    
                }
                
                //获得随机字符串
                public char getRandomChar(){
                    int index=random.nextInt();
                    return codes.charat(index);
                }

                //获得随机组合色
                public Color randomColor(){

                    int red=random.nextInt(150);
                    int green=random.nextInt(150);
                    int blue=random.nextInt(150);
                    
                    //
                    return new Color(red,green,blue);    
                }
            }

 

验证码

标签:

原文地址:http://www.cnblogs.com/liaowanzhong/p/4781007.html

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