验证码图片实现

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还可以通过配
  • 4.4.5 密码验证(2)

    4 当且仅当含数字和字母的密码验证 如果密码当且仅当包含数字和字母 那么该密码的强度是中等强度 当然 它的安全性一般 以下正则表达式能够验证当且仅当包含数字和字母的密码 da zA Z d a zA Z da zA Z 74 正则表达式 7
  • win32平台中的程序转换为wince中的一些错误 . 未能为“VCCLCompilerTool”工具生成命令行

    转载自 http blog csdn net shirui1125 article details 6095774 gt ToolBox error PRJ0004 未能为 VCCLCompilerTool 工具生成命令行 从原有的平台复制
  • vite插件介绍 - vite-plugin-meta-env

    vite插件介绍 vite plugin meta env a vite plugin define dynamic env variables in import meta env npm github 可以基于本仓库去开发自己的vite
  • 连接db2的客户端工具(原创)

    最近在用友做项目 用得数据库是db2 以前从来没用过 但是对于写程序来说 啥数据库都一样 都是那几个语句 能执行就行 说是这样说 但是真用上就发现问题了 最大的就是没有好的客户端工具 网上搜了很多 什么toad quest都用了 感觉用着都
  • cmake简单使用

    概述 cmake是一种跨平台编译工具 除了可以编译c c 代码也可以编译其他语言的代码 其主要就是通过cmake执行CMakeLists txt从而生成Makefile 下面就自己了解到的简单的一点知识 做以记录 更多可查看官网 https
  • gradle 编译 Spring 源码(亲测有效)

    天知道我今天下午经历了什么 从去年开始断断续续看源码 在 IDEA 中 Spring 源码只读不能写 所以每次都是将方法拷贝到 vscode 中 IDEA 中看代码逻辑 接着在 vscode 对应的方法上写注释 期初这种方式没觉得有什么不便
  • 代码走查——项目走向成功的锦囊之一

    说起代码走查 相信每个人都不陌生 但为什么要执行代码走查 什么时候来执行代码走查 如何有效执行代码走查 很多人的看法和见解都不一样 一般的看法 认为代码走查是一种非正式的代码评审技术 它通常在编码完成之后由代码的作者向一组同事来讲解他自己编
  • Visual Studio 性能探查器使用技巧,看这篇就足够了

    Visual Studio 提供了性能测量值和分析工具选择 某些工具 如 CPU 使用情况 和 内存使用情况 可以在带或不带调试器的情况下运行 也可以在发布版本或调试版本配置上运行 应用程序时间线 等 性能探查器 工具可以在发布版本或调试版
  • 写需求分析必须牢记的5大要点

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

    1 testng 介绍 TestNG是一个旨在简化各种测试需求的测试框架 从单元测试 将一个类与其他类分开测试 到集成测试 对由多个类 几个程序包甚至几个外部框架组成的整个系统进行测试 开源免费 基于以maven组件的形式 引入项目 需要修
  • postman使用过程中body中的form-data,x-www-form-urlencoded,raw,binary的简单记录

    引言 初次使用postman不是很清楚怎么使用 就直接上手 不想看postman的使用文档 故而采用直接上手实验的方式 下面记录一下 body在使用的时候的四种类型 类型说明 form data 既可以上传键值对 也可以上传文件 当上传的字
  • postman中进行SHA1或MD5签名

    大部分接口为了防御重放攻击 往往使用SHA1或者MD5对请求进行签名 例如 我们有如下请求 Request URL http xx xx xx xx nonce 123 timestamp 123 Body xxx xxx signatur
  • docker 安装wiki.js 和wekan

    wiki js https blog csdn net vegas lee article details 122356646 wekan http t zoukankan com caihemm p 14446937 html
  • 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
  • Xray使用教程

    简介 Xray是长亭科技开发的一款漏扫工具 支持多种扫描方式和漏洞类型 可自定义POC Proof of Concept 概念验证 即漏洞验证程序 俺是在 乌雲安全 看到了这个工具的使用 作为一个脚本小子初学者 这里做一下笔记 使用 web
  • 校长亲测,文章采集工具:提升学生写作阅读素养利器

    近期 我代表校长身份有幸试用了 文章采集工具 这款线上资源下载利器 通过使用此神器 我得以精准检索海量优秀文章 助力提升学生们的写作及阅读素养 更有效地激发学校文化生活的新活力 1 真实可靠 我原本对在线下载工具持保留意见 但在深入研究并亲
  • 【神器】wakatime代码时间追踪工具

    文章目录 wakatime简介 支持的IDE 安装步骤 API文档 插件费用 写在最后 wakatime简介 wakatime就是一个IDE插件 一个代码时间追踪工具 可自动获取码编码时长和度量指标 以产
  • 最新国内免费使用GPT-4分享,GPT语音对话,Midjourney绘画

    一 前言 ChatGPT3 5 GPT4 0 GPT语音对话 Midjourney绘画 相信对大家应该不感到陌生吧 简单来说 GPT 4技术比之前的GPT 3 5相对来说更加智能 会根据用户的要求生成多种内容甚至也可以和用户进行创作交流 然

随机推荐

  • 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