返回顶部
首页 > 资讯 > 精选 >使用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://lsjlt.com/news/247165.html(转载时请注明来源链接)

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

猜你喜欢
  • 使用java如何生成一个验证码图片
    本文章向大家介绍使用java如何生成一个验证码图片的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程...
    99+
    2023-06-06
  • Java使用Servlet生成验证码图片
    本文实例为大家分享了Java使用Servlet生成验证码图片的具体代码,供大家参考,具体内容如下 一、实现思路 1、使用BufferedImage用于在内存中存储生成的验证码图片 2...
    99+
    2024-04-02
  • 使用python怎么生成一个字母数字验证码图片
    今天就跟大家聊聊有关使用python怎么生成一个字母数字验证码图片,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python是什么意思Python是一种跨平台的、具有解释性、编译性、...
    99+
    2023-06-14
  • Vue如何实现图片验证码生成
    这篇文章主要介绍“Vue如何实现图片验证码生成”,在日常操作中,相信很多人在Vue如何实现图片验证码生成问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue如何实现图片验证码生成”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-29
  • python图片验证码生成代码
    本文实例为大家分享了python图片验证码实现代码,供大家参考,具体内容如下 #!/usr/bin/env python # -*- coding: UTF-8 -*- import random ...
    99+
    2022-06-04
    验证码 代码 图片
  • 使用Java怎么生成一个随机验证码
    这篇文章将为大家详细讲解有关使用Java怎么生成一个随机验证码,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。源代码:RandomGen.java(实现产生验证码功能的类)package ve...
    99+
    2023-05-31
    java ava
  • 使用java编写一个验证码生成功能
    使用java编写一个验证码生成功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。java 验证码的生成实现所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片, 图片里...
    99+
    2023-05-31
    java ava
  • java实现随机验证码图片生成
    本文实例为大家分享了java生成随机验证码图片的具体代码,供大家参考,具体内容如下 1.controller @GetMapping(value = "/getRan...
    99+
    2024-04-02
  • 利用java如何实现一个验证码生成功能
    利用java如何实现一个验证码生成功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、serialVersionUID    private...
    99+
    2023-05-31
    java 验证码 ava
  • Vue实现图片验证码生成
    图片验证码主要用于注册,登录等提交场景中,目的是防止脚本进行批量注册、登录、灌水,相比不带图片验证的安全度有所提高,不过目前也有自动识别图片验证码的程序出现,基本都是付费识别,随之又...
    99+
    2024-04-02
  • PHP怎么生成图片验证码
    本篇内容介绍了“PHP怎么生成图片验证码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!5种PHP生成图片验证码实例,包括数字验证码、数字+字...
    99+
    2023-06-04
  • js如何随机生成一个验证码
    这篇文章给大家分享的是有关js如何随机生成一个验证码的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果:html代码:<p>验证码:</p>  ...
    99+
    2024-04-02
  • Nodejs中使用captchapng模块生成图片验证码
    Nodejs项目,在做图片验证码的时候遇到了难题。Nodejs没有图片库,以后会有,但是现在没有。 网络上搜索一圈,有几个解决方案: 1、采用第三方验证码程序,有的时候,项目可能不允许; 2、使用Java或...
    99+
    2022-06-04
    验证码 模块 图片
  • python生成验证码图片代码分享
    本文实例为大家分享了python生成验证码图片代码,分享给大家供大家参考,具体内容如下 基本上大家使用每一种网络服务都会遇到验证码,一般是网站为了防止恶意注册、发帖而设置的验证手段。其生成原理是将一串随机产...
    99+
    2022-06-04
    验证码 代码 图片
  • java怎么实现随机验证码图片生成
    这篇文章主要介绍“java怎么实现随机验证码图片生成”,在日常操作中,相信很多人在java怎么实现随机验证码图片生成问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java怎么实现随机验证码图片生成”的疑惑有所...
    99+
    2023-06-25
  • python生成图片验证码的方法
    背景 在注册或者登陆场景下,经常会遇到需要输入图片验证码的情况,最经典的就是12306买火车票。图片验证码的破解还是有一定难度的,而且如果配合上时间和次数的验证,可以很大程度上防止模...
    99+
    2024-04-02
  • 利用Java编写一个验证码生成功能
    本篇文章为大家展示了利用Java编写一个验证码生成功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。具体方法如下:package com.SM_test.utils; import java.awt...
    99+
    2023-05-31
    java ava
  • JavaScript如何生成图形验证码
    这篇文章主要介绍JavaScript如何生成图形验证码,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下getGVerify:function (id)  ...
    99+
    2024-04-02
  • Python3 生成一个随机验证码
    '''设计一个八位随机验证码,验证码是由大写字母,小写字母和数字三种字符组成。定义一个范围只有1,2,3的随机数,如果这个随机数是1,则八位验证码的当前位置用大写字母;                            如果这个随机数是...
    99+
    2023-01-31
    验证码
  • java后台验证码如何生成
    这篇文章给大家分享的是有关java后台验证码如何生成的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果图如下:1.适用需求后台生成验证码,用于登陆验证。2. 功能实现所需控件/文件:无(普通标签)3.功能点实现思...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作