验证码图片实现

2023-11-17

使用验证码进行验证,自动生成验证码。

后台实现:

package common.makeCertPic;

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;

public class MakeCertPic {

	//验证码图片中可以出现的字符集
	private char mapTable[] = { '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', '0', '1', '2', '3', '4', '5', '6', '7', '8',
			'9' };
	
	/**
	 * 生产彩色验证码图片
	 * @param 	width 生产图片宽度
	 * @param 	height 生产图片高度
	 * @param 	os 页面输出流
	 * @return	随机生产的验证码
	 */
	public String getCertPic(int width,int height,OutputStream os){
		//设定高度宽度默认值
		if(width <= 0){
			width = 60;
		}
		if(height <= 0){
			height = 20;
		}
		//创建一个特定样式的BufferedImage
		BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
		//获取图形上下文
		Graphics g = image.getGraphics();
		//设定背景色
		g.setColor(new Color(0xDCDCDC));
		g.fillRect(0, 0, width, height);
		//画边框
		g.setColor(Color.black);
		g.drawRect(0, 0, width-1, height-1);
		//取随机产生的认证码
		String strEnsure = "";
		//4代表4位验证码,如果要生产更多位的认证码,则加大数值
		for(int i = 0; i < 4; i++){
			strEnsure += mapTable[(int) (mapTable.length * Math.random())];
		}
		//将验证码显示到图像中,如果要生产更多位的验证码,增加drawString语句
		g.setColor(Color.black);
		g.setFont(new Font("Atlantic Inline", Font.PLAIN, 18));
		String str = strEnsure.substring(0, 1);
		g.drawString(str, 8, 17);
		str = strEnsure.substring(1, 2);
		g.drawString(str, 20, 15);
		str = strEnsure.substring(2, 3);
		g.drawString(str, 35, 18);
		str = strEnsure.substring(3, 4);
		g.drawString(str, 45, 15);
		//随机产生10个干扰点,产生多个修改数量10
		Random rand = new Random();
		for (int i = 0; i < 10; i++) {
			int x = rand.nextInt(width);
			int y = rand.nextInt(height);
			g.drawOval(x, y, 1, 1);
		}
		//释放图形上下文
		g.dispose();
		try {
			ImageIO.write(image, "JPEG", os);
		} catch (IOException e) {
			return "";
		}
		return strEnsure;
	}
}
图片样式实现:class是引用上面的后台,把验证码字符串放到session中。makeCertPic.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
	<%@ page contentType="image/jpeg" %>
	</head>
	<body>
	<jsp:useBean id="image" scope="page" class="common.makeCertPic.MakeCertPic"></jsp:useBean>
	<%
		String str = image.getCertPic(0,0,response.getOutputStream());
		// 将认证码存入session
		session.setAttribute("certCode", str);
		
		out.clear();
		out = pageContext.pushBody();
	%>
	</body>
</html>

前台样式实现:
<td>
<span style="white-space:pre">	</span><input name="certCode" type="text"  placeholder="验证码" />
</td>
<td align="right">
<span style="white-space:pre">	</span><img src="makeCertPic.jsp" id="code" οnclick="reloadcode()" alt="看不清楚,换一张"/>
</td>
<script type="text/javascript">
	function reloadcode(){
			var verify = document.getElementById("code");
			verify.setAttribute('src','makeCertPic.jsp?it='+Math.random());
		}
</script>

后台验证实现:

获取前台input值certCode。进行certCode.equals(session.getAttribute("certCode"))比较。

成功返回true,失败返回false;

以上就是验证码的实现。



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

验证码图片实现 的相关文章

  • BurpSuite武器库打造之环境搭建和API介绍(上)

    0x00前言 在使用Burp Suite 以下简称Burp 来开展渗透工作的途中可能需要验证一些脑洞大开的想法 但Burp自带的功能可能无法满足你的需求 于是你迫切需要一个高度定制化的插件来实现这个功能 经查阅你得知除了Java还可以通过配
  • ubuntu pip intall出现“设备上没有空间”的解决办法

    原因 空间问题呗 东西太多了 tmp盘不够大 pip install的时候文件包会预先下载到tmp盘 步骤1 在home目录下新建一个tmp文件夹 用来取代系统根目录的tmp文件夹 步骤2 设置环境变量TMPDIR export TMPDI
  • 安卓数据视图化工具SQLiteStudio

    SQLiteStudio工具使用介绍 1 下载 SQLliteStudio 解压后打开文件夹中的exe文件即可 阿里网盘有 2 对SQLliteStudio进行配置 简介 视图化安卓开发过程中数据库内容 笔者使用AndroidStudio开
  • .Net/C#: 实现支持断点续传多线程下载的 Http Web 客户端工具类 (C# DIY HttpWebClient)

    选择自 playyuer 的 Blog Net C 实现支持断点续传多线程下载的 Http Web 客户端工具类 C DIY HttpWebClient Reflector 了一下 System Net WebClient 重载或增加了若干
  • chevereto 页面设置

    我贴一些图 大家可以根据我的设置来搞 或者你可以自定义喽 如果我设置不对 大家也指正一下 可设置的项目非常多 你可以按我的设置来初始化 如果你有什么不满意 自己微调即可 网站 这里值得一说的 搜索 探索 随机 喜欢 粉丝禁用后 这样访客就看
  • idea同一程序打开多个控制台

  • VC文件扩展名一览表

    VC文件扩展名一览表 2003 12 7 23 05 34 阅读589次 APS 存放二进制资源的中间文件 VC把当前资源文件转换成二进制格式 并存放在APS文件中 以加快资源装载速度 BMP 位图资源文件 BSC 浏览信息文件 由浏览信息
  • 写需求分析必须牢记的5大要点

    需求验证的5大要点 要做好需求验证 必须在思想 方法 语言 人员 内容5个要点上做好相应的工作 否则就会产生很多负面的影响 1 思想 前面已经说过 由于Review被翻译成 评审 导致很多人将其与中国人常说的评审相混淆 其实它们之间是有区别
  • Centos7安装Nessus教程

    本文为学习笔记 仅限学习交流 不得利用 从事危害国家或人民安全 荣誉和利益等活动 请参阅 中华人民共和国网络安全法 Nessus安装包 链接 https pan baidu com s 1FJMu8WMZPSjoqQpes GCng 提取码
  • Xray和burpsuite联动被动扫描

    想挖点src又没啥思路 试着挂个自动漏扫工具xray 又看到能与burp联动实现自动扫就想尝试一下 搞好进自己网站测试了一下 的确是爬虫式漏扫 访问量属实大 不过自己设置设置还是一个很不错的工具 安装配置 是在ddosi org这里找的破解
  • 【Apifox Helper】自动生成接口文档,IDEA+Apifox懒人必备

    文章目录 前言 缘由 接口文档对接爽 整理起来真费脑 本文阅读时长 约10分钟 前置条件 1 IDEA开发工具 2 Apifox 不必要 主要目标 一秒生成接口文档 水图 IDEA中项目接结构图 生成到Apifox接口文档图 试用人群 1
  • AltiumDesigner下载安装

    原文来自公众号 工程师看海 AltiumDesigner的特点是交互人性化 上手简单 显示画面美观 是很多硬件工程师入门之选 在我的公众号 后台回复 altium designer 可以得到altium designer的安装包和和谐方法
  • 解决tqdm在jupyter中报错ImportError: IProgress not found. Please update jupyter and ipywidgets.

    解决方案 gt gt gt pip3 install ipywidgets
  • Fortify 代码扫描安装使用教程

    前言 Fortify 能够提供静态和动态应用程序安全测试技术 以及运行时应用程序监控和保护功能 为实现高效安全监测 Fortify具有源代码安全分析 可精准定位漏洞产生的路径 以及具有1分钟1万行的扫描速度 Fortify SCA 支持丰富
  • 组合测试方法PK正交分析方法

    测试过程中 我们经常遇到需要覆盖多个变化参数的测试场景 如我们测试BS配置控制客户端组织资源远程配置一个设备时 进行一个设备通道视频参数设置的各种组合测试 如下图 多数情况下 类似于这种多组合测试时 老员工则是依靠经验去进行有针对性的测试
  • IDEA切换分支导致项目异常, 部分类爆红问题解决

    关于idea切换分支导致项目异常爆红的方式解决两种办法 1 maven 并没有及时刷新 所以 当我们第一时间出现这个问题的时候 首选是刷新maven 如图所示 2 如果刷新mavne 还是没有解决idea 项目爆红的情况的话 那我们就需要考
  • Toad常用快捷键和缩写替换

    Toad常用快捷键 F8 调出以前执行的sql命令 F9 执行全部sql Ctrl T 补全table name 或者显示字段 alt 箭头上下 看sql history Ctrl Enter 直接执行当前选中的sql Ctrl Shift
  • 不瞒各位,不安装软件也能操作Xmind文档

    大家好 我是小悟 作为搞技术的一个人群 时不时就要接收产品经理发过来的思维脑图 而此类文档往往是以Xmind编写的 如果你的电脑里面没有安装Xmind的话 不好意思 是打不开这类后缀结尾的文档 打不开的话就看不到 无法洞察产品经理的意思 无
  • 【神器】wakatime代码时间追踪工具

    文章目录 wakatime简介 支持的IDE 安装步骤 API文档 插件费用 写在最后 wakatime简介 wakatime就是一个IDE插件 一个代码时间追踪工具 可自动获取码编码时长和度量指标 以产
  • vcpkg安装zlmediakit(windows环境)

    文章目录 一 简介 二 vcpkg安装 1 vcpkg源码下载 2 vcpkg安装 三 安装zlmediakit 1 默认安装开启特性 core mp4 openssl webrtc 2 安装全部特性zlmediakit 包括webrtc

随机推荐

  • org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;bounda

    今天在编写SpringBoot 文件上传遇到这样的错误 org springframework web HttpMediaTypeNotSupportedException Content type multipart form data
  • 乐高科技系列搭建指南 pdf_玩转乐高机器人系列柒——乐高滑雪机器人、陀螺发射器...

    EV3机器人 玩转乐高机器人系列柒 机器人系列作品更新的比较少 一起来搭建几个好玩的吧 春天到了 你有没有跑出去踏春 春天到了 是不是应该搭建一点和春天相关的作品呢 感觉是可以来想想了 搭建好以后可以后期来分享 乐高EV3滑雪机器人 乐高滑
  • cad新手必练300图_27张CAD新手练习图!每天练一张,坚持一个月“小白”变“大神”...

    点击蓝字 室内设计苑 汇集全球室内设计最新资讯 很多刚接触CAD的朋友们一定有这样一个烦恼 就是刚掌握了一些基本的操作可是却不知道要拿什么练手 学会了还得会实操 不然也都是白搭 必须要多练才能熟能生巧 但是在网络上搜的练习图要么就是广告 要
  • 禅道登录-调用API方式

    禅道提供了API机制方便于大家和其他的系统进行集成 API机制也都是基于http协议的 返回的数据以json格式存储 禅道的API都是需要先登录后才能进行接口调用 登录返回的cookie需要在之后的每次请求中携带用于验证身份信息 网上关于禅
  • 分页存储相关计算

    分页存储相关计算 文章目录 分页存储相关计算 页面和物理块 相关公式 例题 页面和物理块 页面 分页存储管理将进程的逻辑地址空间分成若干个页 并且为各个页加以编号 从0开始 物理块 把内存的物理地址空间氛围若干个块 并且加以编号 从0开始
  • Ubuntu18.04安装CUDA及CUDNN有效方式

    一 安装CUDA 首先去英伟达官网下载 下载地址 最新版 现在是CUDA Toolkit 10 2版 可以根据自己的配置要求搜不同cuda版本 https developer nvidia com cuda toolkit archive
  • Nacos 1.2.1 客户端启动以后频繁刷 get changedGroupKeys:[] 日志的问题解决方案

    文章目录 一 问题描述 二 解决方案 一 问题描述 在采用 Spring Cloud Ablibaba 的 Nacos 1 2 1 作为注册配置中心的时候 发现客户端应用启动成功以后 每隔 30s 就会刷一次心跳日志 2020 08 27
  • 彩灯控制器的设计

    彩灯控制器的设计 1 题目要求 节日的彩灯五彩缤纷 彩灯的控制电路种类繁多 用移位寄存器为核心元件设计制作一个8路彩灯控制器 彩灯控制电路要求控制8个彩灯 要求彩灯组成以下两种花型 每种花型连续循环两次 两种花型轮流交替 彩灯闪烁变化一下间
  • Basic Level 1092 最好吃的月饼 (20分)

    题目 月饼是久负盛名的中国传统糕点之一 自唐朝以来 已经发展出几百品种 若想评比出一种 最好吃 的月饼 那势必在吃货界引发一场腥风血雨 在这里我们用数字说话 给出全国各地各种月饼的销量 要求你从中找出销量冠军 认定为最好吃的月饼 输入格式
  • sublimelinter的排错以及npm peerDependency的处理办法

    sublimelinter是sublimeText中用于代码规范提示的重工具 如果代码不符合规范 它会提示出来 但是在一个项目目 经常不能正常工作 这里探讨一下怎么解决这些问题 打开sublimelinter的debug模式 在sublim
  • 掏心掏肺分享,大学四年我是怎么学操作系统和计算机网络的?

    最近收到不少读者留言 关于怎么学 操作系统 和 计算机网络 的留言 小林写这一块的内容也有半年多了 啃非常多的书 也看了很多视频 有好的有差的 今天就掏心掏肺地分享给大家 操作系统和计算机网络有多重要呢 如果没有操作系统 我们的手机和电脑可
  • C#

    文章目录 简介 方法 备注 简介 unity创建一个相机 想保存相机的图像时 有这样的一段程序 void Awake GetComponent lt gt 物件属性 snapCam GetComponent
  • 代码随想录算法训练营19期第43天

    1049 最后一块石头的重量 II 视频讲解 动态规划之背包问题 这个背包最多能装多少 LeetCode 1049 最后一块石头的重量II 哔哩哔哩 bilibili 代码随想录 初步思路 动态规划 总结 套用01背包 dp j max d
  • python 两个数值互换(一句代码搞定)

    a sire b 23 a b b a print a print b
  • springboot本机启动elasticjob抛出异常HostException(ip is null)

    1 使用的elasticjob版本为3 0 1 2 本机的IPV4在校验isReachable 返回false 可能是使用无线网 导致ip验证问题 3 最后引入Groovy解决 引入包
  • Oracle 视图中出现重复记录(left join)

    Oracle 视图中出现重复记录 问题 解决办法 注意 问题 今天做项目的时候 客户反映页面中出现了重复的数据 经排查后发现前短数据新增的字段 来自于应该新的表 当时是直接使用 left join 左连接的方式对数据进行拼接的 left j
  • (已解决)DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`.

    DeprecationWarning np float is a deprecated alias for the builtin float To silence this warning use float by itself Doin
  • upload-labs-1

    打开第一关 通过查看源码我们可以发现第一关属于前端验证 我们可以将浏览器JS代码禁用掉 禁用JavaScript
  • [图形学] 《Real-Time Rendering》碰撞检测(二)

    reference Real Time Rendering 目录 17 前言 17 1 和射线的碰撞检测 17 2 使用BSP树的动态碰撞检测 17 3 一般层次的碰撞检测 17 3 1 分层的构建 17 3 2 不同层之间的碰撞检测 17
  • 验证码图片实现

    使用验证码进行验证 自动生成验证码 后台实现 package common makeCertPic import java awt Color import java awt Font import java awt Graphics im