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

先介绍一下Java生成验证码的基本流程:

  1. 随机生成字符或数字。
  2. 使用随机字体样式和大小。
  3. 创建画布,设置画布大小、背景色和边框。
  4. 在画布上绘制字符和干扰线等图形。
  5. 输出验证码图片。

下面我们来看一个完整的Java随机生成验证码的代码示例:

package com.example;

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.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

public class VerifyCodeUtils {

    // 验证码的字符集
    private static final String VERIFY_CODES = "23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz";
    private static Random random = new Random();

    /**
     * 获取随机生成的验证码图片
     */
    public static void outputVerifyImage(HttpServletResponse response, int width, int height, int verifySize) {
        int x = width / (verifySize + 1);
        int y = height / 2;
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics graphics = image.getGraphics();
        graphics.setColor(Color.WHITE);
        graphics.fillRect(0, 0, width, height);
        graphics.setColor(Color.BLACK);
        graphics.drawRect(0, 0, width - 1, height - 1);

        Font font = new Font("Arial", Font.PLAIN, verifySize);
        graphics.setFont(font);

        for (int i = 0; i < 50; i++) {
            int xs = random.nextInt(width);
            int ys = random.nextInt(height);
            int xe = xs + random.nextInt(width);
            int ye = ys + random.nextInt(height);
            graphics.setColor(getRandomColor());
            graphics.drawLine(xs, ys, xe, ye);
        }

        StringBuilder verifyCode = new StringBuilder();
        for (int i = 0; i < verifySize; i++) {
            String code = String.valueOf(VERIFY_CODES.charAt(random.nextInt(VERIFY_CODES.length())));
            verifyCode.append(code);
            graphics.setColor(getRandomColor());
            graphics.drawString(code, (i + 1) * x, y);
        }

        response.setContentType("image/jpeg");
        response.setHeader("Pragma", "no-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);

        try (ServletOutputStream outputStream = response.getOutputStream()) {
            ImageIO.write(image, "JPEG", outputStream);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取随机颜色
     */
    private static Color getRandomColor() {
        int r = random.nextInt(255);
        int g = random.nextInt(255);
        int b = random.nextInt(255);
        return new Color(r, g, b);
    }
}

这段代码的作用是随机生成一个包含大小写字母和数字的验证码图片,支持自定义尺寸和样式。

我们来详细分析一下代码:

  1. 首先定义了一个常量VERIFY_CODES,表示验证码可选字符集合。
  2. 定义了一个生成随机数的Random对象random
  3. 定义了一个静态方法outputVerifyImage,该方法接收一个HttpServletResponse参数和三个整型参数,分别表示图像的宽度、高度和验证码字符串长度。
  4. 根据绘制区域大小创建一个BufferedImage对象image,并获取该对象的Graphics上下文graphics
  5. 使用graphics对象设置画布的背景色和绘制边框。
  6. 使用graphics对象绘制干扰线。
  7. 使用StringBuilder对象生成随机的验证码字符串并绘制到画布上。
  8. 最后向客户端输出验证码图片。
  9. 定义了一个私有方法getRandomColor,返回一个随机颜色。

接下来我们再给出一个使用该工具类生成验证码图片的示例:

package com.example;

import java.io.IOException;

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

public class VerifyCodeServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        VerifyCodeUtils.outputVerifyImage(response, 120, 40, 4);
    }

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

这个示例是一个Servlet类,使用doGet方法生成验证码图片,并将图片输出到HTTP响应中。

以上就是Java随机生成验证码的实例攻略,希望对您有帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 随机生成验证码(支持大小写字母、数字、随机字体)的实例 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • spring security 5.x实现兼容多种密码的加密方式

    简介 Spring Security是一个基于Spring框架提供的安全解决方案,已经成为Java Web开发的事实上标准。Spring Security 5.x支持多种密码加密方式,如MD5,SHA-1,SHA-256等常见的加密方式,还支持BCrypt、SCrypt、PBKDF2等强大的加密方式。下面是一个完整的攻略来实现Spring Security …

    Java 2023年5月20日
    00
  • 简易的投票系统以及js刷票思路和方法

    简易的投票系统 本文将介绍如何搭建一个简易的投票系统,并且针对该投票系统介绍js刷票思路和方法。 投票系统原理 投票系统的原理非常简单,只需要记录每个用户对每个选手的投票数即可。在展示投票结果时,对每个选手的投票数进行累加,从而得出该选手的总得票数,从高到低排序就可以得出投票结果。 实现步骤 定义数据库表 创建一个votes表,表结构如下: 字段名 类型 说…

    Java 2023年6月15日
    00
  • 5分钟快速学会spring boot整合JdbcTemplate的方法

    下面是详细讲解“5分钟快速学会Spring Boot整合JdbcTemplate的方法”的完整攻略。 一、前置条件 在进行Spring Boot整合JdbcTemplate的学习之前,需要具备如下的前置条件: 了解Spring Boot框架的基础知识 了解JdbcTemplate的基础知识 配置好开发环境,包括Java开发环境、Maven或Gradle构建工…

    Java 2023年5月19日
    00
  • java实现简单的客户信息管理系统

    针对这个问题,我可以给出如下完整攻略: 1. 确定功能需求 作为一款客户信息管理系统,需要具备以下基本功能: 添加客户信息 修改客户信息 删除客户信息 查询客户信息 在确定了功能需求之后,就要开始考虑如何实现了。 2. 设计数据库表结构 由于需要操作客户信息,我们需要设计数据库表来承载客户信息。以下是一个简单的示例表结构: CREATE TABLE cust…

    Java 2023年5月19日
    00
  • java webservice上传下载文件代码分享

    下面是“java webservice上传下载文件代码分享”的完整攻略: 1. 准备工作 在开始实现文件上传下载的功能之前,我们需要准备好以下几点: 安装Java与Eclipse IDE开发环境; 下载并安装Apache Tomcat服务器; 导入JAX-WS 开发包,以便能够使用JAX-WS创建Webservice服务。 2. 创建文件上传下载的Webse…

    Java 2023年5月19日
    00
  • SpringMVC上传文件的两种方法

    在 Spring MVC 中,我们可以使用两种方法来上传文件,分别是使用 MultipartFile 类型的参数和使用 CommonsMultipartResolver 类。本文将详细讲解 Spring MVC 上传文件的两种方法,包括如何使用 MultipartFile 类型的参数和如何使用 CommonsMultipartResolver 类,并提供两个…

    Java 2023年5月18日
    00
  • [Spring MVC] -简单表单提交实例

    在Spring MVC中,表单提交是一个常见的需求。Spring MVC提供了多种方式来处理表单提交,包括使用@RequestParam、@ModelAttribute、@RequestBody等。下面是一个简单的Spring MVC表单提交实例的详细攻略: 1. 创建表单页面 首先,我们需要创建一个表单页面,例如: <!DOCTYPE html&gt…

    Java 2023年5月18日
    00
  • Java实现简单密码加密功能

    Java实现简单密码加密功能 1. 概述 密码加密是信息安全中常见的一种手段,可以防止密码被破解。本文将介绍在Java中如何实现简单密码加密功能。 2. 加密方法 常见的密码加密方法有很多种,本文介绍其中一种简单的方法:MD5加密。MD5是一种不可逆的哈希函数,可以将任意长度的数据转换成128位长度的数据,通常用于对密码进行加密。 Java中提供了实现MD5…

    Java 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部