Java生成彩色验证码

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

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

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


packagedreamtime .guestbook ; //指定类所在的包
importjava .awt . * ; //导入类
importjava .awt .image . * ;
importjava .util . * ;


//定义类

publicclassVerifyCode {
staticRandomr = newRandom ( ) ;
static Stringssource = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "abcdefghijklmnopqrstuvwxyz" + "0123456789" ;
staticchar [ ]src =ssource .toCharArray ( ) ;


//产生随机字符串
private static StringrandString ( int length ) {
char [ ]buf = newchar [ length ] ;
intrnd ;
for ( inti =0 ;i < length ;i + + ) {
rnd = Math . abs (r .nextInt ( ) ) %src . length ;
buf [i ] =src [rnd ] ;
}
return new String (buf ) ;
}

//调用该方法,产生随机字符串
public StringrunVerifyCode ( inti ) {
StringVerifyCode =randString (i ) ;
returnVerifyCode ;
}


//给定范围获得随机颜色
public ColorgetRandColor ( intfc , intbc )
{
Random random = newRandom ( ) ;
if (fc >255 )fc =255 ;
if (bc >255 )bc =255 ;
intr =fc + random .nextInt (bc -fc ) ;
intg =fc + random .nextInt (bc -fc ) ;
intb =fc + random .nextInt (bc -fc ) ;
return new Color (r ,g ,b ) ;
}

//调用该方法将得到的验证码生成图象
//sCode:传递验证码w:图象宽度h:图象高度
publicBufferedImageCreateImage ( StringsCode )
{
//字符的字体
FontCodeFont = newFont ( "ArialBlack" ,Font .PLAIN ,16 ) ;
intiLength =sCode . length ( ) ; //得到验证码长度
int width =24 *iLength , height =20 ; //图象宽度与高度
intCharWidth = ( int ) ( width -24 ) /iLength ; //字符距左边宽度
intCharHeight =16 ; //字符距上边高度

//在内存中创建图象
BufferedImageimage = newBufferedImage ( width , height ,BufferedImage .TYPE_INT_RGB ) ;

//获取图形上下文
Graphicsg =image .getGraphics ( ) ;

//生成随机类
Random random = newRandom ( ) ;

//设定背景色
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 ( inti =0 ;i <155 ;i + + )
{
intx = random .nextInt ( width ) ;
inty = random .nextInt ( height ) ;
intxl = random .nextInt (12 ) ;
intyl = random .nextInt (12 ) ;
g .drawLine (x ,y ,x +xl ,y +yl ) ;
}


for ( inti =0 ;i <iLength ;i + + )
{
Stringrand =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 ( ) ;
returnimage ;
}

//测试
public static voidmain ( String [ ]args ) {
VerifyCodevc = newVerifyCode ( ) ;
Strings1 =vc .runVerifyCode (4 ) ;
System .out .println (s1 ) ;
//Imageim=vc.CreateImage(s1);
//Graphicsg=im.getGraphics();
//g.drawImage(im,20,20,this);
//g.drawString(s1,20,20);

}
}
[ /code ][/color]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值