1、生成验证码工具类

public class CheckCodeTool {
private Integer width = 80;
private Integer height = 38; public String getCheckCode(BaseForm baseForm) {
/*
* 绘图
*/
// step1,创建一个内存映像对象(画板)
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// step2,获得画笔
Graphics g = image.getGraphics();
// step3,给笔上色
//Random r = new Random();
SecureRandom r = new SecureRandom();
// g.setColor(new Color(r.nextInt(255), r.nextInt(255),r.nextInt(255)));
// step4,给画板设置背景颜色
g.fillRect(0, 0, width, height);
// step5,绘制一个随机的字符串
String number = getNumber();
g.setColor(new Color(0, 0, 0)); //存储到redis(用于登录校验)
if (baseForm != null && StringUtils.isNotEmpty(baseForm.getSessionId())) {
String redisCheckCodeId = "CheckCodeId";
try {
if (RedisUtil.getInstance().isExists(redisCheckCodeId)) {
RedisUtil.getInstance().remove(redisCheckCodeId);
}
RedisUtil.getInstance().setStringWithSeconds(redisCheckCodeId,number,60);//1分钟时效
} catch (Exception e) {
System.out.println("getCheckCode:error:" + e.toString());
}
}
// new Font(字体,风格,大小)
g.setFont(new Font(null, Font.ITALIC, 20));
g.drawString(number, 5, 25);
// step6,加一些干扰线
for (int i = 0; i < 8; i++) {
g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));
g.drawLine(r.nextInt(width), r.nextInt(height), r.nextInt(width), r.nextInt(height));
}
/*
* 压缩图片并输出到客户端(浏览器)
*/
ByteArrayOutputStream out = new ByteArrayOutputStream();
String base64String = "";
try {
ImageIO.write(image, "jpeg", out);
base64String = Base64Utils.encode(out.toByteArray());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} return base64String;
} // 生成随机数作为验证码
private String getNumber() {
String number = "";
String pool = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
SecureRandom r = new SecureRandom();
for (int i = 0; i < 4; i++) {
number += pool.charAt(r.nextInt(pool.length()));
}
return number;
}
}

2、测试验证类

public class CheckCodeTest {

    public static void main(String[] args) {
// TODO Auto-generated method stub
CheckCodeTool checkCodeTool = new CheckCodeTool();
String checkCode = checkCodeTool.getCheckCode(new BaseForm());
System.out.println(checkCode);
} }

输出:

/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGB ......

将base64String字符串传递给前端,即可显示图片验证码。

Java使用imageio、awt生成图片验证码的更多相关文章

  1. (七)利用servlet生成图片验证码

    总结: 验证码就是一张图,然后往这张图上写入随机的字符(数字字母等). 1.1 编写html页面 <!DOCTYPE html> <html> <head> < ...

  2. SpringBoot使用谷歌方式生成图片验证码

    1.新建一个springboot的项目 2.导入坐标 <dependency> <groupId>com.github.penggle</groupId> < ...

  3. selenium+java破解极验滑动验证码的示例代码

    转自: https://www.jianshu.com/p/1466f1ba3275 selenium+java破解极验滑动验证码 卧颜沉默 关注 2017.08.15 20:07* 字数 3085  ...

  4. java实现随机字母数字验证码

    生成随街验证码 VerifyCode 工具类 package com.meeno.common.cerifycode; import javax.imageio.ImageIO; import jav ...

  5. 怎样用Java自制优秀的图片验证码?这样!

    Completely Automated Public Turing test to tell Computers and Humans Apart 全自动区分计算机和人类的图灵测试 简称CAPTCH ...

  6. PHP生成图片验证码demo【OOP面向对象版本】

    下面是我今天下午用PHP写的一个生成图片验证码demo,仅供参考. 这个demo总共分为4个文件,具体代码如下: 1.code.html中的代码: <!doctype html> < ...

  7. python 全栈开发,Day85(Git补充,随机生成图片验证码)

    昨日内容回顾 第一部分:django相关 1.django请求生命周期 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这 ...

  8. JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架)

    JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架) 本来想实现 QQ 登录,有域名一直没用过,还得备案,好麻烦,只能过几天再更新啦. 先把实现的发送邮箱验证码更能更新了. 老规矩,更多内容在注释 ...

  9. net生成图片验证码--转自Lisliefor

    目前,机器识别验证码已经相当强大了,比较常见的避免被机器识别的方法,就是将验证码的字符串连到一起,这样就加大的识别的难度,毕竟机器没有人工智能.我找了很多的.net生成图片验证码的例子,后来经过一些修 ...

随机推荐

  1. flex弹性布局,好用

    一直不太喜欢自己布局前端页面,都是扒别人的页面 ,最近在练习小程序,页面无处可扒,只有自己布局 发现flex弹性布局真好用,布局起来很简单,实现的效果也很好,赞 以后可以自己写一点前端了,哈哈

  2. <转> django模板语言filter方法

    Django的模板是一个简单的文本文件,它可以生成任何文本格式(HTML.XML.CSV等),在本文开始之前先看一个Django模板的例子: 从这个例子中可以看到,模板标签可以是单独出现的,如exte ...

  3. 网站安装 https 证书

    1.点击进入官网  数安时代 2.点击选择你需要的ssl 证书 3.点击进入选择 免费申请 ,填写你需要 安装 ssl 证书 的域名 4.根据你的需求选择,我这里选择的是 数安时代 ,接下来按照步骤操 ...

  4. maven tomcat eclipse 配置 debug

    1.单击Eclipse菜单"Run"中的"Run Configurations". 2.在弹出的对话框中的左侧树中找"到Maven Build&quo ...

  5. AIDL(2):服务端回调客户端

    1.大致流程 在服务端声明远程服务接口IRemoteService.aidl,并声明回调接口ICallback.aidl 在服务端实现远程服务接口IRemoteService.Stub 使用Remot ...

  6. layui 数据返回但是table表格未渲染出来的问题

    最近蜂鸟速驾项目用layui框架,table进行表格渲染 控制台打印发现有数据,但是table.render渲染不出来,后来发现是数据已经返回但是页面元素未加载完成的缘故,用setTimeout定时器 ...

  7. Centos 7 如何卸载docker

    1.[root@localhost ~]# rpm -qa|grep docker docker.x86_64 2:1.12.6-16.el7.centos @extras docker-client ...

  8. Hsl PLC

    https://github.com/dathlin/HslCommunication 地址

  9. sql server 远程备份 bak 删除

    前言: 管理一个公司的一个服务器,最近有一些维护SQLserver数据库活弄,写下防止忘了. 因为公司采用SQL\Redis\MongoDB共用,SQL用来存储基础的结构\权限\等一些杂七杂八的东西. ...

  10. 《HTTP权威指南》之HTTP连接管理及对TCP性能的考虑

    在上一篇博客中(<HTTP权威指南>之HTTP相关概念详解)我们简单对HTTP相关的基本概念做了一些简单的了解,但未对HTTP连接管理的内容做一些详细的介绍.本篇博客我们就一起来看一下HT ...