• Java使用Hutool工具包生成二维码、验证码、随机数


    目录


    前言

    Hutool是一个小而全的 Java工具类库

    它可以帮助我们操作excel,生成随机数,二维码,验证码,发送电子邮件,转化bean和json等操作,我个人也是非常喜欢这个工具包

    当然它的功能远不止这些,下面就简单分享下一些简单实用的操作

    功能演示

    这些都是通过hutool生成的

    简单的验证码

    自定义图片的验证码

     普通的验证码

     自定义验证码

    这个就比较好玩了,生成的内容范围,个数,背景颜色,字体样式,线条数都是可以自己控制的

     GIF动图验证码

     防蓝光验证码

    在网上比较常见的一种

    目录

    前言

    前提准备,需要准备一个项目和本地路径

    引入Hutool工具包

    生成二维码

    自定义背景图片二维码

    识别二维码内容

    ​编辑

    验证码

    生成普通类型的验证码

    自定义验证码生成规则

    ​编辑

    生成GIF格式的验证码

    扭曲防蓝光验证码

    随机数

    总结


    前提准备,需要准备一个项目和本地路径

    项目是为了方便进行测试

    本地路径是为了存放生成的验证码和图片

    引入Hutool工具包

    首先需要引入hutool依赖,以及使用比较广泛的二维码工具类zxing

    1. <!--hutool万能工具包-->
    2. <dependency>
    3. <groupId>cn.hutool</groupId>
    4. <artifactId>hutool-all</artifactId>
    5. <version>5.7.21</version>
    6. </dependency>
    7. <!--二维码工具包-->
    8. <dependency>
    9. <groupId>com.google.zxing</groupId>
    10. <artifactId>core</artifactId>
    11. <version>3.4.1</version>
    12. </dependency>

    然后创建一个类,就开始编写代码测试啦

    生成二维码

    1. package com.example.demo;
    2. import cn.hutool.core.io.FileUtil;
    3. import cn.hutool.extra.qrcode.QrCodeUtil;
    4. public class QrCodeUtils {
    5. /**
    6. * 生成普通类型的二维码
    7. */
    8. public static void generateGeneralQrCode() {
    9. // 三个参数分别是 扫码内容 宽高
    10. QrCodeUtil.generate("http://www.baidu.com/",
    11. 500, 500,
    12. // 生成路径 切记换成自己的
    13. FileUtil.file("D:\\Tools\\Java\\HutoolTest\\QRCODE1.jpg"));
    14. }
    15. public static void main(String[] args) {
    16. generateGeneralQrCode();
    17. }
    18. }

    直接运行即可 这样本地就会生成一个二维码图片 

    打开就是百度的首页,因为我们写的就是百度的url

    自定义背景图片二维码

    上面的二维码有点单调是吗,没关系,我们可以自定义加入背景图片

    比如我现在有这么一直图,那么我就想把它作为背景图生成二维码

     修改代码

    1. package com.example.demo;
    2. import cn.hutool.core.io.FileUtil;
    3. import cn.hutool.extra.qrcode.QrCodeUtil;
    4. import cn.hutool.extra.qrcode.QrConfig;
    5. import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
    6. public class QrCodeUtils {
    7. /**
    8. * 生成自定义图片的二维码
    9. */
    10. public static void generateGeneralQrCodeWithBgImg() {
    11. QrConfig config = new QrConfig(500, 500);
    12. config.setImg("D:\\Tools\\Images\\image\\大海4.jpg");
    13. config.setErrorCorrection(ErrorCorrectionLevel.Q);
    14. QrCodeUtil.generate("https://www.baidu.com/", config, FileUtil.file("D:\\Tools\\Java\\HutoolTest\\QRCODE2.jpg"));
    15. }
    16. public static void main(String[] args) {
    17. generateGeneralQrCodeWithBgImg();
    18. }
    19. }

    这样一个含有我们想要的背景的二维码就生成了,并且不会影响我们正常扫描的

    识别二维码内容

    上面介绍了如何生成二维码,我们如果想要识别二维码内容,需要扫码

    那么下面介绍如何使用代码识别二维码里面的内容

    1. package com.example.demo;
    2. import cn.hutool.core.io.FileUtil;
    3. import cn.hutool.extra.qrcode.QrCodeUtil;
    4. import cn.hutool.extra.qrcode.QrConfig;
    5. import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
    6. public class QrCodeUtils {
    7. /**
    8. * 识别图片二维码里面的内容
    9. */
    10. public static void decodeQrCode() {
    11. String decode = QrCodeUtil.decode(FileUtil.file("D:\\Tools\\Java\\HutoolTest\\QRCODE2.jpg"));
    12. System.out.println(decode);
    13. }
    14. public static void main(String[] args) {
    15. decodeQrCode();
    16. }
    17. }

    验证码

    使用hutool生成验证码十分简单,我们可以生成各种各样的验证码图片

    生成普通类型的验证码

    1. package com.example;
    2. import cn.hutool.captcha.CaptchaUtil;
    3. /**
    4. * @description: 测试生成验证码工具类
    5. * @author: 魏一鹤
    6. * @createDate: 2022-08-17 22:56
    7. **/
    8. public class VerificationCodeUtils {
    9. /**
    10. * 生成普通类型的验证码
    11. */
    12. public static void generateGeneralVerificationCode() {
    13. /**参数分别是宽、高、验证码个数,横线干扰个数**/
    14. CaptchaUtil.createLineCaptcha(300, 100, 6, 100)
    15. .write("D:\\Tools\\Java\\HutoolTest\\lineCaptcha1.png");
    16. }
    17. public static void main(String[] args) {
    18. generateGeneralVerificationCode();
    19. }
    20. }

     

    自定义验证码生成规则

    个人觉得这种最实用,可以自定义生成的内容区间,个数,字体样式,背景颜色等等

    建议大家多去试试玩玩 挺有意思的

    1. package com.example;
    2. import cn.hutool.captcha.CaptchaUtil;
    3. import cn.hutool.captcha.LineCaptcha;
    4. import cn.hutool.captcha.generator.RandomGenerator;
    5. /**
    6. * @description: 测试生成验证码工具类
    7. * @author: 魏一鹤
    8. * @createDate: 2022-08-17 22:56
    9. **/
    10. public class VerificationCodeUtils {
    11. /**
    12. * 生成自定义规则的验证码
    13. */
    14. public static void generateCustomVerificationCode() {
    15. /**参数分别是宽、高、验证码个数,横线干扰个数**/
    16. LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(300, 100, 6, 10);
    17. /**只会在0-9中产生验证码的内容,内容个数为6**/
    18. RandomGenerator randomGenerator = new RandomGenerator("0123456789", 6);
    19. lineCaptcha.setGenerator(randomGenerator);
    20. String lineCaptchaCode = lineCaptcha.getCode();
    21. System.out.println(lineCaptchaCode);
    22. lineCaptcha.write("D:\\Tools\\Java\\HutoolTest\\lineCaptcha2.png");
    23. }
    24. public static void main(String[] args) {
    25. generateCustomVerificationCode();
    26. }
    27. }

    生成GIF格式的验证码

    这种的就属于整活了,花里胡哨的,感觉用处不大,大家就图一乐

    1. package com.example;
    2. import cn.hutool.captcha.CaptchaUtil;
    3. import cn.hutool.captcha.GifCaptcha;
    4. import cn.hutool.captcha.LineCaptcha;
    5. import cn.hutool.captcha.generator.RandomGenerator;
    6. /**
    7. * @description: 测试生成验证码工具类
    8. * @author: 魏一鹤
    9. * @createDate: 2022-08-17 22:56
    10. **/
    11. public class VerificationCodeUtils {
    12. /**
    13. * 生成gif类型的验证码
    14. */
    15. public static void generateGifVerificationCode() {
    16. /**参数分别是宽、高、验证码个数**/
    17. GifCaptcha gifCaptcha = CaptchaUtil.createGifCaptcha(500, 200, 8);
    18. gifCaptcha.write("D:\\Tools\\Java\\HutoolTest\\gifCaptcha.gif");
    19. String gifCaptchaCode = gifCaptcha.getCode();
    20. System.out.println(gifCaptchaCode);
    21. }
    22. public static void main(String[] args) {
    23. generateGifVerificationCode();
    24. }
    25. }

    这个其实一直在闪 是个gif动图

    扭曲防蓝光验证码

    1. package com.example;
    2. import cn.hutool.captcha.CaptchaUtil;
    3. import cn.hutool.captcha.GifCaptcha;
    4. import cn.hutool.captcha.LineCaptcha;
    5. import cn.hutool.captcha.ShearCaptcha;
    6. import cn.hutool.captcha.generator.RandomGenerator;
    7. /**
    8. * @description: 测试生成验证码工具类
    9. * @author: 魏一鹤
    10. * @createDate: 2022-08-17 22:56
    11. **/
    12. public class VerificationCodeUtils {
    13. /**
    14. * 生成扭曲防蓝光类型的验证码
    15. */
    16. public static void generateShearVerificationCode() {
    17. /**参数分别是宽、高、验证码个数、扭曲程度**/
    18. ShearCaptcha shearCaptcha = CaptchaUtil.createShearCaptcha(500, 200, 6, 20);
    19. shearCaptcha.write("D:\\Tools\\Java\\HutoolTest\\shearCaptcha3.png");
    20. System.out.println(shearCaptcha.getCode());
    21. }
    22. public static void main(String[] args) {
    23. generateShearVerificationCode();
    24. }
    25. }

    个人感觉不好看

    随机数

    一般随机数每个公司都会自己的生成规则,包括个数,生成方式

    大家只需要知道使用hutool也可以简单快速生成随机数即可

    部分生成方式如下

    1. import cn.hutool.core.util.RandomUtil;
    2. RandomUtil.randomString(10) //小写字母+数字
    3. RandomUtil.randomStringUpper(10) //大写字母+数字
    4. RandomUtil.randomNumbers(10) //数字
    5. RandomUtil.randomStringWithoutStr(10,"0123456789") //不含有0123456789
    6. RandomUtil.randomString("abc",10) //只含有abc
    7. RandomUtil.randomChar() // 生成小写字母+数字中一个字符
    8. RandomUtil.randomNumber() // 生成0123456789中一个字符
    9. RandomUtil.randomChar("-!?") // 生成-!?中一个字符

    我们随便挑一些写下

    1. package com.example.demo;
    2. import cn.hutool.core.util.RandomUtil;
    3. /**
    4. * @description: hutool生成随机数
    5. * @author: 魏一鹤
    6. * @createDate: 2022-08-17 23:22
    7. **/
    8. public class RandomUtils {
    9. public static void getRandomByHutool(){
    10. //生成一个10位数的随机数并且只含有abc123
    11. System.out.println(RandomUtil.randomString("abc123",10));
    12. //小写字母+数字
    13. System.out.println(RandomUtil.randomString(10));
    14. //大写字母+数字
    15. System.out.println( RandomUtil.randomStringUpper(10) );
    16. //全是数字
    17. System.out.println( RandomUtil.randomNumbers(10) );
    18. }
    19. public static void main(String[] args){
    20. getRandomByHutool();
    21. }
    22. }

    总结

    Hutool里面的小工具还是挺多的,而且好玩实用,大家可以多试试,当然它的作用和功能远不如此

    后续会接着更新一些其他功能

  • 相关阅读:
    unity中的模型坐标系与3dmax导出的模型坐标系不一致的解决方案
    【数据结构与算法】List接口&栈&队列
    SQL 文本函数
    git上传代码到GitHub
    基于SVm和随机森林算法模型的中国黄金价格预测分析与研究
    理解 React 服务器组件
    select in ()的时候,MySQL会自动按主键自增排序,要是按IN中给定的顺序来取,如何实现呢?
    如何用JavaScripte和HTML 实现一整套的考试答题卡和成绩表
    大厂数仓专家实战分享:企业级埋点管理与应用
    深度学习笔记---学习预备知识
  • 原文地址:https://blog.csdn.net/weixin_46713508/article/details/126395679