import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
public class CodeUtil {
private CodeUtil() {}
private static final Random RAN_DOM = new Random();
private static final int MAX = 'Z'-'A'+1;
private static final int CHA = 'a'-'A';//得到 小写与大写之间的差
private static final int VAILDATE_WIDTH = 80;//验证码图片宽度
private static final int VAILDATE_HEIGHT = 22;//验证码图片高度
private static final char GET_CHAR(){
char c = (char) (RAN_DOM.nextInt(MAX)+'A');//随机产生A-Z char
c = RAN_DOM.nextBoolean()?(char)(c+CHA):c;//随机大小写
return c;
}
/**
* 生成随机数
* @param len
* @return
*/
public static final String GET_CODE( int len ){
StringBuffer sb = new StringBuffer();
for(int i=0;i<len;i++){
sb.append(GET_CHAR());
}
return sb.toString();
}
/**
* 写出图片
* @throws IOException
*/
public static final void WRITE_IMAGE( String code,String format,OutputStream os ) throws IOException{
BufferedImage big = new BufferedImage(VAILDATE_WIDTH, VAILDATE_HEIGHT, BufferedImage.TYPE_3BYTE_BGR);
//设置透明背景
Graphics2D imgPen = big.createGraphics();
big = imgPen.getDeviceConfiguration().createCompatibleImage(VAILDATE_WIDTH, VAILDATE_HEIGHT, Transparency.TRANSLUCENT);
imgPen.dispose();
//end
imgPen = big.createGraphics();
imgPen.setColor(Color.RED);
for( int i=0;i<RAN_DOM.nextInt(6)+3;i++ ){
imgPen.drawLine(RAN_DOM.nextInt(VAILDATE_WIDTH), RAN_DOM.nextInt(VAILDATE_HEIGHT),
RAN_DOM.nextInt(VAILDATE_WIDTH), RAN_DOM.nextInt(VAILDATE_HEIGHT));
}
// imgPen.setColor(Color.WHITE);
// imgPen.fillRect(0, 0, VAILDATE_WIDTH, VAILDATE_HEIGHT);
// imgPen.setColor(Color.BLACK);
// imgPen.drawRect(0, 0, VAILDATE_WIDTH-1, VAILDATE_HEIGHT-1);
imgPen.setColor(Color.RED);
imgPen.setFont(new Font(null,0,18));
imgPen.drawString(code, 6, VAILDATE_HEIGHT-6);
imgPen.dispose();
ImageIO.write(big, format, os);
}
}