Java生成彩色验证码

来源:互联网 发布:怎么用云解析解析域名 编辑:程序博客网 时间:2024/05/20 18:44

 作者:梦想年华 日期:2006-09-12

一个用Java生成的彩色验证码。
程序代码 程序代码

/*
 ************************************** 
 *  说明:  java生成校验码 
 * 文件名:  VerifyCode.java
 *
 *    作者:梦想年华
 *    Email:fanwsp@126.com
 *    HomePage:www.freeage.cn
 *     QQ:122142023 
 *     CopyRight(c)2005-2006 by DreamTime 
 * *************************************
*/


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]
 
原创粉丝点击