所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息
输入表单提交网站验证,验证成功后才能使用某项功能。不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了 验证码技术。
下面是用JGraph组件生成图片验证码的代码......
(注意:标准的JDK 不包含JGraph组件包,要单独下载(sun官方),添加到classpath环境)
package javabean;
import java.awt.Color;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import org.jgraph.JGraph;
import org.jgraph.graph.DefaultCellViewFactory;
import org.jgraph.graph.DefaultGraphCell;
import org.jgraph.graph.DefaultGraphModel;
import org.jgraph.graph.DefaultPort;
import org.jgraph.graph.GraphConstants;
import org.jgraph.graph.GraphLayoutCache;
import org.jgraph.graph.GraphModel;
public class Graphic
{
String webroot; //生成的图片验证码的存放目录
String filename; //图片验证码文件名
String random; //验证码字符串
public Graphic()
{
webroot="E://Img"; //这里设置图片验证码放在E盘Img目录下
filename="number.png";
}
public String getFilename()
{
return filename;
}
public void setFilename(String filename)
{
this.filename=filename;
}
public String getRandom()
{
return random;
}
public void setRandom(String random)
{
this.random=random;
}
public void paint()
{
GraphModel model=new DefaultGraphModel();
GraphLayoutCache view=new GraphLayoutCache(model,new DefaultCellViewFactory());
JGraph graph=new JGraph(model,view);
DefaultGraphCell cell=new DefaultGraphCell(random);
GraphConstants.setBounds(cell.getAttributes(),new Rectangle2D.Double(0,0,100,50));
GraphConstants.setGradientColor(cell.getAttributes(), Color.orange);
GraphConstants.setOpaque(cell.getAttributes(),true);
DefaultPort port=new DefaultPort();
cell.add(port);
graph.getGraphLayoutCache().insert(cell);
JFrame frame=new JFrame();
frame.getContentPane().add(new JScrollPane(graph));
frame.pack();
frame.setVisible(false);
try
{
File f=new File(webroot,filename);
ImageOutputStream ios=ImageIO.createImageOutputStream(f);
BufferedImage img=graph.getImage(graph.getBackground(), 1);
ImageIO.write(img, "png", ios);
ios.flush();
ios.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
下面是测试例子:
import javabean.Graphic;
public class test
{
public static void main(String[] args)
{
Graphic graphic=new Graphic();
graphic.setRandom("DF1D2"); //这里我设置验证码的字符串为"DF1D2"
graphic.paint();
}
}
编译,运行,这样在E:/Img目录下就会生成简单的图片验证码
这里只是为演示用JGrqph组件生成图片验证码的方法