Java生成四位数随机验证码

这篇具有很好参考价值的文章主要介绍了Java生成四位数随机验证码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言:

我们生活中登录的时候都要输入验证码,这些验证码是为了增加注册或者登录难度,减少被人用脚本疯狂登录注册导致的一系列危害,减少数据库的一些压力。
毕竟那些用脚本生成的账号都是垃圾账号

本次实践:生成这样的验证码

Java生成四位数随机验证码,java,开发语言
并且附带一些干扰线

项目想法:

我们生成一个验证码有好几个要求

1.验证码必须是随机的,每次都不能重复出现一模一样的
2.验证码得让人有体验感,最起码得看得清,大小要合适
3.验证码初步需要一些干扰线,防止很轻易的就被脚本识别出来。

初步学习先以这些为要求进行实践。

项目思路:

我们要理解这个验证码的生成过程。

1.我们需要有一个画板
2.我们需要一只笔可以在画板上涂鸦
3.我们需要用笔在画板上画字符
4.我们需要调节画板和字符的颜色,及其大小,提升体验感
5.我们需要画出干扰线

项目实践:

1.我们需要一些字母或者数字,这样组成随机的四位验证码

我们可以写一个程序快速生成这样的数组

public class Zifu {
    public static void main(String[] args) {
        for(int i=0; i<26; i++){
            char ch = (char) ('a' + i); // 生成字母
            if (i != 25) {
                System.out.print("\"" + ch + "\", ");
            } else {
                System.out.print("\"" + ch + "\"");
            } 
        }
        for(int i=0; i<10; i++){
            char ch=(char)('0'+i);
            if (i != 9) {
                System.out.print("\"" + ch + "\", ");
            } else {
                System.out.print("\"" + ch + "\"");
            } 
        }
        for(int i=0; i<26; i++){
            char ch = (char) ('A' + i); // 生成字母
            if (i != 25) {
                System.out.print("\"" + ch + "\", ");
            } else {
                System.out.print("\"" + ch + "\"");
            } 
        }
    }
}

输出为:
Java生成四位数随机验证码,java,开发语言

然后我们将其复制粘贴在静态数组里面
Java生成四位数随机验证码,java,开发语言
这样我们就准备好我们所需要的数组了

2.怎样画图

画图的思路是:

1.准备画板
2.准备笔
3.然后笔在画板上画

如何准备画板?
Java生成四位数随机验证码,java,开发语言
先导入相关包,画板有专门的类是BufferedImage
笔相关的包是,Graphics

3.创建画板

创建画板要先实例化一个画板,然后补充宽高和组成

        int height=200;//高
        int width=400;//宽
        int imageType = BufferedImage.TYPE_INT_RGB;//画板的组成,rgb是red,green,blue,红绿蓝组成
        BufferedImage image = new BufferedImage(width,height,imageType);//实例化画板对象,三个参数

Java生成四位数随机验证码,java,开发语言
代码运行后生成的jpg文件
Java生成四位数随机验证码,java,开发语言

4.生成随机验证码

这里需要用到random模块

r是实例化Random的对象,r.newInt(界限),可以帮我们生成0到界限-1之间的随机数值,我们可以通过它去随机选取字符数组的下标

Java生成四位数随机验证码,java,开发语言
生成的效果图为
Java生成四位数随机验证码,java,开发语言

5.生成干扰线

干扰线原理其实与生成字符一样

生成的重要代码是g.drawLine(x1,y1,x2,y2);
意思是两个点(x1,y1),(x2,y2)之间画条直线

Java生成四位数随机验证码,java,开发语言

生成的效果图为:

Java生成四位数随机验证码,java,开发语言

本次项目的小知识点

1.画板有java自带的BufferedImage,我们只需要导包就好了
2.笔有java自带的Graphice,也是只要导包就好了
3.画字符的时候字符的位置以及横坐标偏移,如果不偏移两次画在同一个地方就会覆盖掉
4.字符的颜色,字体可以通过Font去设置
5.最后就是将画出的图生成在本地了

tips:最好的方法就是每做出一步就把图生成在本地查看情况然后根据需求进行调整,我上面的步骤就是一步一步来的。

本次验证码生成的整体代码如下:
文件路径我就删了,需要的朋友们自己补充吧,随便找个空的文件夹然后复制地址就好了

格式是这样的:
Java生成四位数随机验证码,java,开发语言
tips:为什么我用的都是\\,因为如果是单斜杠的话我的vscode会识别为转义字符,所以都用双斜杠了\\

整体代码如下:

import java.awt.Color; // 引入 Color 类,提供系统颜色和关于颜色空间的类。
import java.awt.Font; // 引入 Font 类,支持在AWT的所有渲染环境下的通用文字布局,并为所有给定字符和脚本提供字体处理功能。
import java.awt.Graphics; // 引入 Graphics 类,允许应用程序以协同的方式绘制到屏幕上或者其他任何地方。
import java.awt.image.BufferedImage; // 引入 BufferedImage 类,描述一些整数像素的具有可访问的数据缓冲区的图像。
import java.io.File; // 引入 File 类,它提供了与文件和路径名相关的操作,它具有创建、删除、读取文件等功能。
import java.io.IOException; // 引入 IOException 类,处理输入、输出操作失败或中断的情况(类似于文件未找到等)。
import java.util.Random; // 引入 Random 类,用于生成伪随机数。
import javax.imageio.ImageIO; // 引入 ImageIO 类,用于读取和写入图像格式,如 JPEG、PNG等。

public class checkimage {
    static String[] strs={"a", "b", "c", "d", "e", "f", "g", "h", 
    "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", 
    "u", "v", "w", "x", "y", "z","0", "1", "2", "3", "4", "5", "6", 
    "7", "8", "9","A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", 
    "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
    
    public static void main(String[] args) {
        int height=200;//高
        int width=400;//宽
        int imageType = BufferedImage.TYPE_INT_RGB;//画板的组成,rgb是red,green,blue,红绿蓝组成
        BufferedImage image = new BufferedImage(width,height,imageType);//实例化画板对象,三个参数
        
        Graphics g = image.getGraphics();//实例化了一支笔
        g.setColor(Color.white);//笔的颜色为白色
        g.fillRect(0, 0, width, height);//然后将画板填充为白色,x,y为矩形左上角的坐标
        /*设置画板 */

        Random r=new Random();//实例化一个随机的对象
        int x=25,y=125;//这个是x,y界限
        g.setColor(Color.blue);//让验证码的颜色为蓝色
        g.setFont(new Font("宋体",Font.PLAIN,100));//设置字体,字体为宋体,并且大小为100
        for(int i=0;i<4;i++){//用for循环生成4个随机验证码
            int index=r.nextInt(62);//strs数组总共62个数,所以下标界限是0-61
            String str=strs[index];//随机取一个字符
            g.drawString(str, x, y);//画字符在画板上
            x+=100;//这个移位,不然我第一次在这个位置画A,第二次画B的时候还在这个位置不就覆盖掉了吗,所以要移动位置
        }
        /*画出四位数的验证码 */

        g.setColor(Color.green);//让画笔的颜色为绿色
        for(int i=0;i<10;i++){//生成十条干扰线
            int a=r.nextInt(10);
            int b=r.nextInt(400);
            int c=r.nextInt(10)+380;
            int d=r.nextInt(400);
            g.drawLine(a,b,c,d);//ab是干扰线的左边的横纵坐标,cd是右边的
        }        
        /*画出干扰线 */

        // 尝试写入图像
        try {
            ImageIO.write(image, "jpg", new File("C:\\Users\\Desktop\\项目学习\\myImage.jpg")); //此处应给出具体的文件名
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这是我第一次除了做题之外做出的有用的东西了!!!
虽然都是照着视频学习照搬的,但是也是第一次对做这些有那么一点小感悟和经历了!
文章来源地址https://www.toymoban.com/news/detail-796136.html

到了这里,关于Java生成四位数随机验证码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【论坛java项目】第二章 Spring Boot实践,开发社区登录模块:发送邮件、开发注册功能、会话管理、生成验证码、开发登录、退出功能、

    😀如果对你有帮助的话😊 🌺为博主点个赞吧 👍 👍点赞是对博主最大的鼓励😋 💓爱心发射~💓 bofryuzursekbiab——密码 访问邮箱域名 邮箱端口 账号 密码 协议 详细配置 JavaMailSender 是 Spring Email 的核心组件,负责发送邮件 MimeMessage 用于封装邮件的相关信息 MimeMessageHelper 用

    2024年02月06日
    浏览(57)
  • 【Java】Java如何生成随机数?

    我们在学习 Java 基础时就知道可以生成随机数,可以为我们枯燥的学习增加那么一丢丢的乐趣。本文就来介绍 Java 随机数。 在 Java 中使用 Random 工具类来生成随机数,该类在 java.util 包下,在 JDK1.0 版本就存在了。Random 单词本身就是随机、随意、任意的意思。Random 是一个普通

    2024年02月12日
    浏览(44)
  • java生成随机数

       bound 必须是正数。 以下代码生成的是 0 到 30 的随机数。 生成区间的随机数:[最小值,最大值] 学的不是技术,更是梦想!!!

    2024年02月07日
    浏览(66)
  • java生成指定区间的随机数

    随机数 例:编写程序随机生成k个位于[m,n]区间的整数,对这k个数据进行升序排序并输出。 在使用Java生成随机数的时候,有一些注意事项需要注意,下面是一些常见的问题和解决方案: 1. 生成随机数时,应该使用Java的 Random 类,而不是 Math.random() 方法。原因是, Math.rando

    2024年02月10日
    浏览(42)
  • java生成随机字符串的方法

      今天我们来学习下随机数的生成,随机数就是不确定的数,它可以是任意一个整数或者字符串。下面就让我们一起来学习下随机字符串的生成吧。 首先,我们需要先定义一个名为 str的数组,并将它作为输入文件。 1、使用 Java中的 str作为输入文件。 2、然后将这个字符串复

    2024年02月16日
    浏览(46)
  • Java jdk8生成随机数

    目录 Jdk8生成随机数 Jdk8以前 在Java 8中,可以使用ThreadLocalRandom类来生成随机数。相比于早期的Random类,ThreadLocalRandom类可以更好地支持多线程应用,性能也更优。下面是使用ThreadLocalRandom类生成随机数的几种方法: 生成一个0到n之间的随机整数(不包含n): 生成一个范围在

    2024年02月12日
    浏览(41)
  • 后台生成随机验证码验证登录

     web get请求获取图片 后台代码: 登录验证:  

    2024年01月16日
    浏览(45)
  • Java如何生成随机数?要不要了解一下!

    我们在学习 Java 基础时就知道可以生成随机数,可以为我们枯燥的学习增加那么一丢丢的乐趣。本文就来介绍 Java 随机数。 在 Java 中使用 Random 工具类来生成随机数,该类在 java.util 包下,在 JDK1.0 版本就存在了。 Random 单词本身就是随机、随意、任意的意思。 Random 是一个普

    2024年02月06日
    浏览(52)
  • java生成4位不重复的随机数

    2024年02月12日
    浏览(43)
  • Java随机生成字符串的4种方式

    java.util.UUID 类可用于生成UUID, 它的static randomUUID方法返回一个32个字符的字符串。 注意randomUUID方法生成的字符串包含“-”。上面的示例通过使用空字符串替换了。 以上程序输出为: 下面的算法可以使用这种方法生成一个固定长度的随机字符串。 初始化一个空字符串以保存结

    2024年02月08日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包