动手实现随机验证码

动手实现随机验证码

首先,来写一个画验证码图片的Java类:

packagecom.XiongYi.validationCode;

importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics;
importjava.awt.image.BufferedImage;
importjava.io.IOException;
importjava.io.OutputStream;
importjava.util.Random;

importjavax.imageio.ImageIO;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;

publicclassValidationCodeextendsHttpServlet...{

publicstaticStringgetValidationCodes(OutputStreamos)...{
charcodeTable[]=...{
'a','b','c','d','e','f','g','h','i','j','k','l',
'm','n','p','q','r','s','t','u','v','w','x','y','z',
'A','B','C','D','E','F','G','H','I','J','K','L',
'M','N','P','Q','R','S','T','U','V','W','X','Y','Z',
'1','2','3','4','5','6','7','8','9'
}
;//判断时大小写不区分,另外,没有使用'O'和'0',也是怕混淆的麻烦

BufferedImageimage
=newBufferedImage(60,20,
BufferedImage.TYPE_INT_RGB);
//生成60×20的RGB图片
Graphicsgraphic=image.getGraphics();
//背景色
graphic.setColor(newColor(0xDCDCDC));
graphic.fillRect(
0,0,60,20);

charcodes[]=newchar[4];
//随机产生验证码
for(inti=0;i<=3;i++)...{
codes[i]
=codeTable[(int)(codeTable.length*Math.random())];
}


//把字画上去
graphic.setColor(Color.BLACK);
graphic.setFont(
newFont("Arial",Font.BOLD,16));
for(inti=0;i<=3;i++)...{
graphic.drawChars(codes,i,
1,2+15*i,15+i);
//把codes[i]画到坐标为[10+5*i,15+i]的地方去
}


//15个干扰点
Randomrand=newRandom();
for(inti=0;i<15;i++)
graphic.drawOval(rand.nextInt(
60),rand.nextInt(20),1,1);

//释放此图形的上下文并释放它所使用的所有系统资源
graphic.dispose();

try...{
ImageIO.write(image,
"JPEG",os);
}
catch(IOExceptione)...{
e.printStackTrace();
}


returnnewString(codes,0,codes.length);
}


publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException...{
doPost(request,response);
}


publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException...{
request.getSession().setAttribute(
"validationCodes",getValidationCodes(response.getOutputStream()));
}


}

 

然后,写一个Servlet将生成的图片写入页面:

 

packagecom.XiongYi.servlet;

importjava.io.IOException;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;

importcom.XiongYi.validationCode.ValidationCode;

publicclassValidationServletextendsHttpServlet...{

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException...{
doPost(request,response);
}


publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException...{
Stringstr
=ValidationCode.getValidationCodes(response.getOutputStream());
request.getSession().setAttribute(
"validationCodes",str);
}


}

 

接着,在login.jsp中加入如下表单:

<%...
Stringpath=request.getContextPath();
StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<formaction="<%=basePath+"servlet/LoginServlet"%>">
<imgsrc="<%=basePath+"servlet/ValidationServlet"%>"/>
<br>
<inputtype="text"name="codes"/>
<inputtype="submit"/>
</form>

 

再写进行后台判断的Servlet:

packagecom.XiongYi.servlet;

importjava.io.IOException;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;

publicclassLoginServletextendsHttpServlet...{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException...{
doPost(request,response);
}

publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException...{

if(request.getSession().getAttribute("validationCodes").toString().toLowerCase()
.equals(request.getParameter(
"codes").toString().toLowerCase()))
response.getOutputStream().println(
"Right!");
else
response.getOutputStream().println(
"Wrong!");

}


}

 

Canvas 实战: 实现纯前端图形验证码(Graph Verification Code) Canvas 实战: 实现纯前端图形验证码(Graph Verification Code) 文章目录Canvas 实战: 实现纯前端图形验证码(Graph Verification Code)简介参考完整示例代码正文图形验证码实现要素 & 功能代码实现文件结构 & 页面模版图形验证码实现:GVerify 类引入 GVerify 类工具函数定义GVerify 类结构GVerify 各方法详细实现事件处理运行截图结语 简介 本篇将使用 Canvas 实现纯前端的图形验证码。 在各式各样的系统中 阅读详情

相关推荐

小白都看得懂的使用Python生成随机验证码图片,以及后续优化方案

环境:Anaconda3-2020.02 首先我们分解一下需要做什么: 生成随机的字母字符串 生成生成随机的背景色 生成随机的字体颜色 把随机的字符串用随机的颜色渲染,然后放到一块随机的背景色上面,基本的验证码就好了 大概就是这个效果: 那么我们来看看如何实现 1. 随机的字符串 随机字符串的生成比较简单,使用Random库,random.randomint(65, 90)即可...

我tm咕爆 608

java随机生成四位字符验证码(使用Graphics绘图类)

package com.itany.graphic; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.util.Random; /*  * 随机数  */ public class ValidateCode { //随机字符

msyqmsyq的博客 2981

WPF MVVM实战:构建可绑定的RichTextBox富文本编辑器

本文详细介绍了如何在WPF MVVM模式下构建可绑定的RichTextBox富文本编辑器,解决标准RichTextBox.Document属性不支持数据绑定的问题。通过创建自定义BindableRichTextBox控件,实现FlowDocument的绑定支持,并分享插入图片、文本格式控制等实战技巧,帮助开发者高效开发富文本编辑功能。

weixin_33717117的博客 307

图片验证码是如何刁难用户的?一招教你彻底去除图片验证码!

图片验证码是验证码的一种,图片验证码常见的形式有输入图片中字母、数字等,目前的发展更为多元。下面小编从多方面跟大家讲讲图片验证码。 ➤验证码的前世今生 全自动区分计算机和人类的图灵测试(Completely Automated Public Turing test to tell Computers and HumansApart,简称CAPTCHA),俗称验证码,是一种区分用户是计算机或人的全自动化程序。 标准验证码 标准验证码即是我们常见的图形验证码、语音验证码,基于机器难以处理复杂的计算机视觉.

16万+

单片机开发者的福音:3步搞定VSCode智能补全(IAR工程+Clangd实战)

本文为单片机开发者提供了一套高效解决方案,通过EIDE插件将IAR工程导入VSCode,并生成关键的compile_commands.json文件,结合Clangd配置,仅需三步即可实现精准的智能代码补全、一键跳转等现代编辑功能,大幅提升嵌入式开发效率。

coffee的博客 523

使用TMS320F28335控制四位共阳数码管

简要阐述利用F28335控制四位共阳数码管的整个过程,包括原理、思路、部分代码以及调试过程。

liujunhaozuishuai的博客 2659

python导入随机函数库_Python随机函数库random的使用方法详解

前言众所周知,python拥有丰富的内置库,还支持众多的第三方库,被称为胶水语言,随机函数库random,就是python自带的标准库,他的用法极为广泛,除了生成比较简单的随机数外,还有很多功能。使用random库:import randomrandom库主要函数:函数名说明用法random()生成一个0~1之间的随机浮点数,范围 0 <= n < 1.0random.random()...

weixin_39566387的博客 2420

钣金设计高薪进阶:从材料工艺到DFMA降本增效全解析

钣金设计是机械制造领域的核心技术之一,它涉及将金属板材通过切割、折弯、焊接等工艺成型为所需零件。其核心原理在于深刻理解材料特性、制造工艺约束与结构力学,以确保设计在功能、成本与可制造性之间取得最佳平衡。这项技术的价值在于,优秀的钣金设计能直接驱动产品降本增效,通过优化材料利用率、简化装配工序和避免设计缺陷,为企业节省大量模具与生产成本。其应用场景广泛,从机箱机柜、汽车部件到电子设备外壳无处不在。本文将聚焦于实现这一价值的关键路径,深入探讨面向制造与装配的设计(DFMA)原则在钣金领域的实战应用,并剖析如何通

weixin_34301132的博客 391

随机验证码java代码_Java案例之随机验证码功能实现

实现的功能比较简单,就是随机产生了四个字符然后输出。效果图如下,下面我会详细说一下实现这个功能用到了那些知识点,并且会把 这些知识点详细的介绍出来。哈哈 ,大神勿喷,对于初学Java的人帮助应该蛮大的。嘿嘿。案例下载地址:http://download.youkuaiyun.com/detail/qq_34337272/9862639(免费,里面还有几个其他小程序)先上效果图: 源代码:RandomGen.j...

weixin_27038245的博客 424

fanuc机器人I/O分配

FANUC机器人在和其他外部设备进行通讯时,需要对信号进行配置。 在机器人处于UOP自动分配状态时,系统会自动检索已配对设备,并分配相应的机架号。 当我们需要手动对信号进行分配时,可参考以下机架号进行配置。 不同的通讯协议对应的机架号不同,外部通讯协议常用的机架号参考下表: 序号 机架号 通讯类型 1 0 Process I/O 2 1-15

haier123888的博客 1万+

假新闻检测论文分享(17)CAFE(Cross-modal Ambiguity Learning for Multimodal Fake NewsDetection)

本文首先从信息论的角度对跨模态歧义性学习问题进行形式化描述,利用不同单模态特征之间的分布散度量化其歧义性;然后,提出了一种模糊度感知的多模态假新闻检测方法CAFE。CAFE通过自适应地聚合单模态特征和跨模态关联,即在跨模态歧义性较弱时依赖单模态特征,在跨模态歧义性较强时参考跨模态关联,从而提高假新闻检测精度。提出了跨模态歧义学习问题,这是多模态假新闻检测的一个关键挑战,并提出了一种基于KL散度的方法,通过估计其特征分布的散度来量化文本和图像之间的歧义。

weixin_41964296的博客 1724

Java案例之随机验证码功能实现

先上效果图: 源代码: RandomGen.java(实现产生验证码功能的类) package verificationcode; import java.util.Random; public class RandomGen { //生成四位不重复的验证码 public static String codeGen(){ char [] codeSe...

F的博客 3356

北斗导航 | ChatGPT之RTK、RTD、ARAIM算法原理及程序代码(ChatGPT看你怎么回答,附部分代码)

ChatGPT之RTK、RTD、ARAIM算法原理及程序代码

尘世冰封的专栏 3678

验证码的实现

验证码的实现有很多种方法,可以通过导入有关验证码的jar包直接调用其方法创建,也可以自己手动创建一个验证码类. 有关生成验证码的jar包网上有很多,实现方式不一,这里我对第一种实现方式就不多做介绍. 接下来就带着大家自己手动创建一个验证码类. 代码实现: package test.captcha; import java.awt.Color; import java.aw

striner的博客 917

AI 大模型接口太零散?自建私有模型管理平台统一整合,管理使用超方便!(支持飞牛nas、群晖nas等服务器快速部署)

面对多种 AI 大模型接口难统一、管理繁琐的问题🤯,本文分享一款超实用开源网关工具⚡,可聚合各大模型、自动转接口、支持可视化管理,Docker 一键部署,大幅降低开发与维护成本🚀

XiaoqiangClub的博客 266

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Servlet方式实现验证码--Javaweb

动手实践:Servlet方式实验验证码 首先,我们先用常量字符串来作为验证码来测试程序,其次将常量字符串变为变量来实现一个动态验证码的生成。 1.常量字符串来作为验证码 这是一个生成常量字符串验证码的Servlet package random.code; import sun.net.www.content.text.Generic; <%-- Created by IntelliJ IDEA. User: 86130 Date: 2022/4/24 Time: 17.

孙宇航的博客 5484

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Python实战:打造自定义随机验证码生成器

在许多网站中,验证码作为一种安全机制被广泛采用,用于验证用户身份、防止自动化攻击和确保数据安全。本篇教程将带领您一步步使用Python创建一个功能齐全的随机验证码生成器。我们将通过导入必要的库、定义辅助函数以及编写主函数`check_code()`,来实现生成包含随机字符、多彩背景、干扰元素及边缘增强效果的验证码图片。让我们开始动手实践吧!

Smartloe的博客 1876

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

wp-login.php 验证码,自己动手写一个wordpress登录验证码插件

自己动手写一个wordpress登录验证码插件日期:2013-12-29 18:21:23最后更新日期:2016-11-27 11:25:42【技术文章,非码农误入】最后更新日期: 2014-9-15wordpress后台登录是没有验证码的,如果喜欢捣鼓的话,可以自己写一个类似插件,当然怕麻烦可以去下载一个。因为我对web方面不是很了解,纯粹抱着好玩,捣鼓,瞎折腾的心态开始了这个插件。耗时3小时完...

weixin_36026454的博客 948

java生成随机验证码

java生成随机验证码 一直想自己实现一下,所以就动手做了一下,当然,也有很多不足之处,请大佬指点。 package Shuju; import javax.imageio.ImageIO; import java.awt.*; import java.awt.font.TextLayout; import java.awt.geom.Rectangle2D; import java.awt.i...

qq_44975050的博客 189

jsp生成随机验证码

<br />服务器程序接收到表单数据后,首先判断用户是否填写了正确的验证码,只有该验证码与服务器端保存的验证码匹配时,服务器程序才开始正常的表单处理流程。验证码使用一次即失效,用户只能重新向服务器发出访问表单填写页面的请求来获得新的验证码,并填写新的验证码后才能再次提交有效的表单请求,这样将大大增加了用户重复操作的难度。密码猜测工具要逐一尝试每个密码的前题条件是先输入正确的验证码,而验证码是一次性有效的,这样基本上就阻断了密码猜测工具的自动地处理过程。<br /> 下面编写一个利用Session实现一次性

livefun的专栏 870

自己动手写一个页面验证码

验证码是为了防止通过程序的方式,自动去填写信息,然后自动发送给Web服务器而欺骗服务器进行注册或登录。由于验证码每次都是随机产生的,所以需要人工识别去输入并验证,从而杜绝有人用软件方式自动大量注册ID,从而非法发布广告;或者用于防止对密码的暴力破解。下面教你自己动手写一个验证码。 1. 在你的网站目录下添加一个验证码生成文件:ValidateCode.aspx。 2. 删除该页面所有自动生成的

学习笔记 7248

java随机验证码的功能_Java案例之随机验证码功能实现实例

实现的功能比较简单,就是随机产生了四个字符然后输出。效果图如下,下面我会详细说一下实现这个功能用到了那些知识点,并且会把 这些知识点详细的介绍出来。哈哈 ,大神勿喷,对于初学Java的人帮助应该蛮大的。嘿嘿。先上效果图:源代码:RandomGen.java(实现产生验证码功能的类)package verificationcode;import java.util.Random;public cla...

weixin_36208880的博客 219

Java滑动验证码的原理与实现

本文将讲解滑动验证码由来、原理及功能实现。文章,只贴出主要的逻辑代码,相关的实现代码和资源文件可以在项目中获取。 项目地址:https://gitee.com/gester/captcha.git 同时,推一下字符运算码和运算验证码文章。文章地址:https://www.jianshu.com/p/fdafd4126c2e 原创不易!如果有帮到您,可以给作者一个小星星鼓励下 ^ _ ^ 滑动验证码...

YTenderness的博客 1万+
上一篇: 动手实现随机验证码
下一篇: 由写Grails过滤不良信息的Service引发的中文乱码问题
RayChase
博客等级 码龄20年 71粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值