1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > java生成验证码工具类_Java生成图形验证码工具类

java生成验证码工具类_Java生成图形验证码工具类

时间:2023-07-25 16:22:20

相关推荐

java生成验证码工具类_Java生成图形验证码工具类

生成验证码效果

validatecode.java 验证码生成类

package cn.dsna.util.images;

import java.awt.color;

import java.awt.font;

import java.awt.graphics2d;

import java.awt.image.bufferedimage;

import java.io.fileoutputstream;

import java.io.ioexception;

import java.io.outputstream;

import java.util.random;

import javax.imageio.imageio;

/**

* 验证码生成器

* @author dsna

*

*/

public class validatecode {

// 图片的宽度。

private int width = 160;

// 图片的高度。

private int height = 40;

// 验证码字符个数

private int codecount = 5;

// 验证码干扰线数

private int linecount = 150;

// 验证码

private 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 = buffimg.creategraphics();

// 生成随机数

random random = new random();

// 将图像填充为白色

g.setcolor(color.white);

g.fillrect(0, 0, width, height);

// 创建字体

imgfontbyte imgfont=new imgfontbyte();

font font =imgfont.getfont(fontheight);

g.setfont(font);

for (int i = 0; i < linecount; i++) {

int xs = random.nextint(width);

int ys = random.nextint(height);

int xe = xs+random.nextint(width/8);

int ye = ys+random.nextint(height/8);

red = random.nextint(255);

green = random.nextint(255);

blue = random.nextint(255);

g.setcolor(new color(red, green, blue));

g.drawline(xs, ys, xe, ye);

}

// randomcode记录随机产生的验证码

stringbuffer randomcode = new stringbuffer();

// 随机产生codecount个字符的验证码。

for (int i = 0; i < codecount; i++) {

string strrand = string.valueof(codesequence[random.nextint(codesequence.length)]);

// 产生随机的颜色值,让输出的每个字符的颜色值都将不同。

red = random.nextint(255);

green = random.nextint(255);

blue = random.nextint(255);

g.setcolor(new color(red, green, blue));

g.drawstring(strrand, (i + 1) * x, codey);

// 将产生的四个随机数组合在一起。

randomcode.append(strrand);

}

// 将四位数字的验证码保存到session中。

code=randomcode.tostring();

}

public void write(string path) throws ioexception {

outputstream sos = new fileoutputstream(path);

this.write(sos);

}

public void write(outputstream sos) throws ioexception {

imageio.write(buffimg, "png", sos);

sos.close();

}

public bufferedimage getbuffimg() {

return buffimg;

}

public string getcode() {

return code;

}

}

imgfontbyte.java

package cn.dsna.util.images;

import java.io.bytearrayinputstream;

import java.awt.*;

/**

* ttf字体文件

* @author dsna

*

*/

public class imgfontbyte {

public font getfont(int fontheight){

try {

font basefont = font.createfont(font.truetype_font, new bytearrayinputstream(hex2byte(getfontbytestr())));

return basefont.derivefont(font.plain, fontheight);

} catch (exception e) {

return new font("arial",font.plain, fontheight);

}

}

private byte[] hex2byte(string str) {

if (str == null)

return null;

str = str.trim();

int len = str.length();

if (len == 0 || len % 2 == 1)

return null;

byte[] b = new byte[len / 2];

try {

for (int i = 0; i < str.length(); i += 2) {

b[i / 2] = (byte) integer

.decode("0x" + str.substring(i, i + 2)).intvalue();

}

return b;

} catch (exception e) {

return null;

}

} /**

* ttf字体文件的十六进制字符串

* @return

*/

private string getfontbytestr(){ return null;

return str;//字符串太长 在附件中找

}

}

validatecodeservlet.java servlet调用方法

package cn.dsna.util.images;

import java.io.ioexception;

import javax.servlet.servletexception;

import javax.servlet.http.httpservlet;

import javax.servlet.http.httpservletrequest;

import javax.servlet.http.httpservletresponse;

import javax.servlet.http.httpsession;

public class validatecodeservlet extends httpservlet {

private static final long serialversionuid = 1l;

@override

protected void doget(httpservletrequest reqeust,

httpservletresponse response) throws servletexception, ioexception {

// 设置响应的类型格式为图片格式

response.setcontenttype("image/jpeg");

//禁止图像缓存。

response.setheader("pragma", "no-cache");

response.setheader("cache-control", "no-cache");

response.setdateheader("expires", 0);

httpsession session = reqeust.getsession();

validatecode vcode = new validatecode(120,40,5,100);

session.setattribute("code", vcode.getcode());

vcode.write(response.getoutputstream());

}

/**

* web.xml 添加servlet

validatecodeservlet

cn.dsna.util.images.validatecodeservlet

validatecodeservlet

*.images

在地址栏输入xxx/dsna.images 测试

*/

}

测试类

validatecodetest.java

package cn.dsna.util.images;

import java.io.ioexception;

import java.util.date;

public class validatecodetest {

/**

* @param args

*/

public static void main(string[] args) {

validatecode vcode = new validatecode(120,40,5,100);

try {

string path="d:/t/"+new date().gettime()+".png";

system.out.println(vcode.getcode()+" >"+path);

vcode.write(path);

} catch (ioexception e) {

e.printstacktrace();

}

}

}

web.xml 配置

validatecodeservlet

cn.dsna.util.images.validatecodeservlet

validatecodeservlet

*.images

以上所述是小编给大家介绍的java生成图形验证码工具类,希望对大家有所帮助

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。