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. 20165224 陆艺杰 Exp5 MSF基础应用

    用自己的话解释什么是exploit,payload,encode Exploit是攻击的行为 Payload是一段植入目标机的简短的带功能的恶意代码 Encode是编码,用于更改恶意代码,编码特征码检 ...

  2. ansible基本模块-server

    ansible   XXX   -m   service   -a  "name=XXX   state=started   enabled=yes"

  3. office 2013 破解工具 及 软件下载

     win7/win8/win10  office2013 破解工具 下载地址: https://pan.baidu.com/s/1sZeJOCWq1fZ3KIOWvmrAQQ office2013  ...

  4. N1 Armbian 安装 OpenMediaVault

    前言 接上一篇继续折腾,这次在 N1 上进行一些本地化设置并安装使用 OpenMediaVault 步骤 使用 ssh 连接到 N1,修改系统源 cd /etc/apt cp sources.list ...

  5. 洛谷 P4269 / loj 2041 [SHOI2015] 聚变反应炉 题解【贪心】【DP】

    树上游戏..二合一? 题目描述 曾经发明了零件组装机的发明家 SHTSC 又公开了他的新发明:聚变反应炉--一种可以产生大量清洁能量的神秘装置. 众所周知,利用核聚变产生的能量有两个难点:一是控制核聚 ...

  6. [转] electron实战开发详细流程

    [From] http://www.myk3.com/arc-8856.html 很久没有更新博客,人越来越懒了,唉 说好做的electron教程距离上次玩electron已经过去了好几个月了.. 这 ...

  7. 解决windows10活动历史记录删除问题

    Windows10日常办公过程中系统会记录很多活动历史记录信息,我是不希望我的活动历史记录随时可以被别人查看,虽然电脑有设置密码,但是办公电脑还是习惯将历史记录删除掉,并且永远禁用windows10的 ...

  8. 二维vector容器读取txt坐标

    template <class vector> struct HeadLocation{ vector x; vector y; }; vector<HeadLocation< ...

  9. docker 容器启动的模板以及注意事项

    docker启动容器常用模板 docker run -dit \ -p : -p : -p : \-v /usr/local/xd_data:/usr/local/xd_data \-v /etc/l ...

  10. Lucene常用类

    1.1 IndexWriter: 充当  创造/在索引过程中更新指标的   核心组成部分 1.2 Lucene目录 Directory: 索引的存储位置: 通常是文件的列表: 这些文件被称为索引文件. ...