本站首页    管理页面    写新日志    退出


«November 2025»
1
2345678
9101112131415
16171819202122
23242526272829
30


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7653852
建立时间:2006年5月29日




[J2SE]彩色验证码实现
软件技术

lhwork 发表于 2006/7/18 11:07:13

  1 500)this.width=500'> 500)this.width=500'> public   class  VerifyCode  500)this.width=500'> {   2 500)this.width=500'>     static  Random r  =   new  Random();   3 500)this.width=500'>     static  String ssource  =   " ABCDEFGHIJKLMNOPQRSTUVWXYZ "    +   " abcdefghijklmnopqrstuvwxyz "   +   " 0123456789 " ;   4 500)this.width=500'>     static   char [] src  =  ssource.toCharArray();   5 500)this.width=500'>       6 500)this.width=500'>       7 500)this.width=500'>     // 产生随机字符串   8 500)this.width=500'>        9 500)this.width=500'> 500)this.width=500'>     private   static  String randString ( int  length) 500)this.width=500'> {  10 500)this.width=500'>         char [] buf  =   new   char [length];  11 500)this.width=500'>         int  rnd;  12 500)this.width=500'> 500)this.width=500'>         for ( int  i = 0 ;i < length;i ++ ) 500)this.width=500'> {  13 500)this.width=500'>            rnd  =  Math.abs(r.nextInt())  %  src.length;  14 500)this.width=500'>              15 500)this.width=500'>            buf[i]  =  src[rnd];  16 500)this.width=500'>        }  17 500)this.width=500'>         return   new  String(buf);  18 500)this.width=500'>    }  19 500)this.width=500'>      20 500)this.width=500'>     // 调用该方法,产生随机字符串,  21 500)this.width=500'>     // 参数i: 为字符串的长度  22 500)this.width=500'> 500)this.width=500'>      public  String runVerifyCode( int  i) 500)this.width=500'> {  23 500)this.width=500'>        String VerifyCode  =  randString(i);  24 500)this.width=500'>         return  VerifyCode;  25 500)this.width=500'>    }  26 500)this.width=500'>      27 500)this.width=500'>      28 500)this.width=500'>     // 给定范围获得随机颜色  29 500)this.width=500'>      public  Color getRandColor( int  fc, int  bc)  30 500)this.width=500'> 500)this.width=500'>     500)this.width=500'> {  31 500)this.width=500'>       Random random  =   new  Random();  32 500)this.width=500'>        if (fc > 255 ) fc = 255 ;  33 500)this.width=500'>        if (bc > 255 ) bc = 255 ;  34 500)this.width=500'>        int  r = fc + random.nextInt(bc - fc);  35 500)this.width=500'>        int  g = fc + random.nextInt(bc - fc);  36 500)this.width=500'>        int  b = fc + random.nextInt(bc - fc);  37 500)this.width=500'>        return   new  Color(r,g,b);  38 500)this.width=500'>       }  39 500)this.width=500'>    40 500)this.width=500'>       // 调用该方法将得到的验证码生成图象  41 500)this.width=500'>       // sCode:传递验证码 w:图象宽度 h:图象高度  42 500)this.width=500'>        public  BufferedImage CreateImage(String sCode)  43 500)this.width=500'> 500)this.width=500'>       500)this.width=500'> {  44 500)this.width=500'> 500)this.width=500'>           try 500)this.width=500'> {      45 500)this.width=500'>               // 字符的字体  46 500)this.width=500'>             Font CodeFont  =   new  Font( " Arial Black " ,Font.PLAIN, 16 );  47 500)this.width=500'>             int  iLength  =  sCode.length();                     // 得到验证码长度  48 500)this.width=500'>              int  width = 22 * iLength, height = 20 ;                 // 图象宽度与高度  49 500)this.width=500'>              int  CharWidth  =  ( int )(width - 24 ) / iLength;         // 字符距左边宽度  50 500)this.width=500'>              int  CharHeight  =   16 ;                             // 字符距上边高度  51 500)this.width=500'>              52 500)this.width=500'>             //  在内存中创建图象  53 500)this.width=500'>             BufferedImage image  =   new  BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);  54 500)this.width=500'>              55 500)this.width=500'>             //  获取图形上下文  56 500)this.width=500'>             Graphics g  =  image.getGraphics();  57 500)this.width=500'>              58 500)this.width=500'>             // 生成随机类  59 500)this.width=500'>             Random random  =   new  Random();  60 500)this.width=500'>              61 500)this.width=500'>             //  设定背景色  62 500)this.width=500'>             g.setColor(getRandColor( 200 , 240 ));  63 500)this.width=500'>            g.fillRect( 0 ,  0 , width, height);  64 500)this.width=500'>              65 500)this.width=500'>             // 设定字体  66 500)this.width=500'>             g.setFont(CodeFont);  67 500)this.width=500'>              68 500)this.width=500'>             // 画随机颜色的边框  69 500)this.width=500'>             g.setColor(getRandColor( 10 , 50 ));  70 500)this.width=500'>            g.drawRect( 0 , 0 ,width - 1 ,height - 1 );  71 500)this.width=500'>              72 500)this.width=500'>             //  随机产生155条干扰线,使图象中的认证码不易被其它程序探测到  73 500)this.width=500'>             g.setColor(getRandColor( 160 , 200 ));  74 500)this.width=500'>             for  ( int  i = 0 ;i < 155 ;i ++ )  75 500)this.width=500'> 500)this.width=500'>             500)this.width=500'> {  76 500)this.width=500'>                   int  x  =  random.nextInt(width);  77 500)this.width=500'>                   int  y  =  random.nextInt(height);  78 500)this.width=500'>                   int  xl  =  random.nextInt( 12 );  79 500)this.width=500'>                   int  yl  =  random.nextInt( 12 );  80 500)this.width=500'>                  g.drawLine(x,y,x + xl,y + yl);  81 500)this.width=500'>            }  82 500)this.width=500'>              83 500)this.width=500'>      84 500)this.width=500'>             for  ( int  i = 0 ;i < iLength;i ++ )  85 500)this.width=500'> 500)this.width=500'>             500)this.width=500'> {  86 500)this.width=500'>                String rand  =  sCode.substring(i,i + 1 );   87 500)this.width=500'>                 //  将认证码显示到图象中  88 500)this.width=500'>                 g.setColor( new  Color( 20 + random.nextInt( 60 ), 20 + random.nextInt( 120 ), 20 + random.nextInt( 180 )));  89 500)this.width=500'>                g.drawString(rand,CharWidth * i + 14 ,CharHeight);  90 500)this.width=500'>            }  91 500)this.width=500'>             //  图象生效  92 500)this.width=500'>             g.dispose();  93 500)this.width=500'>             return  image;  94 500)this.width=500'> 500)this.width=500'>        } catch (Exception e) 500)this.width=500'> {  95 500)this.width=500'>             // e.printStackTrace();      96 500)this.width=500'>             // System.out.println(e.getMessage());  97 500)this.width=500'>             }  98 500)this.width=500'>         return   null ;  99 500)this.width=500'>    } 100 500)this.width=500'>     101 500)this.width=500'>     // 测试 102 500)this.width=500'> 500)this.width=500'>      public   static   void  main(String[] args) 500)this.width=500'> {     103 500)this.width=500'>             // VerifyCode vc = new VerifyCode(); 104 500)this.width=500'>             // String s1 = vc.runVerifyCode(4); 105 500)this.width=500'>             // Fun.DreamNewsTitle;System.out.println(s1);     106 500)this.width=500'>             // Image im = vc.CreateImage(s1); 107 500)this.width=500'>             // Graphics g = im.getGraphics(); 108 500)this.width=500'>             // g.drawImage(im,20,20,this); 109 500)this.width=500'>             // g.drawString(s1,20,20); 110 500)this.width=500'>              111 500)this.width=500'>    }      112 500)this.width=500'>}


阅读全文(1745) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.813 second(s), page refreshed 144810212 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号