验证码实现

原创
2012/04/19 11:09
阅读数 731

 

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);
    }
     
}

 

展开阅读全文
加载中
点击加入讨论🔥(1) 发布并加入讨论🔥
打赏
1 评论
1 收藏
0
分享
返回顶部
顶部