JAVA图形验证码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA图形验证码相关的知识,希望对你有一定的参考价值。

生成验证码的jsp:

 1 <%@ page contentType="image/jpeg" language="java" import="java.util.*,java.awt.*,java.awt.image.*,javax.imageio.*" pageEncoding="utf-8"%>
 2 
 3 <%!
 4   Color getRandColor(int fc,int bc){
 5     Random random = new Random();
 6     if(fc > 255){
 7       fc = 255;
 8     }
 9     if(bc < 255){
10       bc = 255;
11     }
12     int r = fc +random.nextInt(bc-fc);
13     int g = fc +random.nextInt(bc-fc);
14     int b = fc +random.nextInt(bc-fc);
15 
16 
17     return new Color(r,g,b);
18   }
19 %>
20 
21 <%
22   //设置页面不缓存
23   response.setHeader("Pragma","no-cache");
24   response.setHeader("Cache-Control","no-catch");
25   response.setDateHeader("Expires",0);
26 
27   //在内存中创建图象
28   int width = 60;
29   int height = 42;
30   BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
31 
32   //创建图象
33   Graphics g = image.getGraphics();
34   //生成随机对象
35   Random random = new Random();
36   //设置背景色
37   g.setColor(getRandColor(200,250));
38   g.fillRect(0,0,width,height);
39   //设置字体
40   g.setFont(new Font("Tines Nev Roman",Font.PLAIN,24));
41   //随机产生干扰线
42
43   g.setColor(getRandColor(160,200));
44   for(int i = 0; i < 255; i++){
45     int x = random.nextInt(width);
46     int y = random.nextInt(height);
47     int xl = random.nextInt(12);
48     int yl = random.nextInt(12);
49     g.drawLine(x, y, x+xl, y+yl);
50   }
51   g.setColor(getRandColor(65,105));
52   for(int i = 0; i < 4; i++){
53     int x = random.nextInt(width);
54     int y = random.nextInt(height);
55     int xl = random.nextInt(12);
56     int yl = random.nextInt(12);
57     g.drawLine(x, y, x+xl, y+yl);
58   }
59 
60   //随机产生认证码,4位数字
61   String sRand = "";
62   for(int i = 0; i < 4; i++){
63     String rand = String.valueOf(random.nextInt(10));
64     sRand  += rand;
65     //将认证码显示到图象中
66     g.setColor(new Color(20 + random.nextInt(110),20 + random.nextInt(110),20 + random.nextInt(110)));
67     g.drawString(rand,13*i+6,25+random.nextInt(10));
68   }
69   session.setAttribute("rCode",sRand);
70   //图像生效
71   g.dispose();
72   //输出图像到页面
73   ImageIO.write(image,"JPEG",response.getOutputStream());
74   out.clear();
75   out = pageContext.pushBody();
76 %>

前台引用:

<img id="ckNumber" src="loginAction!getNumber.iol" />
<input type="text" name="code" class="ta_login_inputneed_notice" />

点击图片刷新验证码:

原理:使用jquery修改img的src属性,注意:src要和之前不同

方法:在链接后面随机生成一个参数使得链接和之前不一样,我这里是通过时间来生成的。

                <script>
                    $(document).ready(function () {
                        $("#ckNumber").click(function () {
                            var append = ‘?‘ + new Date().getTime() + ‘a‘ + Math.random();
                            $(this).attr(‘src‘,$(this).attr(‘src‘) + append);
                        })

                    })

                </script>

后台验证(仅供参考):

if(!request.getParameter("code").equals(this.getSession().get("rCode"))) 

 

以上是关于JAVA图形验证码的主要内容,如果未能解决你的问题,请参考以下文章

本人初学Java,有啥好的图形验证码推荐吗?

JAVA图形验证码

java图形验证码生成工具类及web页面校验验证码

java图形验证码实现

Java Swing 图形界面实现验证码(验证码可动态刷新)

Java生成图形验证码