Java代码生成图片验证码实现

时间:2025-04-04 15:20:22
  • package ;
  • import ;
  • import ;
  • import .Graphics2D;
  • import ;
  • import ;
  • import ;
  • import ;
  • import ;
  • import ;
  • /**
  • * 验证码生成器
  • */
  • public class ValidateCode {
  • // 图片的宽度。
  • private int width = 160;
  • // 图片的高度。
  • private int height = 40;
  • // 验证码字符个数
  • private int codeCount = 5;
  • // 验证码干扰线数
  • private int lineCount = 150;
  • // 验证码
  • private static String code = null;
  • // 验证码图片Buffer
  • private BufferedImage buffImg=null;
  • private char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J','K', 'L',
  • 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W','X', 'Y',
  • 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
  • public ValidateCode() {
  • this.createCode();
  • }
  • /**
  • *
  • * @param width 图片宽
  • * @param height 图片高
  • */
  • public ValidateCode(int width,int height) {
  • this.width=width;
  • this.height=height;
  • this.createCode();
  • }
  • /**
  • *
  • * @param width 图片宽
  • * @param height 图片高
  • * @param codeCount 字符个数
  • * @param lineCount 干扰线条数
  • */
  • public ValidateCode(int width,int height,int codeCount,int lineCount) {
  • this.width=width;
  • this.height=height;
  • this.codeCount=codeCount;
  • this.lineCount=lineCount;
  • this.createCode();
  • }
  • public void createCode() {
  • int x = 0,fontHeight=0,codeY=0;
  • int red = 0, green = 0, blue = 0;
  • x = width / (codeCount +2);//每个字符的宽度
  • fontHeight = height - 2;//字体的高度
  • codeY = height - 4;
  • // 图像buffer
  • buffImg = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
  • Graphics2D g = ();
  • // 生成随机数
  • Random random = new Random();
  • // 将图像填充为白色
  • ();
  • (0, 0, width, height);
  • // 创建字体
  • ImgFontByte imgFont=new ImgFontByte();
  • Font font =(fontHeight);
  • (font);
  • for (int i = 0; i < lineCount; i++) {
  • int xs = (width);
  • int ys = (height);
  • int xe = xs+(width/8);
  • int ye = ys+(height/8);
  • red = (255);
  • green = (255);
  • blue = (255);
  • (new Color(red, green, blue));
  • (xs, ys, xe, ye);
  • }
  • // randomCode记录随机产生的验证码
  • StringBuffer randomCode = new StringBuffer();
  • // 随机产生codeCount个字符的验证码。
  • for (int i = 0; i < codeCount; i++) {
  • String strRand = (codeSequence[()]);
  • // 产生随机的颜色值,让输出的每个字符的颜色值都将不同。
  • red = (255);
  • green = (255);
  • blue = (255);
  • (new Color(red, green, blue));
  • (strRand, (i + 1) * x, codeY);
  • // 将产生的四个随机数组合在一起。
  • (strRand);
  • }
  • // 将四位数字的验证码保存到Session中。
  • code = ();
  • }
  • public void write(String path) throws IOException {
  • OutputStream sos = new FileOutputStream(path);
  • this.write(sos);
  • }
  • public void write(OutputStream sos) throws IOException {
  • (buffImg, "png", sos);
  • ();
  • }
  • public BufferedImage getBuffImg() {
  • return buffImg;
  • }
  • public static String getCode() {
  • return code;
  • }
  • }