天天看點

Java生成彩色驗證碼 作者:夢想年華 日期:2006-09-12

 作者:夢想年華 日期:2006-09-12

字型大小: 小 中 大

Java生成彩色驗證碼 作者:夢想年華 日期:2006-09-12
Java生成彩色驗證碼 作者:夢想年華 日期:2006-09-12
Java生成彩色驗證碼 作者:夢想年華 日期:2006-09-12

一個用Java生成的彩色驗證碼。

Java生成彩色驗證碼 作者:夢想年華 日期:2006-09-12

程式代碼

package dreamtime .guestbook ;     //指定類所在的包

import java .awt . * ;             //導入類

import java .awt .image . * ;

import java .util . * ;

//定義類

public class VerifyCode  {

     static Random r  =  new Random ( ) ;

     static  String ssource  =  "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

+  "abcdefghijklmnopqrstuvwxyz"  +  "0123456789" ;

     static char [ ] src  = ssource .toCharArray ( ) ;

     //産生随機字元串

     private  static  String randString  ( int  length ) {

        char [ ] buf  =  new char [ length ] ;

         int rnd ;

         for ( int i =0 ;i < length ;i + + ) {

            rnd  =  Math . abs (r .nextInt ( ) )  % src . length ;

            buf [i ]  = src [rnd ] ;

         }

         return  new  String (buf ) ;

     }

     //調用該方法,産生随機字元串

     public  String runVerifyCode ( int i ) {

         String VerifyCode  = randString (i ) ;

         return VerifyCode ;

     }

     //給定範圍獲得随機顔色

     public  Color getRandColor ( int fc , int bc )

     {

       Random  random  =  new Random ( ) ;

        if (fc >255 ) fc =255 ;

        if (bc >255 ) bc =255 ;

        int r =fc + random .nextInt (bc -fc ) ;

        int g =fc + random .nextInt (bc -fc ) ;

        int b =fc + random .nextInt (bc -fc ) ;

        return  new  Color (r ,g ,b ) ;

        }

       //調用該方法将得到的驗證碼生成圖象

       //sCode:傳遞驗證碼 w:圖象寬度 h:圖象高度

       public BufferedImage CreateImage ( String sCode )

       {

           //字元的字型

        Font CodeFont  =  new Font ( "Arial Black" ,Font .PLAIN ,16 ) ;

         int iLength  = sCode . length ( ) ; //得到驗證碼長度

         int  width =24 *iLength ,  height =20 ; //圖象寬度與高度

         int CharWidth  =  ( int ) ( width -24 ) /iLength ;     //字元距左邊寬度

         int CharHeight  = 16 ;    //字元距上邊高度

                      // 在記憶體中建立圖象

        BufferedImage image  =  new BufferedImage ( width ,  height , BufferedImage .TYPE_INT_RGB ) ;

         // 擷取圖形上下文

        Graphics g  = image .getGraphics ( ) ;

         //生成随機類

        Random  random  =  new Random ( ) ;

         // 設定背景色

        g .setColor (getRandColor (200 ,240 ) ) ;

        g .fillRect (0 , 0 ,  width ,  height ) ;

         //設定字型

        g .setFont (CodeFont ) ;

         //畫随機顔色的邊框

        g .setColor (getRandColor (10 ,50 ) ) ;

        g .drawRect (0 ,0 , width -1 , height -1 ) ;

         // 随機産生155條幹擾線,使圖象中的認證碼不易被其它程式探測到

        g .setColor (getRandColor (160 ,200 ) ) ;

         for  ( int i =0 ;i <155 ;i + + )

         {

               int x  =  random .nextInt ( width ) ;

               int y  =  random .nextInt ( height ) ;

               int xl  =  random .nextInt (12 ) ;

               int yl  =  random .nextInt (12 ) ;

              g .drawLine (x ,y ,x +xl ,y +yl ) ;

         }

         for  ( int i =0 ;i <iLength ;i + + )

         {

             String rand  = sCode . substring (i ,i +1 ) ; 

             // 将認證碼顯示到圖象中

            g .setColor ( new  Color (20 + random .nextInt (60 ) ,20 + random .nextInt (120 ) ,20 + random .nextInt (180 ) ) ) ;

            g .drawString (rand ,CharWidth *i +14 ,CharHeight ) ;

         }

         // 圖象生效

         System .out . print (CharWidth ) ;

        g .dispose ( ) ;

         return image ;

     }

     //測試

     public  static  void main ( String [ ] args ) {    

            VerifyCode vc  =  new VerifyCode ( ) ;

             String s1  = vc .runVerifyCode (4 ) ;

             System .out .println (s1 ) ;    

             //Image im = vc.CreateImage(s1);

             //Graphics g = im.getGraphics();

             //g.drawImage(im,20,20,this);

             //g.drawString(s1,20,20);

     }    

}

[ /code ][/color]