Java制作验证码的完整实例代码

 更新时间:2020-11-08 22:09:14   作者:佚名   我要评论(0)

JAVA代码制作验证码,可用于注册等功能页面
要导入servlet-api.jar包
创建验证码的Util工具类:
先创建图片并生成随机的验证码字母

设置图片的底色,并用setFont函

JAVA代码制作验证码,可用于注册等功能页面

要导入servlet-api.jar包

创建验证码的Util工具类:

先创建图片并生成随机的验证码字母

设置图片的底色,并用setFont函数将验证码画在图片上,如果想让验证码难一点,可以添加for循环的代码给图片增加旋转角度

给验证码增加干扰线,提高安全性

设置边框

创建VerifyPic的servlet,通过Util类获取代码,并存入session中,然后输送去前端页面

实打

前端页面验证码如下:

完整Util工具类代码如下:

package com.sport.util;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import java.util.Map;

public class VerifyUtil {
 public static Map<String, Object> generateVerify(){
  //创建一张图片
  BufferedImage verifyPic = new BufferedImage(120,40,BufferedImage.TYPE_3BYTE_BGR);
  //通过图片获取画笔
  Graphics2D g = verifyPic.createGraphics();
  //准备一个字母+数字的字典
  String letters = "23456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  //规定验证码的位数
  int verifyLength = 4;
  //生成随机验证码
  String verifyCode = "";
  //循环取值
  for(int i=0; i<verifyLength; i++) {
   verifyCode +=letters.charAt((int)(Math.random()*letters.length()));
  }
  //将图片的底板由黑变白
  g.setColor(Color.white);
  g.fillRect(0, 0, 120, 40);
  //将验证码画在图片之上
  g.setFont(new Font("微软雅黑",Font.BOLD, 24));
  for (int i = 0; i < verifyLength; i++) {
   //随机产生一个角度
   double theta = Math.random() * Math.PI / 4 * ((int)(Math.random()*2) == 0?1:-1);
   //产生偏转
   g.rotate(theta, 24+i*22, 20);
   //每画一个字幕之前都随机给一个颜色
   g.setColor(new Color((int)(Math.random()*256), (int)(Math.random()*256), (int)(Math.random()*256)));
   g.drawString(verifyCode.charAt(i)+"", 20+i*22 , 26);
   //回正
   g.rotate(-theta, 24+i*22, 20);
  }
  //加入干扰线
  for (int i = 0; i < 5; i++) {
   //给随机颜色
   g.setColor(new Color((int)(Math.random()*256), (int)(Math.random()*256), (int)(Math.random()*256)));
   //画线
   g.drawLine((int)(Math.random()*120), (int)(Math.random()*40),
     (int)(Math.random()*120), (int)(Math.random()*40));
  }
  //设置边框颜色
  g.setColor(Color.black);
  //给验证码一个外边框
  g.drawRect(0, 0, 118, 38);

  //将验证码和图片一起存入map
  Map<String, Object> data = new HashMap<String, Object>();
  data.put("verifyCode", verifyCode);
  data.put("verifyPic", verifyPic);

  return data;
 }
}

完整VerifyPic的代码如下:

package com.sport.servlet;

import com.sport.util.VerifyUtil;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Map;

@WebServlet("/VerifyPic")
public class VerifyPic extends HttpServlet {
 protected void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  Map<String, Object> data = VerifyUtil.generateVerify();
  //获取验证码
  String verifyCode = (String) data.get("verifyCode");
  //将验证码存入session
  HttpSession session = request.getSession();
  session.setAttribute("verifyCode", verifyCode);
  //获取图片
  BufferedImage verifyPic = (BufferedImage) data.get("verifyPic");
  //输出图片给前端,使用工具类ImageIO
  ImageIO.write(verifyPic, "jpg", response.getOutputStream());

 }

 protected void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  doGet(request, response);
 }
}

总结

到此这篇关于Java制作验证码的完整实例代码的文章就介绍到这了,更多相关Java验证码完整代码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
  • java登录验证码实现代码
  • java 图片验证码的实现代码
  • Java实现验证码具体代码
  • Java实现仿淘宝滑动验证码研究代码详解
  • Java实现滑动验证码的示例代码
  • java生成图片验证码实例代码
  • Java web含验证码及权限登录实例代码
  • 基于JAVA的短信验证码api调用代码实例
  • Java实现图片验证码具体代码
  • Java实现验证码具体代码(图片、汉字)

相关文章

  • Java制作验证码的完整实例代码

    Java制作验证码的完整实例代码

    JAVA代码制作验证码,可用于注册等功能页面 要导入servlet-api.jar包 创建验证码的Util工具类: 先创建图片并生成随机的验证码字母 设置图片的底色,并用setFont函
    2020-11-08
  • 快速设置IDEA代码风格为Google风格

    快速设置IDEA代码风格为Google风格

    1、Bing中搜索 google style github 2、进到项目 找到名为intellij-java-google-style.xml 文件 3、Raw 4、反键将页面存储为------存储 5、打开IDEA进入sett
    2020-11-08
  • Docker Tomcat为何看不到访问界面

    Docker Tomcat为何看不到访问界面

    问题:源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示? 开门见山: 说白了就是最新的Tomcat8.5版本的webapps下无欢迎页 Docker内的webapps
    2020-11-08
  • Python3读写ini配置文件的示例

    Python3读写ini配置文件的示例

    ini文件即Initialization File初始化文件,在应用程序及框架中常作为配置文件使用,是一种静态纯文本文件,使用记事本即可编辑。 配置文件的主要功能就是存储一批
    2020-11-08
  • 阿里云盘邀请码(内测码)真实可用免费分享每日限量激活,另附阿里云盘申请与下载地址

    阿里云盘邀请码(内测码)真实可用免费分享每日限量激活,另附阿里云盘申请与下载地址

    阿里云盘自8月份被首次爆料后已经引起相当多的网友关注,能引起关注主要是阿里云盘标榜的是不限下载速度。 而某度网盘虽然前期提供的空间容量非常大,但现在某度网盘
    2020-11-08
  • 基于Python实现全自动下载抖音视频

    基于Python实现全自动下载抖音视频

    很多人喜欢玩抖音,我也喜欢看抖音小姐姐,可拿着手机一个个找视频太费劲。作为一个程序员,如何能在电脑前一边编程一边轻松地看抖音小姐姐呢? 下面利用Python,简
    2020-11-08
  • 详解docker pull 下来的镜像都存到了哪里

    详解docker pull 下来的镜像都存到了哪里

    docker pull 下来的命令都默认存在/var/lib/docker/文件夹下。 查看/var/lib/docker/image/overlay2/repositories.json文件: 正好和docker images的内容一致。 1、
    2020-11-08
  • Nuxt.js nuxt-link与router-link的区别说明

    Nuxt.js nuxt-link与router-link的区别说明

    前言 在使用Nuxt.js时可能会遇到一个这样的问题? 当打开请求页面的时候,所有页面都被请求了。 这正是<router-link>组件所有的特性。 首先说一下router-link rout
    2020-11-08
  • 微信小程序调用后台service教程详解

    微信小程序调用后台service教程详解

    写在前头,本篇文章简单记录一下,在前后端分离的微信小程序应用中,前端访问后台service的实现思路,没有过多涉及技术实现方面。 先上一张官网的图片,它很清楚的讲
    2020-11-08
  • 微信小程序中target和currentTarget的区别小结

    微信小程序中target和currentTarget的区别小结

    前言 在小程序中,e.target与e.currentTarget是非常重要的,尤其是涉及到页面传值时 currentTarget和target都是组件的一些属性值集合,由“data-属性名”定义的一些
    2020-11-08

最新评论