?? verifycode.java
字號:
/***************************************************
*
* 源文件名: VerifyCode.java
* 功 能: 夢想年華新聞系統 - 驗證碼
* 作者:夢想年華 [DreamTime]
* Email:fanwsp@126.com
* QQ:122142023
* CopyRight(c)2005-2006 by DreamTime
*
****************************************************
*/
package dreamtime.dreamnews; //指定類所在的包
import java.awt.*; //導入類
import java.awt.image.*;
import java.util.*;
import javax.imageio.*;
//定義類
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);
}
//調用該方法,產生隨機字符串,
//參數i: 為字符串的長度
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)
{
try{
//字符的字體
Font CodeFont = new Font("Arial Black",Font.PLAIN,16);
int iLength = sCode.length(); //得到驗證碼長度
int width=22*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);
}
// 圖象生效
g.dispose();
return image;
}catch(Exception e){
//e.printStackTrace();
//System.out.println(e.getMessage());
}
return null;
}
//測試
public static void main(String[] args){
//VerifyCode vc = new VerifyCode();
//String s1 = vc.runVerifyCode(4);
//Fun.DreamNewsTitle;System.out.println(s1);
//Image im = vc.CreateImage(s1);
//Graphics g = im.getGraphics();
//g.drawImage(im,20,20,this);
//g.drawString(s1,20,20);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -