Java验证码图片生成代码

网友投稿 210 2023-06-05


Java验证码图片生成代码

java生成验证码图片的具体代码,供大家参考,具体内容如下

1、首先新建一各专门生成验证码图片的类VerifyCode:

public class VerifyCode {

private int w=70;

private int h=35;

private Random r=new Random();

//宋体,华文楷书,黑体,华文新魏,华文隶书,微软雅黑,楷体_GB2312,Times New Roman

private String [] fontNames={"宋体","华文楷书","黑体","华文新魏","微软雅黑","华文隶书","楷体_GB2312","Times New Roman"};

//可选的字符

private String codes="23456789abcdefghijkmnopqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ";

//背景色

private Color bgColor=new Color(255,255,255);

//验证码上的文本

private String text;

//生成随机颜色

private Color randomColor(){

int red=r.nextInt(150);

int green=r.nextInt(150);

int blue=r.nextInt(150);

return new Color(red,green,blue);

}

//生成随机字体

private Font randomFont(){

int index=r.nextInt(fontNames.length);//获取下标

String fontName=fontNames[index];//生成随机的字体名称

int style=r.nextInt(4);//获取随机样式,0表示无样式,1表示粗体,2表示斜体,3表示粗体加斜体

int size=r.nextInt(5)+24;//生成随机字号,24~28

return new Font(fontName,style,size);

}

//画干扰线

private void drawLine(BufferedImage image){

ihzqjrrTnnt num=3;//一共画3条

Graphics2D g2=(Graphics2D) image.getGraphics();

for(int i=0;i

int x1=r.nextInt(w);

int y1=r.nextInt(h);

int x2=r.nextInt(w);

int y2=r.nextInt(h);

g2.setStroke(new BasicStroke(1.5F));//设置笔画的宽度

g2.setColor(Color.blue);//干扰线颜色

g2.drawLine(x1, y1, x2, y2);//画线

}

}

//随机生成一个字符

private char randomChar(){

int index=r.nextInt(codes.length());

return codes.charAt(index);

}

//创建BufferedImage

private BufferedImage createImage(){

BufferedImage image=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);

Graphics2D g2=(Graphics2D) image.getGraphics();

g2.setColor(this.bgColor);

g2.fillRect(0, 0, w, h);

return image;

}

//外界调用这个方法得到验证码

public BufferedImage getImage(){

BufferedImage image=createImage();//创建图片缓冲区

Graphics2D g2=(Graphics2D)image.getGraphics();//得到绘制环境

StringBuilder sb=new StringBuilder();//用来装载生成的验证码文本

//向图中画4个字符

for(int i=0;i<4;i++){//循环4次

String s=randomChar()+"";//随机生成一个字符

sb.append(s);//把字母添加到sb中

double x=i*1.0*w/4;//设置当前字符的x轴坐标

g2.setFont(randomFont());//设置随机字体

g2.setColor(randomColor());//设置随机颜色

g2.drawString(s, (int)x, h-5);

}

this.text=sb.toString();//把生成的字符串赋给了this.text

drawLine(image);//添加干扰线

return image;

}

//返回验证码图片上面的文本

public String getText(){

return text;

}

//保存图片到指定的输出流

public static void output(BufferedImage image,OutputStream out) throws IOException{

ImageIO.write(image, "JPEG", out);

}

}

2、在jsp页面上应用:

其核心代码如下:

int x1=r.nextInt(w);

int y1=r.nextInt(h);

int x2=r.nextInt(w);

int y2=r.nextInt(h);

g2.setStroke(new BasicStroke(1.5F));//设置笔画的宽度

g2.setColor(Color.blue);//干扰线颜色

g2.drawLine(x1, y1, x2, y2);//画线

}

}

//随机生成一个字符

private char randomChar(){

int index=r.nextInt(codes.length());

return codes.charAt(index);

}

//创建BufferedImage

private BufferedImage createImage(){

BufferedImage image=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);

Graphics2D g2=(Graphics2D) image.getGraphics();

g2.setColor(this.bgColor);

g2.fillRect(0, 0, w, h);

return image;

}

//外界调用这个方法得到验证码

public BufferedImage getImage(){

BufferedImage image=createImage();//创建图片缓冲区

Graphics2D g2=(Graphics2D)image.getGraphics();//得到绘制环境

StringBuilder sb=new StringBuilder();//用来装载生成的验证码文本

//向图中画4个字符

for(int i=0;i<4;i++){//循环4次

String s=randomChar()+"";//随机生成一个字符

sb.append(s);//把字母添加到sb中

double x=i*1.0*w/4;//设置当前字符的x轴坐标

g2.setFont(randomFont());//设置随机字体

g2.setColor(randomColor());//设置随机颜色

g2.drawString(s, (int)x, h-5);

}

this.text=sb.toString();//把生成的字符串赋给了this.text

drawLine(image);//添加干扰线

return image;

}

//返回验证码图片上面的文本

public String getText(){

return text;

}

//保存图片到指定的输出流

public static void output(BufferedImage image,OutputStream out) throws IOException{

ImageIO.write(image, "JPEG", out);

}

}

2、在jsp页面上应用:

其核心代码如下:

用户名:

密 码:

验证码:

看不清换一张

看不清换一张使用javascript实现,代码如下:

+new Date().getTime()这条语句可以欺骗浏览器,以为请求是新的,实现验证码的改变。

3、在第2步中,VerifyCodeServlet的实现生成一张验证码,并且通过session域保存验证码图片对应的文本内容,为后面的登录验证验证码是否正确做准备。核心代码如下:

public class VerifyCodeServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

/*

* 1.生成图片

* 2.保存图片上的文本到session域中

* 3.把图片响应给客户端

*/

VerifyCode vc=new VerifyCode();

BufferedImage image=vc.getImage();

//保存图片上的文本到session域

request.getSession().setAttribute("session_code", vc.getText());

VerifyCode.output(image, response.getOutputStream());

}

}

4、最后一步,实现登录验证验证码是否正确,其核心代码如下:

public class LoginServlet extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

/*

* 校验验证码

* 1.从session中获取正取的验证码

* 2.从表单中获取用户填写的验证码

* 3.进行比较

* 4.如果相同,向下运行,否则保存错误信息到request域,转发到login.jsp

*/

String sessionCode=(String)

request.getSession().getAttribute("session_code");//获得的验证码里面对应的文本内容

String paramCode=request.getParameter("verifyCode");//用户输入文本框里面的内容

if(!paramCode.equalsIgnoreCase(sessionCode)){

request.setAttribute("msg", "验证码错误!");

request.getRequestDispatcher("/login.jsp").forward(requesthttp://, response);//打回到登录界面。

return;//返回,不继续执行下面的语句。

}

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Bootstrap导航简单实现代码
下一篇:EasyUI为Numberbox添加blur事件的方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~