验证码生成器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
packagecom.lizhou.tools;
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics;
import java.awt.Graphics2D;
importjava.awt.image.BufferedImage;
importjava.util.Random;
/**
* 验证码生成器
*
* @author bojiangzhou
*/
public class VCodeGenerator {
/**
* 验证码来源
*/
final private char[] code = {
'2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'm', 'n', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F',
'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R',
'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
};
/**
* 字体
*/
final private String[] fontNames = new String[]{
"黑体", "宋体", "Courier", "Arial",
"Verdana", "Times", "Tahoma", "Georgia"};
/**
* 字体样式
*/
final private int[] fontStyles = new int[]{
Font.BOLD, Font.ITALIC|Font.BOLD };
/**
* 验证码长度
* 默认4个字符
*/
privateintvcodeLen = 4;
/**
* 验证码图片字体大小
* 默认17
*/
privateintfontsize = 21;
/**
* 验证码图片宽度
*/
privateint width = (fontsize+1)*vcodeLen+10;
/**
* 验证码图片高度
*/
privateint height = fontsize+12;
/**
* 干扰线条数
* 默认3条
*/
privateintdisturbline = 3;
publicVCodeGenerator(){}
/**
* 指定验证码长度
* @paramvcodeLen验证码长度
*/
publicVCodeGenerator(intvcodeLen) {
this.vcodeLen = vcodeLen;
this.width = (fontsize+1)*vcodeLen+10;
}
/**
* 生成验证码图片
* @paramvcode要画的验证码
* @paramdrawline是否画干扰线
* @return
*/
publicBufferedImagegeneratorVCodeImage(String vcode, booleandrawline){
//创建验证码图片
BufferedImagevcodeImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = vcodeImage.getGraphics();
//填充背景色
g.setColor(new Color(246, 240, 250));
g.fillRect(0, 0, width, height);
if(drawline){
drawDisturbLine(g);
}
//用于生成伪随机数
Random ran = new Random();
//在图片上画验证码
for(int i = 0;i //设置字体 g.setFont(new Font(fontNames[ran.nextInt(fontNames.length)], fontStyles[ran.nextInt(fontStyles.length)], fontsize)); //随机生成颜色 g.setColor(getRandomColor()); //画验证码 g.drawString(vcode.charAt(i)+"", i*fontsize+10, fontsize+5); } //释放此图形的上下文以及它使用的所有系统资源 g.dispose(); returnvcodeImage; } /** * 获得旋转字体的验证码图片 * @paramvcode * @paramdrawline是否画干扰线 * @return */ publicBufferedImagegeneratorRotateVCodeImage(String vcode, booleandrawline){ //创建验证码图片 BufferedImagerotateVcodeImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = rotateVcodeImage.createGraphics(); //填充背景色 g2d.setColor(new Color(246, 240, 250)); g2d.fillRect(0, 0, width, height); if(drawline){ drawDisturbLine(g2d); } //在图片上画验证码 for(int i = 0;i BufferedImagerotateImage = getRotateImage(vcode.charAt(i));