java 复杂验证码生成,java验证码生成种

java验证码生成类

package cn.edu.pdsu.action;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.image.BufferedImage;

import java.util.Random;

import javax.imageio.ImageIO;

import javax.servlet.ServletOutputStream;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import org.apache.commons.lang.RandomStringUtils;

import org.apache.struts2.ServletActionContext;

/**

* 类说明:验证码类(将验证码信息写入到session中 属性“authCode”)

*

* @author 作者: LiuJunGuang

* @version 创建时间:2011-7-17 下午03:26:21

*/

public class AuthCodeAction {

private HttpServletResponse response = ServletActionContext.getResponse();

private HttpServletRequest request = ServletActionContext.getRequest();

public String execute() {

try {

int width = 50;

int height = 20;

// 取得一个4位随机字母数字字符串

String s = RandomStringUtils.random(4, true, true);

// 保存入session,用于与用户的输入进行比较.

// 注意比较完之后清除session.

HttpSession session = request.getSession(true);

session.setAttribute("authCode", s);

response.setContentType("images/jpeg");//告知浏览器内容的类型

response.setHeader("Pragma", "No-cache");//HTTP 1.0版 不要缓存

response.setHeader("Cache-Control", "no-cache"); //HTTP 1.1 不要缓存

response.setDateHeader("Expires", 0);//设置存活时间

ServletOutputStream out = response.getOutputStream();//得到响应输出流

BufferedImage image = new BufferedImage(width, height,

BufferedImage.TYPE_INT_RGB);

Graphics g = image.getGraphics();

// 设定背景色

g.setColor(getRandColor(200, 250));

g.fillRect(0, 0, width, height);

// 设定字体

Font mFont = new Font("Times New Roman", Font.BOLD, 18);// 设置字体

g.setFont(mFont);

// 画边框

// g.setColor(Color.BLACK);

// g.drawRect(0, 0, width - 1, height - 1);

// 随机产生干扰线,使图象中的认证码不易被其它程序探测到

g.setColor(getRandColor(160, 200));

// 生成随机类

Random random = new Random();

for (int i = 0; i < 125; i++) {

int x2 = random.nextInt(width);

int y2 = random.nextInt(height);

int x3 = random.nextInt(12);

int y3 = random.nextInt(12);

g.drawLine(x2, y2, x2 + x3, y2 + y3);

}

// 绘制一些长的干扰线

for (int i = 0; i < 5; i++) {

int y1 = random.nextInt(15) + 3;

g.drawLine(0, y1, width, y1);

g.setColor(getRandColor(10, 160));

}

// 将认证码显示到图象中

g.setColor(new Color(20 + random.nextInt(110), 20 + random

.nextInt(110), 20 + random.nextInt(110)));

g.drawString(s, 2, 16);

// 图象生效

g.dispose();

// 输出图象到页面

ImageIO.write((BufferedImage) image, "JPEG", out);//将图片以JPEG格式输出到out输出流中

out.close();

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

//获得某一范围的随机颜色

private 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);

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271778.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑硬件:蓝屏的常见解决方案

我们在使用电脑的时候经常会遇到电脑蓝屏的故障&#xff0c;这个可以算是电脑故障最频繁出现的一个了&#xff0c;今天给大家介绍一下电脑蓝屏常见的处理办法&#xff0c;希望能给大家带来一些 帮助&#xff01; 1、电脑蓝屏一般处理办法 1、先了解发生蓝屏前电脑的情况及所做的…

1、Canvas的基本用法

1、Canvas是什么&#xff1f; HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像。 画布是一个矩形区域&#xff0c;您可以控制其每一像素。 canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。 2、创建 Canvas 元素 规定元素的 id、宽度和高度&#xff1a; …

用lambda表达式实现Runnable

用lambda表达式实现Runnable lambda表达式替换了原来匿名内部类的写法&#xff0c;没有了匿名内部类繁杂的代码实现&#xff0c;而是突出了&#xff0c;真正的处理代码。最好的示例就是 实现Runnable 的线程实现方式了: 用() -> {}代码块替代了整个匿名内部类 Test public …

java弱引用怎么手动释放,十分钟理解Java中的弱引用,十分钟java引用

十分钟理解Java中的弱引用&#xff0c;十分钟java引用本篇文章尝试从What、Why、How这三个角度来探索Java中的弱引用&#xff0c;帮助大家理解Java中弱引用的定义、基本使用场景和使用方法。由于个人水平有限&#xff0c;叙述中难免存在不准确或是不清晰的地方&#xff0c;希望…

软件:推荐六款实用的录频软件

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&#x…

安装 openSUSE Leap 42.1 之后要做的 8 件事

导读openSUSE Leap 确实是个巨大的飞跃&#xff0c;它允许用户运行一个和 SUSE Linux 企业版拥有同样基因的发行版。和其它系统一样&#xff0c;为了实现最佳的使用效果&#xff0c;在使用它之前需要做些优化设置。下面是一些我在我的电脑上安装 openSUSE Leap 之后做的一些事情…

Java8 Stream Collectors groupingBy使用

分组List并显示其总数。 Test public void test8() {//3 apple, 2 banana, others 1List<String> items Arrays.asList("apple", "apple", "banana","apple", "orange", "banana", "papaya");Map…

操作系统:分享10个经常用的cmd命令

电脑高手操作电脑时&#xff0c;通常都是在“运行”中直接输入“命令”来直接调出相应的操作。如果大家也想要像电脑高手一样&#xff0c;但是却又不知道“运行”命令有哪些&#xff1f;在这里&#xff0c;小编就为大家分享10个“运行”命令&#xff0c;让大家体验到成为电脑高…

matlab交叉耦合,交叉耦合矩阵综合问题

编程计算N阶耦合矩阵&#xff0c;基本都能算对&#xff0c;但是对于某些特殊参数会出现R1!RN&#xff0c;大家又出现类似的情况么&#xff1f;希望高手帮忙计算以下参数&#xff0c;看看是否能算出来。参数为ftz[-1.2i -1.4i 1.4i 1.2i -1.05i 1.05i];传输零点RL20;%带内回波N …

idea创建Package时出现包名累加,而不是树形结构解决方法

idea打开工程的时候包名叠在一起了 点击箭头处按钮,把第一第二行勾去掉 如下 最终效果

电脑键盘中英文按键有哪些?有什么作用?

对于电脑键盘&#xff0c;相信大家并不陌生&#xff0c;而在电脑键盘上面有着很多按键&#xff0c;除了数字按键和字母按键之外&#xff0c;还有很多看不懂的英文按键。那么这些英文按键是什么意思呢&#xff1f;如果并不了解&#xff0c;那么小编就为大家介绍所有英文按键的意…

在github中使用pages上传自己的网页

转载自&#xff1a;http://www.cnblogs.com/lijiayi/p/githubpages.html 学了前端小半年&#xff0c;如今写了个自己的网页想要去应聘&#xff0c;却发现部署很麻烦&#xff0c;部署到阿里云之类&#xff0c;买域名啊啥的还要收费&#xff0c;说贵也不贵&#xff0c;但我就是傲…

使用lamba中stream 进行分组统计

对一个list中的元素进行分组&#xff0c;并统计各个元素出现的次数。放入map<String,Long>。 代码如下: Test public void test8() {List<String> items Arrays.asList("1", "2", "3","4", "1", "3"…

php 表单select,表单控件select标签是如何使用的

表单控件select标签是用来创建下拉列表的&#xff0c;通过标签来定义可用选项以及其他属性来设置表单控件的选择个数等。今天将介绍的是HTML中的表单控件select的用法&#xff0c;具有一定的参考价值&#xff0c;希望对大家有所帮助。【推荐课程&#xff1a;HTML教程】select标…

电脑经常死机是什么原因?如何解决?

目录 一、电脑经常死机是什么原因&#xff1f; 二、电脑经常死机如何解决&#xff1f; ​​​​​​​ 一、电脑经常死机是什么原因&#xff1f; 1、电脑频繁死机&#xff0c;在进行CMOS设置时也会出现死机现象&#xff0c;一般由硬件问题引起的&#xff0c;散热不良…

重量级框架

1.概述 重量级框架则强调高可伸缩性&#xff0c;适合与开发大型企业应用。轻量级框架侧重于减小开发的复杂度&#xff0c;相应的它的处理能力便有所减弱&#xff08;如事务功能弱、不具备分布式处理能力&#xff09;&#xff0c;比较适用于开发中小型企业应用。轻量级框架和重量…

Win10磁盘占用达到100%,优化一下就解决了

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&#x…

2、IDEA以新窗口的形式打开多个项目

IDEA以新窗口的形式打开多个项目 修改1处如图所示

160523、Oracle建立表空间和用户

建立表空间和用户的步骤&#xff1a; 用户 建立&#xff1a;create user 用户名 identified by "密码"; 授权&#xff1a;grant create session to 用户名; grant create table to 用户名; grant create tablespace to 用户名; …

Win10 该如何设置FTP呢,详细设置步骤

复印&#xff0c;打印&#xff0c;扫描的日常操作是每个办公人员的必备技能&#xff0c;我们来了解一下扫描至FTP的具体操作方法。 要使用FTP功能扫描文件到电脑&#xff0c;首先要需要一台可以接收文件的FTP服务器&#xff0c;这个服务器我们可以借助第三方软件搭建&#xff0…