彩色验证码

[quote][/quote]import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;


public class VerifyCodeGenerator {

private static final VerifyCodeGenerator generator = new VerifyCodeGenerator();

private final String ATTRIBUTE_NAME = "verifycode";


private final int WIDTH = 15;


private final int HEIGHT = 22;

private final int CODE_LENGTH =5;

private final String RAND_RANGE = "abcdefghijklmnopqrstuvwxyz"
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "1234567890" ;

private final char[] CHARS = RAND_RANGE.toCharArray();

private Random random = new Random();

private VerifyCodeGenerator() {

}

public static VerifyCodeGenerator getInstance() {
return generator;
}

private String getRandString() {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < CODE_LENGTH; i++)
sb.append(CHARS[random.nextInt(CHARS.length)]);
return sb.toString();
}

/**
* ��������ɫ
*
* @param ll
* ������ɫֵ����(lower limit)
* @param ul
* ������ɫֵ����(upper limit)
* @return ��ɵ������ɫ����
*/
private Color getRandColor(int ll, int ul) {
if (ll > 255)
ll = 255;
if (ll < 1)
ll = 1;
if (ul > 255)
ul = 255;
if (ul < 1)
ul = 1;
if (ul == ll)
ul = ll + 1;
int r = random.nextInt(ul - ll) + ll;
int g = random.nextInt(ul - ll) + ll;
int b = random.nextInt(ul - ll) + ll;
Color color = new Color(r, g, b);
return color;
}

/**
* ���ָ���ַ��ͼ�����
*
* @param verifyCode
* ��������ӡ������ַ�
* @return ��ɵ�ͼ�����
*/
private BufferedImage getImage(String verifyCode) {

BufferedImage image = new BufferedImage(WIDTH * CODE_LENGTH, HEIGHT,
BufferedImage.TYPE_INT_RGB);

// ��ȡͼ��������
Graphics graphics = image.getGraphics();

// ���ñ���ɫ
graphics.setColor(getRandColor(0,0));
// ��䱳��ɫ
graphics.fillRect(0, 0, WIDTH * 4, HEIGHT);

// ���ñ߿���ɫ
graphics.setColor(new Color(0, 0,0));
// ���߿�
for (int i = 0; i < 2; i++)
graphics.drawRect(i, i, WIDTH * CODE_LENGTH - i * 2 - 1, HEIGHT - i
* 2 - 1);

// ����������������ɫ
graphics.setColor(getRandColor(50, 100));
// ����50���������
for (int i = 0; i < 100; i++) {
int x1 = random.nextInt(WIDTH * CODE_LENGTH - 4) + 2;
int y1 = random.nextInt(HEIGHT - 4) + 2;
int x2 = random.nextInt(WIDTH * CODE_LENGTH - 2 - x1) + x1;
int y2 = y1;
graphics.drawLine(x1, y1, x2, y2);
}

// ��������
graphics.setFont(new Font("Times New Roman", Font.PLAIN, 18));
// ���ַ�
for (int i = 0; i < this.CODE_LENGTH; i++) {
String temp = verifyCode.substring(i, i + 1);
graphics.setColor(getRandColor(100, 255));
graphics.drawString(temp, 13 * i + 6, 16);
}

// ͼ����Ч
graphics.dispose();

return image;
}


public void printImage(HttpServletRequest request,HttpServletResponse response) {
response.setContentType("image/jpeg");
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 2000);

String verifyCode = this.getRandString();
String str = "ssss";
for (int i = 0; i < 10; i++)
str = str + str;
BufferedImage bi = this.getImage(verifyCode);

request.getSession().setAttribute(ATTRIBUTE_NAME, verifyCode);
try {

ServletOutputStream outStream = response.getOutputStream();

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outStream);

encoder.encode(bi);

outStream.flush();

outStream.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}

public boolean check(HttpServletRequest request) {
if (((String) request.getParameter(ATTRIBUTE_NAME)).equals((String) request.getSession().getAttribute(ATTRIBUTE_NAME))) {
request.getSession().removeAttribute(ATTRIBUTE_NAME);
return true;
}
return false;
}
}
【Cmder】--- Windows11 配置CMD神器 (超详细 持续更新中) 在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。 阅读详情

相关推荐

ESP32S3新手避坑:用IDF5.0驱动GT911触摸屏,我踩过的三个雷都给你填平了

本文详细解析了在ESP32S3开发板上使用IDF5.0驱动GT911触摸屏时常见的三大问题:软重启失效、状态寄存器读取异常和初始化参数差异。通过逻辑分析和硬件调试工具,提供了针对性的解决方案和优化建议,帮助开发者高效完成触摸屏驱动开发。

weixin_42567497的博客 297

JSP彩色验证码

JSP彩色验证码    生成有4个随机数字和杂乱背景的图片,数字和背景颜色会改变,服务器端刷新(用history.go(-1)也会变)     原型参考ALIBABA http://china.alibaba.com/member/showimage 产生验证码图片的文件image.jspjava.awt.image.*,java.util.*,javax.imageio.*" %>C

为理想而奋斗 1849

SAP ABAP BADI_FINS_ACDOC_POSTING_EVENTS 深度应用:KO88工单结算的凭证字段定制与财务数据增强

本文深入探讨了SAP ABAP中BADI_FINS_ACDOC_POSTING_EVENTS在KO88工单结算中的应用,详细解析了如何通过BADI实现财务凭证字段的定制与数据增强。文章提供了从结构扩展到BADI方法实现的完整步骤,包括性能优化建议和实际应用中的测试验证流程,帮助开发人员高效解决企业个性化财务需求。

weixin_26869081的博客 392

用JSP来生成彩色验证码

 读者可能经常在一些论坛发表帖子或用户登录时要求用户输入验证码,并在验证码输入框后生成了一张验证码的图片,只有验证码输入正确后才能继续下一步操作,那么使用验证码有什么用处,在JSP中又如何实现呢?   举个例子,在论坛中发表帖子时,一般的Web程序都是以提交表单形式来提交帖子的内容,接收数据后插入到数据库的表中;如果有人不怀好意,利用一些自动提交表单的工具来不断的提交表单,则会导致数据库中

蜗牛 661

共封装光学(CPO):下一代互联革命

Nvidia:产品:Quantum-X Q3450(115.2T,144×800G,2025H2上市)、Spectrum 6800(409.6T,512×800G,2026H2上市);技术路线:TSMC COUPE封装、MRM调制器、光栅耦合、外部激光源(Lumentum/Ayar Labs供应);战略定位:以横向扩展CPO验证供应链,最终聚焦纵向扩展场景(Feynman架构)。

存储随笔 4976

AI智能体赋能Cypress:自动化前端测试的新范式

自动化测试是现代软件工程保障质量的核心实践,其原理是通过脚本模拟用户操作,对软件功能进行验证。随着大语言模型(LLM)和智能体(Agent)技术的发展,测试自动化正迈向智能化新阶段。智能体能够理解自然语言描述的测试需求,并自主规划、执行测试步骤,这为应对前端UI频繁变更、测试用例维护成本高等挑战提供了新思路。在工程实践中,将Cypress这一流行的前端测试框架封装为智能体可调用的标准化技能(Skill),是实现这一愿景的关键。通过设计清晰的交互协议和状态管理机制,智能体可以像人类测试工程师一样“感知”页面状

weixin_33726318的博客 687

java 彩色验证码_java彩色验证码

生成有4个随机数字和杂乱背景的图片,数字和背景颜色会改变,服务器端刷新(用history.go(-1)也会变)原型参考ALIBABA http://china.alibaba.com/member/showimage 产生验证码图片的文件image.jspjava.awt.image.*,java.util.*,javax.imageio.*" %>Color getRandColor(in...

weixin_32377497的博客 272

KBS投稿全流程拆解:从模板准备到条件接收的实战指南

本文详细拆解了KBS期刊投稿的全流程,从模板准备、投稿系统操作到返修策略和条件接收。重点介绍了Cover Letter撰写技巧、Latex模板选择、审稿周期管理以及返修文件的系统准备方法,帮助研究者高效完成KBS投稿并提升接收概率。

weixin_26938645的博客 707

JSP实例-彩色验证码

image.java用于产生彩色验证码,其代码如下: package test; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.OutputS

晴天的专栏 1213

解读MTF曲线

怎样看MTF曲线 光学模量传递函数所表示的就是模量传递函数值随空间频率和像场位置变化的函数关系。它有很多种类型, 但最主要的两种类型就是MTF值与空间频率的关系和与像场半径(或像场角)之间的关系。 1、什么是空间频率 在讲清MTF曲线随空间频率的变化关系以前,我们先来弄明白什么叫“空间频率”。 空间频率(Spatial Frequency)的概念与分辨率的概念非常相似,单位都是“线对/毫米”(lp/mm)。但测试分辨率的标板是一组一组轮廓鲜明的黑白线条,每两条线条之间的距离,以及线条本身的宽度之比是.

camerall 1万+

QT 实现QStackedWidget切换页面右移动画

首先截取当前界面的图片,渲染到一个QLabel上,然后设置QPropertyAnimation动画,动画的作用对象就是这个QLabel,不断的改变geometry;当动画结束的时候,隐藏并释放这个QLabel。以下是一个QStackedWidget,放了两个QPushButton在上面,点击切换不同的界面。为了方便查看动画特效,设置了每个界面的背景图片。

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 883

servlet彩色验证码

用image.jsp 的彩色验证出现"     ...     "的错误 使用servlet验证pp.function.VerifyCodeServletpackage pp.function;import   java.io.*;   import   java.awt.Color;   import   java.awt.Font;   import   java.awt.Grap

352

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

java 彩色验证码_java生成彩色中文验证码和数字验证码

//生成随机颜色Color getRandColor(Random random,int fc,int bc){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 ne...

weixin_42102401的博客 489

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

java 彩色验证码_产生彩色验证码_(javabean实现)

网站运营seo文章大全提供全面的站长运营经验及seo技术!本文将教你如何一步一步地使用javabean实现了产生彩色验证码的全过程,并提供源代码。文件名:image.java=====================================/** created on 2004-8-4** to change the template for this generated file go ...

weixin_36354131的博客 261

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

JSP生成彩色验证码

SP生成彩色验证码! 程序代码image.jsp java.awt.image.*,java.util.*,javax.imageio.*" %> Color getRandColor(int fc,int bc){//给定范围获得随机颜色 Random random = new Random(); if(fc>255) fc=255; if(bc>255) bc=255;

Do 392

英文,数字和中文混合的彩色验证码实现

功能描述:英文,数字和中文混合的彩色验证码是一种比较安全的验证码,虽然这样的验证码会给用户输入带来不便,但对于保障用户账号的安全还是值得的。本实例介绍实现英文,数字和中文混合验证码的彩色验证码的方法,输入用户名和密码后,还需要输入正确的验证码才可以正常登陆。由于验证码是随机生成的,可能会产生看不清楚的验证码,因此添加了重新生成验证码的功能,用户单击“看不清?换一个”超级链接和图片本身,可以重新生成

huangshulang1234的博客 3812

Java如何生成简单的JSP彩色验证码

1.生成彩色验证码的原理  使用Java生成彩色验证码利用的就是Java动态生成和操作图片的技术。因为验证码的特点,需要每次生成一个随机的字符串,然后将生成的字符串以某种特殊的字体画到背景图片上。一个好的验证码,要求图片的背景也是随机的,而且要与数字有一定的混淆程度,这样即使攻击程序使用了OCR技术也很难识别出验证码来。 2.应用示例  由于生成验证码图片的操作也可能是经常被调用的,所以我们

qq_33396376的博客 552

java 验证码_彩色验证码

 java 验证码_彩色验证码 3推荐------------产生验证码图片的文件-----image.servlet-------------------------------------------package untitled1;import java.io.*;import java.net.*;import javax.servlet.*;

璀璨星空 1125

用Java语言编写的随机彩色验证码

在制作网页过程中,免不了在登录注册页面增加一个验证码来延长数据提交时间,以免用户过快连接数据库读取,写入数据导致服务器崩溃。以下是用Java语言编写的彩色验证码,可用于jsp、html文件。 源代码: <body> <%!Color getRandColor(int fc, int bc) { Random random = new Random(); if (fc &...

苦涩精灵的博客 523

如何使用jsp方法生存彩色汉字的验证码

为了防止自动化软软对我们网站或者软件服务器进行攻击,我们需要配置验证码来进行一定的防御。那么在验证码当道的今天,如何使验证码即能够抵挡一部分的机器,又能够使验证码互动性更好是我们验证码生成人员需要思考的内容。   今天知码网就来和大家分享一段关于使用jsp方法生存才是汉字验证码的方法,许多网站提供的内容都比较粗劣,我们今天就为大家深入总结一下。 下面是彩色汉字的代码具体编程代码:

知码的世界 465

java 彩色验证码_用java实现彩色验证码

Color getRandColor(int fc,int bc){Random rand=new Random();if(fc>255) fc=255;if(bc>255) bc=255;int r=fc+rand.nextInt(bc-fc);int g=fc+rand.nextInt(bc-fc);int b=fc+rand.nextInt(bc-fc);return new C...

weixin_26742753的博客 276

使用jsp生成彩色汉字验证码

一些网站采用了字母和数字的验证码,数字和字母加起来一共30多个,如果有心,还是能够通过方法识别出来。我在网上看到一篇文章"jsp彩色验证码",我进行了加强,生成的验证码内容为汉字,可以方便应用在面向汉语网民的网站认证上。当然,我还看到别人考虑的几种方法:1.生成计算题,比如20+34*(23-12)=?,用户必须输入正确的答案才能通过验证,这个想法挺好,但是用户必须打开计算器进行计算,增...

188
上一篇: 用dom4j生成XML文件
下一篇: jfreechart_生成折线图,饼图,柱状图,堆栈柱状图
javaee_jsp
博客等级 码龄15年 0粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值