Java实战之用Spring开发条形码和验证码

 更新时间:2021年04月29日 09:02:32   作者:风轻仰  
这篇文章主要介绍了Java实战之用Spring开发条形码和验证码,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下

一、条形码

代码如下:

import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.Random;

public class Text extends JFrame {
    private static final int WIDTH=300;//窗口的宽度
    private static final int HEIGHT=400;//窗口的高度
    private static final int LINES=120;//内部的线条数量
    private static final int SPACE=10;//线条与线条之间的间距
    private static JFrame jFrame=null;

    public static void main(String[] args) {
        initialize();
    }

    private static void initialize(){//初始化窗口
        jFrame=new JFrame("条形码");
        jFrame.setSize(WIDTH,HEIGHT);
        jFrame.setLayout(null);
        JLabel jLabel=new JLabel();
        jLabel.setBounds(0,0,WIDTH,80);
        jLabel.setIcon(new ImageIcon(setCode()));
        jFrame.add(jLabel);
        jFrame.setVisible(true);
        jFrame.setLocationRelativeTo(null);
        jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    private static BufferedImage setCode() {
        Random random = new Random();
        BufferedImage bufferedImage = new BufferedImage(WIDTH, 80, BufferedImage.TYPE_INT_RGB);//创建一个图片画板
        Graphics g = bufferedImage.getGraphics();//得到画笔
        g.setColor(Color.white);//设置画笔颜色
        g.fillRect(0, 0, WIDTH, 80);//规定画笔的一个范围
        g.setColor(Color.black);//这个是设置线条的颜色
        for(int i=0;i<LINES;i++){
            int row=random.nextInt(WIDTH)+SPACE;
            g.drawLine(row,0,row,HEIGHT);
        }
        return bufferedImage;
    }
}

效果如下:

这里是引用

二、验证码

代码如下:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.util.Random;

public class Text extends JFrame{
    private final static char[] words=("1234567890" +
            "abcdefghijklmnopqrstuvwxyz" +
            "ABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray();

    private final static int WORDLENGTH=4;
    private final static int WIDTH=200;
    private final static int HEIGHT=100;
    private final static int STAR=200;
    private static Text t=null;
    private static TextField textFile=null;
    private static Object[] obj=null;

    private static Object[] drawCode(){
        BufferedImage bufferedImage=new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
        Graphics g=bufferedImage.getGraphics();
        char[] selectWord=new char[4];
        g.setColor(Color.LIGHT_GRAY);
        g.fillRect(0,0,WIDTH,HEIGHT);
        Random random=new Random();
        for(int i=0;i<WORDLENGTH;i++){
            int n=random.nextInt(words.length);
            selectWord[i]=words[i];
            g.setFont(new Font("微软雅黑",0,random.nextInt(20)+40));
            g.setColor(setRandomColor());
            g.drawString(words[n]+"",i*WIDTH/WORDLENGTH,HEIGHT/2+10);
        }
        for(int i=0;i<STAR;i++){
            g.setColor(setRandomColor());
            g.setFont(new Font("楷书",0,40));
            g.drawOval(random.nextInt(WIDTH),random.nextInt(HEIGHT),3, 3);
        }
        return new Object[]{selectWord,bufferedImage};
    }

    private static Color setRandomColor(){
        Random colorRandom=new Random();
        return new Color(colorRandom.nextInt(256),colorRandom.nextInt(256),colorRandom.nextInt(256));
    }


    public static void main(String[] args) {
        t=new Text();
        t.setLocationRelativeTo(null);
        t.setSize(WIDTH,200);
        t.setLayout(null);
        t.add(setLabel());
        t.add(setButton());
        t.add(setTextField());
        t.setVisible(true);
        t.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
    
    private static JLabel setLabel(){
        JLabel jLabel=new JLabel();
        obj=drawCode();
        jLabel.setIcon(new ImageIcon((BufferedImage)obj[1]));
        jLabel.setBounds(0,0,WIDTH,HEIGHT);
        jLabel.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                jLabel.setIcon(new ImageIcon((BufferedImage)drawCode()[1]));
            }
        });
        return jLabel;
    }

    private static TextField setTextField(){
        textFile=new TextField();
        textFile.setFont(new Font("华文行楷",0,20));
        textFile.setBounds(5,120, 100,30);
        return textFile;
    }

    private static JButton setButton(){
        JButton jButton=new JButton("检测");
        jButton.setBounds(110,120, 70,30);
        jButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println(textFile.getText().equals(obj[0]));
            }
        });
        return jButton;
    }
}

效果如下:

在这里插入图片描述

验证码这里是因为没有设置好字符编码的原因,让中文字符无法在窗口内不显示

验证码就比条形码难以点点,但是基本的编写思想都是差不多的,
但最难的还是在二维码上,编写二维码就需要要求编写者的算法能力足够的扎实,而且还要有足够丰富的Java功底

到此这篇关于Java实战之用Spring开发条形码和验证码的文章就介绍到这了,更多相关Java Spring开发条形码和验证码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java仿windows记事本小程序

    java仿windows记事本小程序

    这篇文章主要为大家详细介绍了java仿windows记事本小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • spring cloud gateway转发服务报错的解决

    spring cloud gateway转发服务报错的解决

    这篇文章主要介绍了spring cloud gateway转发服务报错的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java消息队列RabbitMQ之消息回调详解

    Java消息队列RabbitMQ之消息回调详解

    这篇文章主要介绍了Java消息队列RabbitMQ之消息回调详解,消息回调,其实就是消息确认(生产者推送消息成功,消费者接收消息成功)  , 对于程序来说,发送者没法确认是否发送成功,需要的朋友可以参考下
    2023-07-07
  • Spark学习笔记(一)Spark初识【特性、组成、应用】

    Spark学习笔记(一)Spark初识【特性、组成、应用】

    这篇文章主要介绍了Spark学习笔记之Spark初识,简单分析了spark四大特性、基本组成、应用场景,需要的朋友可以参考下
    2020-02-02
  • 深入理解Java线程池从设计思想到源码解读

    深入理解Java线程池从设计思想到源码解读

    这篇文章主要介绍了深入理解Java线程池从设计思想到源码解读,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • 解决OkHttp接收gzip压缩数据返回乱码问题

    解决OkHttp接收gzip压缩数据返回乱码问题

    这篇文章主要介绍了解决OkHttp接收gzip压缩数据返回乱码问题,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 一文详解Java中Stream流的使用

    一文详解Java中Stream流的使用

    JDK8新增了Stream(流操作)处理集合的数据,可执行查找、过滤和映射数据等操作.本文将通过一些实例介绍stream流的使用,需要的可以参考一下
    2022-05-05
  • Java中为什么不同的返回类型不算方法重载

    Java中为什么不同的返回类型不算方法重载

    这篇文章主要介绍了Java中为什么不同的返回类型不算方法重载,方法重载是指在同一个类中,定义了多个同名方法,但每个方法的参数类型或者是参数个数不同就是方法重载,下文详细介绍,需要的小伙伴可以参考一下
    2022-05-05
  • java中的DateTime的具体使用

    java中的DateTime的具体使用

    本文主要介绍了java中的DateTime的具体使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 解析Java的Spring框架的基本结构

    解析Java的Spring框架的基本结构

    这篇文章主要介绍了Java的Spring框架的基本结构,作者从Spring的设计角度触发解析其基础的架构内容,需要的朋友可以参考下
    2016-03-03

最新评论