验证码代码

Posted 如风105

tags:

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

Number.jsp

 1 <%@ page contentType="image/jpeg"
 2     import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"
 3     pageEncoding="utf-8"%>
 4 <%!Color getRandColor(int fc, int bc) {//给定范围获得随机颜色  
 5         Random random = new Random();
 6         if (fc > 255)
 7             fc = 255;
 8         if (bc > 255)
 9             bc = 255;
10         int r = fc + random.nextInt(bc - fc);
11         int g = fc + random.nextInt(bc - fc);
12         int b = fc + random.nextInt(bc - fc);
13         return new Color(r, g, b);
14     }
15 %>
16 <%
17     //设置页面不缓存  
18     response.setHeader("Pragma", "No-cache");
19     response.setHeader("Cache-Control", "no-cache");
20     response.setDateHeader("Expires", 0);
21     // 在内存中创建图象  
22     int width = 60, height = 20;
23     BufferedImage image = new BufferedImage(width, height,
24             BufferedImage.TYPE_INT_RGB);
25     // 获取图形上下文  
26     Graphics g = image.getGraphics();
27     //生成随机类  
28     Random random = new Random();
29     // 设定背景色  
30     g.setColor(getRandColor(200, 250));
31     g.fillRect(0, 0, width, height);
32     //设定字体  
33     g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
34     //画边框  
35     //g.setColor(new Color());  
36     //g.drawRect(0,0,width-1,height-1);  
37     // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到  
38     g.setColor(getRandColor(160, 200));
39     for (int i = 0; i < 155; i++) {
40         int x = random.nextInt(width);
41         int y = random.nextInt(height);
42         int xl = random.nextInt(12);
43         int yl = random.nextInt(12);
44         g.drawLine(x, y, x + xl, y + yl);
45     }
46     // 取随机产生的认证码(4位数字)  
47     String sRand = "";
48     for (int i = 0; i < 4; i++) {
49         String rand = String.valueOf(random.nextInt(10));
50         sRand += rand;
51         // 将认证码显示到图象中  
52         g.setColor(new Color(20 + random.nextInt(110), 20 + random
53                 .nextInt(110), 20 + random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成  
54         g.drawString(rand, 13 * i + 6, 16);
55     }
56     // 将认证码存入SESSION  
57     session.setAttribute("numrand", sRand);
58     // 图象生效  
59     g.dispose();  
60     // 输出图象到页面  
61     ImageIO.write(image, "JPEG", response.getOutputStream());  
62     out.clear();  
63     out = pageContext.pushBody();   
64 %>

jsp页面login.jsp

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>用户登录</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
    <link href="css/common.css" rel="stylesheet" type="text/css" />
    <link href="css/style.css" rel="stylesheet" type="text/css" />
    
    <script type="text/javascript" src="js/jquery-1.8.3.js"></script>
    <script type="text/javascript" src="js/login.js"></script>
    
    <script type="text/javascript">
        <%
            String msg = request.getParameter("msg");
            if("registerSuccess".equals(msg)){
                out.print("alert(‘注册成功,系统将自动跳转登录页‘);");
            }
            if("loginError".equals(msg)){
                out.print("alert(‘用户名密码错误,请重新登录‘);");
            }
            if("validateCodeError".equals(msg)){
                out.print("alert(‘验证码错误,请重新输入‘);");
            }
        %>    
    </script>

  </head>
  
<body>
<div class="wrap">
<!-- main begin-->
 <div class="main">
   <div class="sidebar">
     <p><img src="images/img1.jpg" width="443" height="314"  /></p>
   </div>
   <div class="sidebarg">
     <form action="doLogin" method="post">
    <div class="login">
      <dl>
        <dt class="blues">用户登陆</dt>
        <dd><label for="name">用户名:</label>
            <input type="text" name="username" class="inputh" value="${username}" id="name"/></dd>
        <dd><label for="password">密 码:</label>
            <input type="password" name="userpassword" class="inputh" value="${userpassword}" id="password"/></dd>
        <dd>
           <label class="lf" for="passwords">验证码:</label>
           <input type="text" name="inputCode" class="inputh inputs lf" value="" id="passwords"/>
           <span class="wordp lf"><img id="validateCode" src="Number.jsp" width="96" height="27"  /></span>
           <span class="blues lf"><a id="changeCode" href="javascript:void(0);" title="">看不清</a></span>
        </dd>
        <dd>
           <input name=""  type="checkbox" id="rem_u"  />
           <span class="rem_u">下次自动登录</span>
        </dd>
        <dd class="buttom">
           <input name="" type="submit" value="登 录" class="spbg buttombg f14 lf" />
           <input id="register" name="" type="button" value="注 册" class="spbg buttombg f14 lf" />
           <span class="blues  lf"><a href="" title="">忘记密码?</a></span>
           <div class="cl"></div>
        </dd>
       
      </dl>
    </div>
    </form>
   </div>
  <div class="cl"></div>
 </div>
<!-- main end-->
 
<!-- footer begin-->
</div>
 <!--footer end-->
</body>
</html>

 

javas代码用于刷新验证码

$(function(){
    //请自行添加客户端验证
    
    $("#changeCode").click(function(event){
        $("#validateCode").attr("src","Number.jsp?ran"+Math.random());
        event.preventDefault();
        return false;    //传到登录界面
    });
    
    $("#register").click(function(){
        window.location.href = "register.jsp";//传达注册界面的验证码
    });
});

servlet代码,用于验证

 1 public void doPost(HttpServletRequest request, HttpServletResponse response)
 2             throws ServletException, IOException {
 3         try {
 4             //此处可以添加用户输入验证的代码
 5             
 6             String username = request.getParameter("username");
 7             String userpassword = request.getParameter("userpassword");
 8             
 9             request.setAttribute("username", username);
10             request.setAttribute("userpassword", userpassword);
11             
12             if(!request.getSession().getAttribute("numrand").equals(request.getParameter("inputCode"))){
13                 request.getRequestDispatcher("login.jsp?msg=validateCodeError").forward(request, response);
14             }else{
15                 IUserBiz biz = new UserBizImpl();
16                 Auctionuser user = biz.login(username, userpassword);
17                 
18                 if(user == null){
19                     request.getRequestDispatcher("login.jsp?msg=loginError").forward(request, response);
20                 }else{
21                     request.getSession().setAttribute("user", user);
22                     response.sendRedirect("auctionList");
23                 }
24             }
25             
26             
27         
28         } catch (Exception e) {
29             // TODO Auto-generated catch block
30             e.printStackTrace();
31             request.setAttribute("message", e.getMessage());
32             request.getRequestDispatcher("error.jsp").forward(request,response);
33         }
34     }

 

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

Android SMS Verification API 结果码始终为 0

JavaScript 有用的代码片段和 trick

爬虫遇到头疼的验证码?Python实战讲解弹窗处理和验证码识别

php生成各种验证码

pbootcms对接微信扫码登录代码核心片段和步骤(前后端)

如何用JS代码判断验证码输入是不是正确