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. behave 测试框架,了解一下

    # behave测试框架 [behave](https://pythonhosted.org/behave/)是python的1个bdd测试框架实现. ### 安装 ```pip install be ...

  2. SLAM入门必收藏的资料

    搜集了各大网络,请教了SLAM大神,终于把SLAM的入门资料搜集全了!在分享资料前,我们先来看看,SLAM技术入门前需要具备哪些知识?首先学习SLAM需要会C和C++,网上很多代码还用了11标准的C+ ...

  3. ionic4 添加自定义字体图标

    在angular.json中的style中引入css文件: 然后在variables.scss中添加内容:

  4. sublime text3文本字体大小设置

    1.perferences->settings-user 4·将以下代码粘贴进入即可 { "font_face": "source code pro, " ...

  5. 蠕虫Worm virus

    美国CORNELL大学研究生莫里斯编写的蠕虫病毒 蠕虫病毒是一种常见的计算机病毒.它是利用网络进行复制和传播,传染途径是通过网络和电子邮件.最初的蠕虫病毒定义是因为在DOS环境下,病毒发作时会在屏幕上 ...

  6. 【算法笔记】B1008 数组元素循环右移问题

    1008 数组元素循环右移问题 (20 分) 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A​0​​A​1​​⋯A​N ...

  7. HDU - 5067 / HDU - 5418 TSP

    集合表示多用[0,n)表示方法 HDU - 5067 经典TSP,每个顶点恰经过一次最优 #include<bits/stdc++.h> #define rep(i,j,k) for(in ...

  8. golang flag

    本文主要对golang环境下命令行的解析进行了相关的总结.命令行在C下有getopt等函数, 在golang下提供了更为方便的处理方法. 1.命令行参数获取:命令行获得可通过os.Args参数, Ar ...

  9. scrapy框架之(CrawlSpider)

    一.CrawlSpider简介 如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调pa ...

  10. android 无线调试 [无需数据线][无需root]

    无线调试首要条件在同一网段,打开开发者模式 1,打开 5555 端口 使用数据线链接手机,在命令窗口执行:adb tcpip 5555 2,adb 链接手机调试 这时无需数据线了,在命令窗口执行:ad ...