如何实现验证码输入正确与否的判断?

来源:互联网 发布:sqlserver linux 原理 编辑:程序博客网 时间:2024/05/17 07:38


 

  我们网站建设后要涉及到是否被攻击的可能性。

  因此我们会采用验证码的方式来进行一定程度上的阻断,那么我们生成了验证码,怎么样来进行判断客户的验证码输入正确与否呢?

  今天我们就来与大家分享一段代码,这段代码是进行用户输入验证码正确与否的判断,判断方式应该很简单,我们也为您列举出来了,具体请看我们给您的代码。


package com.fk.util;

 

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.image.BufferedImage;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.util.Random;

 

import javax.imageio.ImageIO;

import javax.servlet.ServletException;

import javax.servlet.ServletOutputStream;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

 

/**

 * 获得图片验证码  

 * @author Administrator

 *

 */

public class GetImageCode extends HttpServlet {

 

    private static final long serialVersionUID = 1L;

 

       private static int WIDTH = 60;  

        private static int HEIGHT = 20;  

       

        public char[] generateCheckCode() {  

            // 定义验证码的字符表  

            String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";  

            char[] rands = new char[4];  

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

                int rand = (int) (Math.random() * 36);  

                rands[i] = chars.charAt(rand);  

            }  

            return rands;  

        }  

       

        public void drawRands(Graphics g, char[] rands) {  

            g.setColor(Color.BLACK);  

            g.setFont(new Font(null, Font.ITALIC | Font.BOLD, 18));  

            // 在不同的高度上输出验证码的每个字符  

            g.drawString("" + rands[0], 1, 17);  

            g.drawString("" + rands[1], 16, 15);  

            g.drawString("" + rands[2], 31, 18);  

            g.drawString("" + rands[3], 46, 16);  

        }  

       

        public void drawBackground(Graphics g) {  

            // 画背景  

            g.setColor(new Color(0xDCDCDC));  

            g.fillRect(0, 0, WIDTH, HEIGHT);  

            // 随机产生120个干扰点  

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

                int x = (int) (Math.random() * WIDTH);  

                int y = (int) (Math.random() * HEIGHT);  

                int red = (int) (Math.random() * 255);  

                int green = (int) (Math.random() * 255);  

                int blue = (int) (Math.random() * 255);  

                g.setColor(new Color(red, green, blue));  

                g.drawOval(x, y, 1, 0);  

            }  

        }  

       

        public void doGet(HttpServletRequest request, HttpServletResponse response)  

                throws ServletException, IOException {  

            HttpSession session = request.getSession();  

            response.setContentType("image/jpeg");   

            ServletOutputStream sos = response.getOutputStream();  

       

            // 设置浏览器不缓存此图片  

            response.setHeader("Pragma", "No-cache");  

            response.setHeader("Cache-Control", "no-cache");  

            response.setDateHeader("Expires", 0);  

       

            // 创建内存图像并获得其图形上下文  

            BufferedImage image = new BufferedImage(WIDTH, HEIGHT,  

                    BufferedImage.TYPE_INT_RGB);  

            Graphics g = image.getGraphics();  

       

            // 产生随机的验证码  

            char[] rands = generateCheckCode();  

       

            // 产生图像  

            drawBackground(g);  

            drawRands(g, rands);  

       

            // 结束图像的绘制过程,完成图像  

            g.dispose();  

       

            // 将图像输出到客户端  

            ByteArrayOutputStream bos = new ByteArrayOutputStream();  

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

            byte[] buf = bos.toByteArray();  

            response.setContentLength(buf.length);  

            sos.write(buf);  

            bos.close();  

            sos.close();  

       

            // 将当前验证码存入到session中  

            session.setAttribute("checkCode", new String(rands));  

            System.out.println(session.getAttribute("checkCode"));  

        }  

       

        public void doPost(HttpServletRequest request, HttpServletResponse response)  

                throws ServletException, IOException {  

            doGet(request, response);  

        }

         

}

原创粉丝点击