image.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"%>
<%@page import="java.io.OutputStream"%>
<%!Color getRandColor(int fc, int bc) {
Random random = new Random();
if (fc > 255)
fc = 255;
if (bc > 255)
bc = 255;
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}%>
<%
try {
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
int width = 60, height = 20;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
OutputStream os = response.getOutputStream();
Graphics g = image.getGraphics();
Random random = new Random();
g.setColor(getRandColor(200, 250));
g.fillRect(0, 0, width, height);
g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
g.setColor(getRandColor(160, 200));
for (int i = 0; i < 155; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x, y, x + xl, y + yl);
}
String sRand = "";
for (int i = 0; i < 4; i++) {
String rand = String.valueOf(random.nextInt(10));
sRand += rand;
g.setColor(new Color(20 + random.nextInt(110), 20 + random
.nextInt(110), 20 + random.nextInt(110)));
g.drawString(rand, 13 * i + 6, 16);
}
session.setAttribute("rand", sRand); // 验证码 加入Session
g.dispose();
ImageIO.write(image, "JPEG", os);
os.flush();
os.close();
os = null;
//response.flushBuffer();
out.clear();
out = pageContext.pushBody();
} catch (IllegalStateException e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
%>
login.jsp
<td class="LoginLabel"> 验证码:
<td>
<h:inputText id="vcode" styleClass="inputValidate"
tabindex="3" required="true" size="8" style="ime-mode:disabled" requiredMessage="*" validatorMessage="验证码不能为空">
</h:inputText>
<h:graphicImage id="rand" url="image.jsp" alt="验证码"
styleClass="validateImg" />
</td>
<td>
<span style="color: #ffffff; font-size: 12px;
cursor: pointer;" onclick="document.getElementById('login:rand').src='image.jsp?'+Math.random();">看不清楚,<br />
更换一张!</span>
</td>
分享到:
相关推荐
易语言验证码二值化/清除杂点算法源码是一个针对图像处理的编程实践,主要涉及易语言编程环境下的图像识别技术。在这个项目中,开发者Mr.Yang提供了独特的算法,用于将验证码图片转换为二值图像并清除其中的杂点,以...
在这个易语言编写的验证码识别系统中,我们能看到几个关键的技术环节,包括垂直分割、二值化、去噪以及CFS连通分割算法和滴水算法。下面将详细解释这些概念及其在验证码识别中的作用。 1. **垂直分割**:在图像处理...
### Java代码中图形验证码的实现 #### 知识点概览 本文将深入解析一个Java图形验证码的实现案例。此案例包含了一个名为`RandCodeImage`的类,它继承自`HttpServlet`类,并实现了图形验证码的生成逻辑。通过本案例的...
#### 二、实现过程 本文将详细介绍如何在DEDE系统中为自定义表单添加验证码功能以及前端JavaScript的必填项校验。 ### 三、添加验证码功能 #### 1. 修改后端代码 首先,我们需要在DEDE的后端代码中增加验证码的验证...
1. 图像预处理:首先,我们需要对验证码图像进行预处理,包括灰度化、二值化、噪声去除等,以便后续的分析。这些操作可以帮助我们简化图像,使其更易于识别。 2. 文本定位:接下来,我们需要找到图像中的文字区域。...
【验证码二】使用验证码-附件资源
验证码二值化与清除杂点算法是图像处理中的关键技术,主要应用于识别系统,如网站登录、手机应用等的安全验证。二值化是将图像转换为黑白两色调的过程,以简化图像并突出关键特征,便于后续的字符识别。清除杂点则是...
本文将深入探讨易语言在验证码二值化和清除杂点方面的应用,以及相关源码的实现原理和操作细节。 易语言的验证码处理源码包含几个关键步骤:图片二值化、清除杂点和反色。二值化算法的目标是将图像的色彩简化为只有...
为了提高识别率,你可能需要对验证码图像进行预处理,包括灰度化、二值化、降噪等步骤。Tess4J并不直接提供这些功能,但你可以使用Java的其他库,如OpenCV,来完成这些操作。例如: ```java BufferedImage image = ...
二值化 降噪 倾斜校正分割字符 建立训练库 识别 由于是实验性质的,文中用到的验证码均为程序生成而不是批量下载真实的网站验证码,这样做的好处就是可以有大量的知道明确结果的数据集。 当需要真实环境下需要...
1. 图像预处理:首先,我们需要对验证码图片进行预处理,包括灰度化、二值化、去噪等,以减少背景干扰,使字符更易于识别。在Java中,可以使用Java Advanced Imaging (JAI)库或者OpenCV库来实现这些操作。 2. 分割...
验证码识别通常涉及图像处理和模式识别,包括灰度化、二值化、噪声去除、特征提取等步骤。按键精灵虽然不具备内置的图像处理能力,但可以通过调用外部图像处理库,如OpenCV,对验证码图片进行预处理,然后通过比较...
预处理步骤可能包括灰度化、二值化、平滑滤波、边缘检测等,目的是减少干扰并突出文字部分。VB的`ColorMatrix`和`ImageAttributes`类可以用来调整图像颜色,而`ConvolutionMatrix`可以实现滤波操作。 3. 文字分割:...
### 验证码识别 字符提取 #### 一、引言与背景 光学字符识别(Optical Character Recognition,简称OCR)技术是一种将印刷品或手写体转化为可编辑的电子文本的技术。它广泛应用于日常生活中的各种场景,如文档管理...
整个流程中,验证码的安全性是通过在服务端进行二次校验来保证的。即使前端校验被绕过,没有正确的验证码字符,服务端也不会认可该次请求。 此外,文件内容中提及的`bodycz-shortcut-listen="true"`属性可能是指对...
二、验证码滑动 滑动验证码则需要用户按照特定路径滑动一个部分以解锁整个图像。这类验证码的破解相对复杂,因为它们涉及到了运动轨迹的识别。`sliding_captcha.zip`可能包含了解析滑动验证码的算法或脚本,通常需要...