最近要做一个网站,要求实现验证码程序,经过不断调试,终于成功实现功能。

一、验证码生成类

生成验证码的话需要用到java的Graphics类库,画出一个验证码

废话不多说,直接上代码

package verificationCode;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.image.BufferedImage;

import java.awt.image.RenderedImage;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.util.HashMap;

import java.util.Map;

import java.util.Random;

import javax.imageio.ImageIO;

public class generateCode {

private static int width = 150;// 定义图片的width

private static int height = 48;// 定义图片的height

private static int codeCount = 4;// 定义图片上显示验证码的个数

private static int xx = 25;

private static int fontHeight = 42;

private static int codeY = 42;

private static char[] codeSequence = { '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' };

/**

* 生成一个map集合

* code为生成的验证码

* codePic为生成的验证码BufferedImage对象

* @return

*/

public static Map generateCodeAndPic() {

// 定义图像buffer

BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

// Graphics2D gd = buffImg.createGraphics();

// Graphics2D gd = (Graphics2D) buffImg.getGraphics();

Graphics gd = buffImg.getGraphics();

// 创建一个随机数生成器类

Random random = new Random();

// 将图像填充为白色

gd.setColor(Color.WHITE);

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

// 创建字体,字体的大小应该根据图片的高度来定。

Font font = new Font("Fixedsys", Font.BOLD, fontHeight);

// 设置字体。

gd.setFont(font);

// 画边框。

gd.setColor(Color.BLACK);

gd.drawRect(0, 0, width - 1, height - 1);

gd.setFont(font);

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

int red = 0, green = 0, blue = 0;

// randomCode用于保存随机产生的验证码,以便用户登录后进行验证。

StringBuffer randomCode = new StringBuffer();

// 随机产生codeCount数字的验证码。

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

// 得到随机产生的验证码数字。

String code = String.valueOf(codeSequence[random.nextInt(36)]);

// 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。

red = random.nextInt(255);

green = random.nextInt(255);

blue = random.nextInt(255);

// 用随机产生的颜色将验证码绘制到图像中。

gd.setColor(new Color(red, green, blue));

gd.drawString(code, (i + 1) * xx, codeY);

// 将产生的四个随机数组合在一起。

randomCode.append(code);

}

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

red = random.nextInt(255);

green = random.nextInt(255);

blue = random.nextInt(255);

// 用随机产生的颜色将验证码绘制到图像中。

gd.setColor(new Color(red, green, blue));

int x = random.nextInt(width);

int y = random.nextInt(height);

int xl = random.nextInt(50);

int yl = random.nextInt(50);

gd.drawLine(x, y, x + xl, y + yl);

}

Map map =new HashMap();

//存放验证码

map.put("code", randomCode);

//存放生成的验证码BufferedImage对象

map.put("codePic", buffImg);

return map;

}

public static void main(String[] args) throws Exception {

//创建文件输出流对象

File file = new File("WebRoot/image/"+System.currentTimeMillis()+".jpg");

FileOutputStream out = null;

try {

if (!file.exists()) {

// 先得到文件的上级目录,并创建上级目录,在创建文件

file.getParentFile().mkdir();

file.createNewFile();

}

out = new FileOutputStream(file);

Map map = generateCode.generateCodeAndPic();

ImageIO.write((RenderedImage) map.get("codePic"), "jpeg", out);

System.out.println("验证码的值为:"+map.get("code"));

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

java验证码实现简单_java实现简单的验证码功能相关推荐

  1. Java英汉翻译程序_java实现简单的英文文本单词翻译器功能示例

    本文实例讲述了java实现简单的英文文本单词翻译器功能.分享给大家供大家参考,具体如下: 直接上代码: package fanyi; import java.io.bufferedreader; im ...

  2. java记事本课程设计_Java课程设计记事本的功能实现课程论文附代码

    主要内容: 1设计背景 现在随着计算机科学日渐成熟,其强大的功能已经为人们深刻认识,它已经入人类社会的各个领域并发挥着越来越重要的作用,记事本是日常生活中常用到的工具,用户可以在其中方便地输入文字,从 ...

  3. java猜拳游戏代码_Java实现简单猜拳游戏

    本文实例为大家分享了java实现简单猜拳游戏的具体代码,供大家参考,具体内容如下 看网上的猜拳游戏那么多,但都是用switch输入数字,所以用if嵌套,写一个简单的猜拳游戏 package game; ...

  4. java编写的浏览器_Java编写简单的网页浏览器

    时间:2019-01-25 概述:网页浏览器 Web 浏览器 用Java语言编写实现一个简单的WEB浏览器,我们经常要在Internet 上浏览网页,这就需要浏览器,目前使用比较广泛的是Interne ...

  5. java做小窗体_java实现简单窗体小游戏----球球大作战

    java实现简单窗体小游戏----球球大作战 需求分析 1.分析小球的属性: ​坐标.大小.颜色.方向.速度 2.抽象类:Ball ​设计类:BallMain-创建窗体 ​BallJPanel-画小球 ...

  6. java递归算法经典实例_Java实现简单的递归操作方法实例

    前言 在数据结构算法设计中,或者一个方法的具体实现的时候,有一种方法叫做"递归",这种方法在思想上并不是特别难,但是实现起来还是有一些需要注意的.虽然对于很多递归算法都可以由相应的 ...

  7. java绕过加密密码_Java实现简单密码加密功能

    本文实例为大家分享了Java实现简单密码加密案例,供大家参考,具体内容如下 需求: 首先将一组数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字, 最后将第一位和最后一位数字交换. 请任 ...

  8. java语言计算圆周率_Java语言简单计算圆周率完整示例

    本文实例讲述了Java语言简单计算圆周率完整示例.分享给大家供大家参考,具体如下,希望对大家学习Java语言简单计算圆周率有所帮助. 这两天在网上看到一个题,已知Pi可以用函数4 * (1 – 1/3 ...

  9. java弹球游戏代码_Java实现简单的弹球游戏

    本文实例为大家分享了Java实现简单的弹球游戏的具体代码,供大家参考,具体内容如下 该程序主要是用于对java图形化界面编程进行联系,程序实现全部采用的是AWT包下的类. 程序仅做参考,供学习使用. ...

最新文章

  1. MySQL 单表优化
  2. 静脉识别实现初步发展 多模态或成未来趋势
  3. 使用SSM开发一个校友联络的平台系统
  4. P1056 排座椅(模拟)
  5. Android开源项目整理:个性化空间View篇(看遍论坛千万篇,不看此篇也枉然)
  6. 《团队名称》第八次团队作业:Alpha冲刺day1
  7. Luogu P1550 [USACO08OCT]打井Watering Hole
  8. 有了数据湖探索服务,企业决策“新”中有数
  9. linux 软件下载后无法安装不了怎么办,Firefox无法安装怎么办
  10. cisco 设备的NTP客户端设置
  11. 【光学】基于matlab GUI(杨氏双缝+劈尖)干涉+(单缝+多缝+圆孔+矩孔)衍射仿真【含Matlab源码 878期】
  12. Docker实时查看日志命令
  13. linux分区拓展容量,Linux系统分区容量扩充的方法
  14. 【Django】admin的save_modle方法重写-20220803
  15. GNSS/INS组合导航(八):INS/GPS组合导航
  16. 从事热爱的工作和积极乐观
  17. qstock 玩转问财:一行代码实现条件选股
  18. MySQL utf8mb4字符集按中文拼音排序
  19. 电力系统潮流计算(牛顿-拉夫逊法、高斯-赛德尔法、快速解耦法)【6节点 9节点 14节点 26节点 30节点 57节点】(Matlab代码实现)
  20. 第四章:项目整合管理 - (4.6 实施整体变更控制)

热门文章

  1. 福利一波,赠票:2018杭州云栖大会 - 单日票(9月22日)
  2. mysql中有哪些数值型函数_mysql数值型函数汇总
  3. mysql主从不同步怎么恢复_mysql主从不同步时,怎么恢复
  4. 【alibaba-cloud】SpringCloud和SpringCloud对比
  5. attribute 'downsample' of type 'NoneType' is not usable in a script method
  6. shuffleNetv2 测试
  7. res2net 测试
  8. Tir-Hi3559AV100镜像烧写
  9. MnasNet 测试
  10. Cross Entropy梯度分布拉平