java 制作验证码并进行验证实例详解

java 制作验证码并进行验证实例详解

在注册、登录的页面上经常会出现验证码,为了防止频繁的注册或登录行为。下面是我用java制作的一个验证码,供初学者参考,做完验证码之后,我们可以用ajax进行验证码验证。

功能一:验证码制作的代码,点击图片,验证码进行更换

/**
 * 显示验证码图片
 */
public void showCheckCode(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  // 调用业务逻辑
  String checkCode = getCheckCode();
  //将验证码字符放入session域对象中
  req.getSession().setAttribute("checkCode", checkCode);

  //图片宽
  int width = 80;
  //图片高
  int height = 30;
  //在内存中创建一个图片
  BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
  //获取一个画笔
  Graphics g = image.getGraphics();
  //设置画笔颜色,用灰色做背景
  g.setColor(Color.GRAY);
  //向Image中填充灰色
  g.fillRect(0,0,width,height);

  Random r = new Random();

  //设置3条干扰线
  for (int i = 0; i < 3; i++) {
    g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
    g.drawLine(r.nextInt(80), r.nextInt(30), r.nextInt(80), r.nextInt(80));
  }

  //设置验证码字符串的颜色
  g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
  //设置字符的大小
  g.setFont(new Font("黑体",Font.BOLD,24));
  //在图片中写入验证码字符串
  g.drawString(checkCode,15,20);
  //将Image对象以PNG格式输出给所有的客户端
  ImageIO.write(image,"PNG",resp.getOutputStream());
}

/**
 * 获取4位验证码中的4位随机字符串
 */
public static String getCheckCode(){
  //验证码中的字符由数字和大小写字母组成
  String code = "0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
  Random r = new Random();
  StringBuffer sb = new StringBuffer();
  for (int i = 0; i < 4; i++) {
    sb.append(code.charAt(r.nextInt(code.length())));
  }

  return sb.toString();
}

jsp页面

<script type="text/javascript">
  function changeCodeImage(img){
    img.src = "${pageContext.request.contextPath}/UserServlet?method=showCheckCode&time="+new Date().getTime();
  }

</script>

 <div class="form-group">
  <label for="date" class="col-sm-2 control-label">验证码</label>
  <div class="col-sm-3">
   <input type="text" class="form-control" id="writeCode" onkeyup="checkCodeMethod(this.value)" >

  </div>
  <div class="col-sm-2">
  <img src="${pageContext.request.contextPath}/UserServlet?method=showCheckCode" id="checkCodeImage" title="点击换一张" onclick="changeCodeImage(this)" />
  </div>
  <span id="checkCodeSpan"></span>
 </div>

功能二:ajax动态验证验证码

/**
 * 验证验证码
 */
public void checkCode(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

  //获取从页面中接收到的验证码参数
  String checkCode = req.getParameter("checkCode");
  //从session域对象中获取验证码
  String sessionCode = (String) req.getSession().getAttribute("checkCode");
  //判断验证码是否相同
  if (checkCode.equalsIgnoreCase(sessionCode)) {
    resp.getWriter().print(true);
  }else {
    resp.getWriter().print(false);
  }

jsp页面

<script type="text/javascript">
  function changeCodeImage(img){
    img.src = "${pageContext.request.contextPath}/UserServlet?method=showCheckCode&time="+new Date().getTime();
  }

  function checkCodeMethod(code){
    $.get("${pageContext.request.contextPath}/UserServlet?method=checkCode",
        { checkCode: code},
        function(data){
          if (data == 'true') {
            document.getElementById("checkCodeSpan").innerHTML = "<font>验证码正确!</font>";
          }else {
            document.getElementById("checkCodeSpan").innerHTML = "<font>验证码错误!</font>";
          }
        }
      );
  }

</script>

 <div class="form-group">
  <label for="date" class="col-sm-2 control-label">验证码</label>
  <div class="col-sm-3">
   <input type="text" class="form-control" id="writeCode" onkeyup="checkCodeMethod(this.value)" >

  </div>
  <div class="col-sm-2">
  <img src="${pageContext.request.contextPath}/UserServlet?method=showCheckCode" id="checkCodeImage" title="点击换一张" onclick="changeCodeImage(this)" />
  </div>
  <span id="checkCodeSpan"></span>
 </div>

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

时间: 2017-04-21

java图片验证码实现示例分享

复制代码 代码如下: package com.sanrong;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Random; import javax.imageio.ImageIO;import

java 图片验证码的实现代码

复制代码 代码如下: makeCertPic.java package pic; 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.imagei

java生成图片验证码示例程序

复制代码 代码如下: <%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">&l

解析Java实现随机验证码功能的方法详解

现在许多系统的注册.登录或者发布信息模块都添加的随机码功能,就是为了避免自动注册程序或者自动发布程序的使用.验证码实际上就是随机选择一些字符以图片的形式展现在页面上,如果进行提交操作的同时需要将图片上的字符同时提交,如果提交的字符与服务器session保存的不同,则认为提交信息无效.为了避免自动程序分析解析图片,通常会在图片上随机生成一些干扰线或者将字符进行扭曲,增加难度.    我们可以使用servlet来实现随机验证码的实现. 复制代码 代码如下: package com.servlet; 

Java实现验证码具体代码

这里实现我使用到了struts2模拟一个登录功能来验证java实现的验证码功能. Java实现验证码的步骤: 1.创建RandomImageGenerator.java类,该类实现验证码图片的生成 2.创建一个servlet类,RandomImageServlet.java,将生成的验证码输出到页面 3.创建一个Action类,LoginAction.java,控制登录 4.配置struts.xml一个web.xml文件 5.编写页面 具体实现用代码表达 1.创建RandomImageGener

Java 随机生成验证码(支持大小写字母、数字、随机字体)的实例

代码如下所示: 复制代码 代码如下: package com.hoo.util; import java.awt.Color;  import java.awt.Font;  import java.awt.Graphics;  import java.awt.image.BufferedImage;  import java.util.Random; import javax.imageio.ImageIO;  import javax.servlet.http.HttpServletRequ

java实现验证码类生成中文验证码

复制代码 代码如下: package xwcms.net.service;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Random;import javax.imageio.ImageIO;im

python PIL模块与随机生成中文验证码

在这之前,你首先得了解Python中的PIL库.PIL是Python Imaging Library的简称,PIL是一个Python处理图片的库,提供了一系列模块和方法,比如:裁切,平移,旋转,改变尺寸等等.在PIL库中,任何一个图像都是用Image对象来表示的,所以要加载一张图片,最简单的形式如下: from PIL import Image image = Image.open("1.jpeg") 在PIL库中,最常用的模块有Image,ImageDraw,ImageEnhance

一个简单安全的PHP验证码类、PHP验证码

一,验证码示例 二,php验证码类,secoder.class.php <?php /** * 安全验证码 * * 安全的验证码要:验证码文字扭曲.旋转,使用不同字体,添加干扰码 * * @author 流水孟春 <cmpan(at)qq.com> * @link http://labs.yulans.cn/YL_Security_Secoder * @link http://wiki.yulans.cn/docs/yl/security/secoder */ class YL_Secu

Java使用Random类生成随机数示例

本文实例讲述了Java使用Random类生成随机数.分享给大家供大家参考,具体如下: 一 代码 import java.util.Random; class RandomDie { private int sides; private Random generator; public RandomDie(int s) { sides = s; generator = new Random( ); } public int cast( ) { return 1 + generator.nextIn

Python 随机生成中文验证码的实例代码

python代码 复制代码 代码如下: # -*- coding: utf-8 -*- import Image,ImageDraw,ImageFont import random import math, string class RandomChar(): """用于随机生成汉字""" @staticmethod def Unicode(): val = random.randint(0x4E00, 0x9FBF) return unichr

一个好用的PHP验证码类实例分享

分享一个好用的php验证码类,包括调用示例.说明:如果不适用指定的字体,那么就用imagestring()函数,如果需要遇到指定的字体,就要用到imagettftext()函数.字体的位置在C盘下Windows/Fonts. 参考了网上的php 生成验证码的方法,以及php 图片验证码和php 中文验证码的生成方法.用到了PHP GD库的相关知识. 1,生成验证码的类 VerificationCode.class.php 复制代码 代码如下: <?php      class Verificat

PHP编写的图片验证码类文件分享

适用于自定义的验证码类! <?php /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ Class Image{ private $img; public $width = 85; pub

Python生成随机验证码的两种方法

使用python生成随机验证码的方法有很多种,今天小编给大家分享两种方法,大家可以灵活运用这两种方法,设计出适合自己的验证码方法. 方法一: 利用range方法,对于range方法不清楚的同学,请参考文章<python开发的range()函数> # -*- coding: utf-8 -*- import random def generate_verification_code(len=6): ''' 随机生成6位的验证码 ''' # 注意: 这里我们生成的是0-9A-Za-z的列表,当然你

php生成图片验证码-附五种验证码

以前输出验证码的时候用过一个方法,在前台用JS生成验证码字符串,再传递到后台用PHP输出验证码图像.这样在验证时就不需要使用$_SESSION传递验证码的值,直接用JS比较生成的字符串和输入的字符串是否相等即可. 本文以实例演示5种验证码,并介绍生成验证码的函数.PHP生成验证码的原理:通过GD库,生成一张带验证码的图片,并将验证码保存在Session中. 1.HTML 5中验证码HTML代码如下: <div class="demo"> <h3>1.数字验证码&

Java生成图形验证码工具类

生成验证码效果 ValidateCode.java 验证码生成类 package cn.dsna.util.images; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.FileOutputStream; import java.io.IOException; import java.io.Ou