java实现验证码功能

package com.verification_code.servlet;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ImgServlet extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        // TODO Auto-generated method stub
        //设置响应开头
        resp.setContentType("image/jpeg");
        //设置页面不缓存
        resp.setHeader("pragma", "no-cache");
        resp.setHeader("cache-control", "no-cache");
        resp.setDateHeader("expires", 0);
        OutputStream out = resp.getOutputStream();
        //设置图片的宽高
        int width=88,height=20;
        BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
        Graphics g = image.getGraphics();
        //生成随机类
        Random random = new Random();
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, width, height);
        //设置字体
        g.setFont(new Font("Times New Roman",Font.BOLD+Font.ITALIC,18));
        // 画边框
        g.setColor(getRandColor(0, 20)); // ---2
        g.drawRect(0, 0, width - 1, height - 1);
        // 随机产生干扰线
        int count = 100;
        int lineWidth = 3; // 干扰线的宽度
        for (int i = 0; i < count; i++) {
            g.setColor(getRandColor(150, 200)); // ---3
            int x = random.nextInt(width - lineWidth - 1) + 1; // 保证画在边框之内
            int y = random.nextInt(height - lineWidth - 1) + 1;
            int xl = random.nextInt(lineWidth);
            int yl = random.nextInt(lineWidth);
            g.drawLine(x, y, x + xl, y + yl);
        }
        //生成随机验证码
        String sRand="";
        String str[]={"0","1","2","3","4","5","6","7","8","9",
                "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
        for(int i=0;i<4;i++){
            int rand = random.nextInt(36);
            sRand+=str[rand];
            //设置随机颜色
            g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
            //绘制
            g.drawString(str[rand], 20*i+8, 16);
        }
        req.getSession().setAttribute("Verification_code",sRand);
        g.dispose();
        ImageIO.write(image, "JPEG", out);
    }
    public Color getRandColor(int fc, int bc) { // 取得给定范围随机颜色
        Random random = new Random();
        if (fc > 255) {
            fc = 255;
        }
        if (bc > 255) {
            bc = 255;
        }
        int r = fc + random.nextInt(bc - fc);
        int g = fc + random.nextInt(bc - fc);
        int b = fc + random.nextInt(bc - fc);
        return new Color(r, g, b);
    }

}

页面

<img id="id_code" name="code" src="image" title="看不清,换一张" onclick="refresh()" style="display: inline;">

<script type="text/javascript">
    function refresh(){
        document.getElementById("id_code").src="image?"+Math.random();
        //loginForm.code.src="image?"+Math.random();
    }</script>
时间: 2024-11-06 09:49:28

java实现验证码功能的相关文章

java实现验证码功能——转自翘首以望

package com.verification_code.servlet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.OutputStream; import java.util.Random; import javax.imageio.

java实现验证码功能主要代码

package com.baojuan.servlet; import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.Random; import javax.i

java web中图片验证码功能实现

用户在注册网站信息的时候基本上都要数据验证码验证.那么图片验证码功能该如何实现呢? 大概步骤是: 1.在内存中创建缓存图片 2.设置背景色 3.画边框 4.写字母 5.绘制干扰信息 6.图片输出 废话不多说,直接上代码 package com.lsgjzhuwei.servlet.response; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.Buffer

工作笔记5.JAVA图片验证码

本文主要内容为:利用JAVA图片制作验证码. 设计思路: 1.拷贝AuthImageServlet.class图片验证码 2.配置web.xml 3.JSP中,调用封装好的AuthImageServlet,实现载入验证码的功能. 4.取出存放在Session中的验证码.在Action中推断验证码的正确性 相比較上一篇博客<工作笔记5.JAVA文本框验证码>而言,图片验证码添加了安全性. 在Action中,通过取出Session中的验证码与输入的验证码是否匹配进行推断. 步骤: 1.拷贝Auth

简单 验证码 功能

在贴代码之前首先简述一下验证验证码原理:随机获取验证码的值,把这个值存到session中,其作用可想而知就是要拿来跟前台数据作比较,通过Graphics将值进行模糊处理之后传到前台页面展示. 1 package com.skss.util; 2 3 4 import java.awt.Color; 5 import java.awt.Font; 6 import java.awt.Graphics; 7 import java.awt.image.BufferedImage; 8 import

java登陆验证码与JS无刷新验证

最近公司的项目的登陆模块由我负责,所以就做了个登陆小功能进行练手,其包括了用jQuery对用户名和密码进行不为null验证,和出于安全性考虑加了一个验证码的校验 别的不说先上代码 controller层 CreateImage.java package com.controller; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage;

自己实现一个验证码功能

用Servlet技术实现验证码功能,(画出一个验证码) 公司中一般用写好的验证码(jar包),很少使用自己去画验证码 . package chensi.com; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import j

java实现验证码登录

java实现验证码的步骤: 1.创建验证码的实体类,代码如下: import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.OutputStream; import java.util.Rando

【Java EE 学习第21天 使用易宝支付接口实现java网上支付功能】

一.网上支付分为两种情况,一种方法是使用直接和银行的支付接口,另外一种方法是使用第三方支付平台和银行对接完成支付. 1.直接和银行对接. 2.使用第三方支付平台 3.常见的第三方支付平台 二.使用易宝支付接口实现java网上支付功能(农业银行). 1.完整源代码:https://github.com/kdyzm/day21_2_pay 2.实现过程的时序图 3.技术要点 (1)使用GET请求的时候必须将全部参数都带上,参数名称参考开发者文档中的请求参数列表 (2)使用PaymentUtil类实现