广告
返回顶部
首页 > 资讯 > 精选 >使用java如何生成一个验证码图片
  • 679
分享到

使用java如何生成一个验证码图片

2023-06-06 13:06:19 679人浏览 独家记忆
摘要

本文章向大家介绍使用java如何生成一个验证码图片的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程

本文章向大家介绍使用java如何生成一个验证码图片的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Java的特点有哪些

Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。2.Java具有简单性、面向对象、分布式安全性、平台独立与可移植性、动态性等特点。3.使用Java可以编写桌面应用程序、WEB应用程序、分布式系统和嵌入式系统应用程序等。

示例一:

import org.apache.commons.codec.binary.Base64;import org.apache.commons.lang.RandomStringUtils;import org.apache.commons.lang.StringUtils;import javax.imageio.ImageIO;import javax.servlet.Http.httpservletRequest;import javax.servlet.http.HttpSession;import java.awt.*;import java.awt.image.BufferedImage;import java.io.ByteArrayOutputStream;import java.util.Random;public class RandomVerifyCode {  private static final String RANDOM_NUM = "23456789";  private static final String RANDOM_LETTER = "ABCDEFGHJKMNPQRSTUVWXYZ";  private static final String RANDOM_LETTER_SMALL = "abcdefghjkmnpqrstuvwxyz";  private static final String RANDOM_STRING = RANDOM_NUM + RANDOM_LETTER + RANDOM_LETTER_SMALL;  private int width = 95;// 图片宽  private int height = 25;// 图片高  private int lineSize = 40;// 干扰线数量  private int stringNum = 4;// 随机产生字符数量  private Random random = new Random();    private Font getFont() {    return new Font("Fixedsys", Font.CENTER_BASELINE, 18);  }    private Color getRandColor(int fc, int bc) {    if (fc > 255)      fc = 255;    if (bc > 255)      bc = 255;    int r = fc + random.nextInt(bc - fc - 16);    int g = fc + random.nextInt(bc - fc - 14);    int b = fc + random.nextInt(bc - fc - 18);    return new Color(r, g, b);  }    public String getRandcode(HttpServletRequest request, StringBuffer imgBuffer) {    // BufferedImage类是具有缓冲区的Image类,Image类是用于描述图像信息的类    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);    Graphics g = image.getGraphics();// 产生Image对象的Graphics对象,改对象可以在图像上进行各种绘制操作    g.fillRect(0, 0, width, height);//图片大小    g.setFont(new Font("Times New Roman", Font.ROMAN_BASELINE, 18));//字体大小    g.setColor(getRandColor(110, 133));//字体颜色    // 绘制干扰线    for (int i = 0; i <= lineSize; i++) {      drowLine(g);    }    // 绘制随机字符    String randomString = "";    for (int i = 1; i <= stringNum; i++) {      randomString = drowString(g, randomString, i);    }    g.dispose();    ByteArrayOutputStream out = new ByteArrayOutputStream();    String encode = null;    try {      // 将内存中的图片通过流动形式输出到客户端      ImageIO.write(image, "JPEG", out);      encode = "data:image/jpeg;base64,"+Base64.encodeBase64String(out.toByteArray());      out.close();    } catch (Exception e) {      LogHelper.error("登陆控制","验证码生成","将内存中生成的验证码图片输出为BASE64格式编码失败!");    }    imgBuffer.append(encode);    return randomString;  }    private String drowString(Graphics g, String randomString, int i) {    g.setFont(getFont());    g.setColor(new Color(random.nextInt(101), random.nextInt(111), random        .nextInt(121)));    String rand = String.valueOf(getRandomString(random.nextInt(RANDOM_STRING.length())));    randomString += rand;    g.translate(random.nextInt(3), random.nextInt(3));    g.drawString(rand, 13 * i, 16);    return randomString;  }    private void drowLine(Graphics g) {    int x = random.nextInt(width);    int y = random.nextInt(height);    int xl = random.nextInt(13);    int yl = random.nextInt(15);    g.drawLine(x, y, x + xl, y + yl);  }    public String getRandomString(int num) {    return String.valueOf(RANDOM_STRING.charAt(num));  }  public static String randomString(int length){    return RandomStringUtils.random(length, RANDOM_STRING.toCharArray());  }}

示例二:

import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.BufferedImage;import java.awt.image.RenderedImage;import java.io.FileOutputStream;import java.io.OutputStream;import java.util.HashMap;import java.util.Map;import java.util.Random;public class CodeUtil {  private static int width = 90;// 定义图片的width 90  private static int height = 20;// 定义图片的height 20  private static int codeCount = 4;// 定义图片上显示验证码的个数  private static int xx = 15;  private static int fontHeight = 18;  private static int codeY = 16;  private static char[] codeSequence = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'M', 'N', 'P', 'Q', 'R',      'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '2', '3', '4', '5', '6', '7', '8', '9'};  public static Map<String,RenderedImage> codePicMap = new HashMap<>();    public static Map<String, Object> generateCodeAndPic() {    // 定义图像buffer    BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);    // Graphics2D gd = buffImg.createGraphics();    // Graphics2D gd = (Graphics2D) buffImg.getGraphics();    Graphics gd = buffImg.getGraphics();    // 创建一个随机数生成器类    Random random = new Random();    // 将图像填充为蓝色//    gd.setColor(Color.WHITE);    gd.setColor(new Color(232,240,254));    gd.fillRect(0, 0, width, height);    // 创建字体,字体的大小应该根据图片的高度来定。    Font font = new Font("Fixedsys", Font.BOLD, fontHeight);    // 设置字体。    gd.setFont(font);    // 画边框。    gd.setColor(Color.BLACK);    gd.drawRect(0, 0, width - 1, height - 1);    // 随机产生40条干扰线,使图象中的认证码不易被其它程序探测到。    gd.setColor(Color.BLACK);    for (int i = 0; i < 10; i++) {      int x = random.nextInt(width);      int y = random.nextInt(height);      int xl = random.nextInt(12);      int yl = random.nextInt(12);      gd.drawLine(x, y, x + xl, y + yl);    }    // randomCode用于保存随机产生的验证码,以便用户登录后进行验证。    StringBuffer randomCode = new StringBuffer();    int red = 0, green = 0, blue = 0;    // 随机产生codeCount数字的验证码。    for (int i = 0; i < codeCount; i++) {      // 得到随机产生的验证码数字。      String code = String.valueOf(codeSequence[random.nextInt(31)]);      // 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。      red = random.nextInt(255);      green = random.nextInt(255);      blue = random.nextInt(255);      // 用随机产生的颜色将验证码绘制到图像中。      gd.setColor(new Color(red, green, blue));      gd.drawString(code, (i + 1) * xx, codeY);      // 将产生的四个随机数组合在一起。      randomCode.append(code);    }    Map<String, Object> map = new HashMap<>();    //存放验证码    map.put("code", randomCode);    //存放生成的验证码BufferedImage对象    map.put("codePic", buffImg);    return map;  }  public static void main(String[] args) throws Exception {    //创建文件输出流对象    OutputStream out = new FileOutputStream("D://img/" + System.currentTimeMillis() + ".jpg");    Map<String, Object> map = CodeUtil.generateCodeAndPic();    ImageIO.write((RenderedImage) map.get("codePic"), "jpeg", out);    System.out.println("验证码的值为:" + map.get("code"));  }}

以上就是小编为大家带来的使用java如何生成一个验证码图片的全部内容了,希望大家多多支持编程网!

--结束END--

本文标题: 使用java如何生成一个验证码图片

本文链接: https://www.lsjlt.com/news/247165.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用java如何生成一个验证码图片
    本文章向大家介绍使用java如何生成一个验证码图片的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程...
    99+
    2023-06-06
  • Java使用Servlet生成验证码图片
    本文实例为大家分享了Java使用Servlet生成验证码图片的具体代码,供大家参考,具体内容如下 一、实现思路 1、使用BufferedImage用于在内存中存储生成的验证码图片 2...
    99+
    2022-11-12
  • 使用python怎么生成一个字母数字验证码图片
    今天就跟大家聊聊有关使用python怎么生成一个字母数字验证码图片,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python是什么意思Python是一种跨平台的、具有解释性、编译性、...
    99+
    2023-06-14
  • java实现随机验证码图片生成
    本文实例为大家分享了java生成随机验证码图片的具体代码,供大家参考,具体内容如下 1.controller @GetMapping(value = "/getRan...
    99+
    2022-11-12
  • 使用Java怎么生成一个随机验证码
    这篇文章将为大家详细讲解有关使用Java怎么生成一个随机验证码,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。源代码:RandomGen.java(实现产生验证码功能的类)package ve...
    99+
    2023-05-31
    java ava
  • 使用java编写一个验证码生成功能
    使用java编写一个验证码生成功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。java 验证码的生成实现所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片, 图片里...
    99+
    2023-05-31
    java ava
  • Vue如何实现图片验证码生成
    这篇文章主要介绍“Vue如何实现图片验证码生成”,在日常操作中,相信很多人在Vue如何实现图片验证码生成问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue如何实现图片验证码生成”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-29
  • 利用java如何实现一个验证码生成功能
    利用java如何实现一个验证码生成功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、serialVersionUID    private...
    99+
    2023-05-31
    java 验证码 ava
  • java怎么实现随机验证码图片生成
    这篇文章主要介绍“java怎么实现随机验证码图片生成”,在日常操作中,相信很多人在java怎么实现随机验证码图片生成问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java怎么实现随机验证码图片生成”的疑惑有所...
    99+
    2023-06-25
  • Nodejs中使用captchapng模块生成图片验证码
    Nodejs项目,在做图片验证码的时候遇到了难题。Nodejs没有图片库,以后会有,但是现在没有。 网络上搜索一圈,有几个解决方案: 1、采用第三方验证码程序,有的时候,项目可能不允许; 2、使用Java或...
    99+
    2022-06-04
    验证码 模块 图片
  • js如何随机生成一个验证码
    这篇文章给大家分享的是有关js如何随机生成一个验证码的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果:html代码:<p>验证码:</p>  ...
    99+
    2022-10-19
  • 利用Java编写一个验证码生成功能
    本篇文章为大家展示了利用Java编写一个验证码生成功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。具体方法如下:package com.SM_test.utils; import java.awt...
    99+
    2023-05-31
    java ava
  • 基于Java生成图片验证码的方法解析
    目录使用Java生成图片验证码完全解析注意事项如何加入噪点如何生成干扰线什么样的算法生成噪点比较好验证码如何避免被ocr识别如何斜放文本四位图形验证码调整噪点的透明度使用Java生成...
    99+
    2023-02-06
    Java生成图片验证码 Java图片验证码 Java验证码
  • JavaScript如何生成图形验证码
    这篇文章主要介绍JavaScript如何生成图形验证码,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下getGVerify:function (id)  ...
    99+
    2022-10-19
  • 利用Java 编写一个随机生成验证码功能
    这篇文章给大家介绍利用Java 编写一个随机生成验证码功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java 实现随机验证码功能简单实例现在许多系统的注册、登录或者发布信息模块都添加的随机码功能,就是为了避免自动注...
    99+
    2023-05-31
    java ava 验证码
  • 如何在Java中利用patchca实现一个验证码生成功能
    本篇文章为大家展示了如何在Java中利用patchca实现一个验证码生成功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。代码如下: @RequestMapping(value = {"...
    99+
    2023-05-31
    java patchca ava
  • 怎么用Python实现随机生成图片验证码
    本篇内容主要讲解“怎么用Python实现随机生成图片验证码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python实现随机生成图片验证码”吧!导入模块import random...
    99+
    2023-06-26
  • java后台验证码如何生成
    这篇文章给大家分享的是有关java后台验证码如何生成的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果图如下:1.适用需求后台生成验证码,用于登陆验证。2. 功能实现所需控件/文件:无(普通标签)3.功能点实现思...
    99+
    2023-06-15
  • Java如何实现验证码生成
    这篇文章主要介绍了Java如何实现验证码生成,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。验证码大家都知道,它的作用也不用我多说了吧。如果不太清楚请参见百度百科中的解释,一般...
    99+
    2023-05-30
    java
  • Node.JS如何使用纯JavaScript生成图片或滑块式验证码功能
    这篇文章主要为大家展示了“Node.JS如何使用纯JavaScript生成图片或滑块式验证码功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Node.JS如何...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作