目录
Hutool是一个小而全的 Java工具类库
它可以帮助我们操作excel,生成随机数,二维码,验证码,发送电子邮件,转化bean和json等操作,我个人也是非常喜欢这个工具包
当然它的功能远不止这些,下面就简单分享下一些简单实用的操作
这些都是通过hutool生成的
简单的验证码
自定义图片的验证码
普通的验证码
自定义验证码
这个就比较好玩了,生成的内容范围,个数,背景颜色,字体样式,线条数都是可以自己控制的
GIF动图验证码
防蓝光验证码
在网上比较常见的一种
目录
前言
前提准备,需要准备一个项目和本地路径
引入Hutool工具包
生成二维码
自定义背景图片二维码
识别二维码内容
编辑
验证码
生成普通类型的验证码
自定义验证码生成规则
编辑
生成GIF格式的验证码
扭曲防蓝光验证码
随机数
总结
项目是为了方便进行测试
本地路径是为了存放生成的验证码和图片
首先需要引入hutool依赖,以及使用比较广泛的二维码工具类zxing
cn.hutool
hutool-all
5.7.21
com.google.zxing
core
3.4.1
然后创建一个类,就开始编写代码测试啦
package com.example.demo;
import cn.hutool.core.io.FileUtil;
import cn.hutool.extra.qrcode.QrCodeUtil;
public class QrCodeUtils {
/**
* 生成普通类型的二维码
*/
public static void generateGeneralQrCode() {
// 三个参数分别是 扫码内容 宽高
QrCodeUtil.generate("http://www.baidu.com/",
500, 500,
// 生成路径 切记换成自己的
FileUtil.file("D:\\Tools\\Java\\HutoolTest\\QRCODE1.jpg"));
}
public static void main(String[] args) {
generateGeneralQrCode();
}
}
直接运行即可 这样本地就会生成一个二维码图片
打开就是百度的首页,因为我们写的就是百度的url
上面的二维码有点单调是吗,没关系,我们可以自定义加入背景图片
比如我现在有这么一直图,那么我就想把它作为背景图生成二维码
修改代码
package com.example.demo;
import cn.hutool.core.io.FileUtil;
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
public class QrCodeUtils {
/**
* 生成自定义图片的二维码
*/
public static void generateGeneralQrCodeWithBgImg() {
QrConfig config = new QrConfig(500, 500);
config.setImg("D:\\Tools\\Images\\image\\大海4.jpg");
config.setErrorCorrection(ErrorCorrectionLevel.Q);
QrCodeUtil.generate("https://www.baidu.com/", config, FileUtil.file("D:\\Tools\\Java\\HutoolTest\\QRCODE2.jpg"));
}
public static void main(String[] args) {
generateGeneralQrCodeWithBgImg();
}
}
这样一个含有我们想要的背景的二维码就生成了,并且不会影响我们正常扫描的
上面介绍了如何生成二维码,我们如果想要识别二维码内容,需要扫码
那么下面介绍如何使用代码识别二维码里面的内容
package com.example.demo;
import cn.hutool.core.io.FileUtil;
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
public class QrCodeUtils {
/**
* 识别图片二维码里面的内容
*/
public static void decodeQrCode() {
String decode = QrCodeUtil.decode(FileUtil.file("D:\\Tools\\Java\\HutoolTest\\QRCODE2.jpg"));
System.out.println(decode);
}
public static void main(String[] args) {
decodeQrCode();
}
}
使用hutool生成验证码十分简单,我们可以生成各种各样的验证码图片
package com.example;
import cn.hutool.captcha.CaptchaUtil;
/**
* @description: 测试生成验证码工具类
* @author: 魏一鹤
* @createDate: 2022-08-17 22:56
**/
public class VerificationCodeUtils {
/**
* 生成普通类型的验证码
*/
public static void generateGeneralVerificationCode() {
/**参数分别是宽、高、验证码个数,横线干扰个数**/
CaptchaUtil.createLineCaptcha(300, 100, 6, 100)
.write("D:\\Tools\\Java\\HutoolTest\\lineCaptcha1.png");
}
public static void main(String[] args) {
generateGeneralVerificationCode();
}
}
个人觉得这种最实用,可以自定义生成的内容区间,个数,字体样式,背景颜色等等
建议大家多去试试玩玩 挺有意思的
package com.example;
import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;
import cn.hutool.captcha.generator.RandomGenerator;
/**
* @description: 测试生成验证码工具类
* @author: 魏一鹤
* @createDate: 2022-08-17 22:56
**/
public class VerificationCodeUtils {
/**
* 生成自定义规则的验证码
*/
public static void generateCustomVerificationCode() {
/**参数分别是宽、高、验证码个数,横线干扰个数**/
LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(300, 100, 6, 10);
/**只会在0-9中产生验证码的内容,内容个数为6**/
RandomGenerator randomGenerator = new RandomGenerator("0123456789", 6);
lineCaptcha.setGenerator(randomGenerator);
String lineCaptchaCode = lineCaptcha.getCode();
System.out.println(lineCaptchaCode);
lineCaptcha.write("D:\\Tools\\Java\\HutoolTest\\lineCaptcha2.png");
}
public static void main(String[] args) {
generateCustomVerificationCode();
}
}
这种的就属于整活了,花里胡哨的,感觉用处不大,大家就图一乐
package com.example;
import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.GifCaptcha;
import cn.hutool.captcha.LineCaptcha;
import cn.hutool.captcha.generator.RandomGenerator;
/**
* @description: 测试生成验证码工具类
* @author: 魏一鹤
* @createDate: 2022-08-17 22:56
**/
public class VerificationCodeUtils {
/**
* 生成gif类型的验证码
*/
public static void generateGifVerificationCode() {
/**参数分别是宽、高、验证码个数**/
GifCaptcha gifCaptcha = CaptchaUtil.createGifCaptcha(500, 200, 8);
gifCaptcha.write("D:\\Tools\\Java\\HutoolTest\\gifCaptcha.gif");
String gifCaptchaCode = gifCaptcha.getCode();
System.out.println(gifCaptchaCode);
}
public static void main(String[] args) {
generateGifVerificationCode();
}
}
这个其实一直在闪 是个gif动图
package com.example;
import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.GifCaptcha;
import cn.hutool.captcha.LineCaptcha;
import cn.hutool.captcha.ShearCaptcha;
import cn.hutool.captcha.generator.RandomGenerator;
/**
* @description: 测试生成验证码工具类
* @author: 魏一鹤
* @createDate: 2022-08-17 22:56
**/
public class VerificationCodeUtils {
/**
* 生成扭曲防蓝光类型的验证码
*/
public static void generateShearVerificationCode() {
/**参数分别是宽、高、验证码个数、扭曲程度**/
ShearCaptcha shearCaptcha = CaptchaUtil.createShearCaptcha(500, 200, 6, 20);
shearCaptcha.write("D:\\Tools\\Java\\HutoolTest\\shearCaptcha3.png");
System.out.println(shearCaptcha.getCode());
}
public static void main(String[] args) {
generateShearVerificationCode();
}
}
个人感觉不好看
一般随机数每个公司都会自己的生成规则,包括个数,生成方式
大家只需要知道使用hutool也可以简单快速生成随机数即可
部分生成方式如下
import cn.hutool.core.util.RandomUtil;
RandomUtil.randomString(10) //小写字母+数字
RandomUtil.randomStringUpper(10) //大写字母+数字
RandomUtil.randomNumbers(10) //数字
RandomUtil.randomStringWithoutStr(10,"0123456789") //不含有0123456789
RandomUtil.randomString("abc",10) //只含有abc
RandomUtil.randomChar() // 生成小写字母+数字中一个字符
RandomUtil.randomNumber() // 生成0123456789中一个字符
RandomUtil.randomChar("-!?") // 生成-!?中一个字符
我们随便挑一些写下
package com.example.demo;
import cn.hutool.core.util.RandomUtil;
/**
* @description: hutool生成随机数
* @author: 魏一鹤
* @createDate: 2022-08-17 23:22
**/
public class RandomUtils {
public static void getRandomByHutool(){
//生成一个10位数的随机数并且只含有abc123
System.out.println(RandomUtil.randomString("abc123",10));
//小写字母+数字
System.out.println(RandomUtil.randomString(10));
//大写字母+数字
System.out.println( RandomUtil.randomStringUpper(10) );
//全是数字
System.out.println( RandomUtil.randomNumbers(10) );
}
public static void main(String[] args){
getRandomByHutool();
}
}
Hutool里面的小工具还是挺多的,而且好玩实用,大家可以多试试,当然它的作用和功能远不如此
后续会接着更新一些其他功能