21xrx.com
2024-11-22 12:43:07 Friday
登录
文章检索 我的文章 写文章
Java实现随机验证码生成及验证方法
2023-06-18 13:24:57 深夜i     --     --
Java 验证码 随机

在许多网站、应用程序以及安全系统中,都用到了验证码的设计。验证码是指将数字、字母等规定的数据抽象成图片形式,在用户登录时要求输入该图片中的数据,从而保证登陆的安全性。本文将介绍如何使用Java生成验证码及其验证方法。

生成验证码的步骤如下:

1. 首先,使用Java的Graphics类创建一个画布,设置画布大小和背景颜色。

2. 产生一个随机的四位字符串,该字符串由大小写字母和数字组成,并利用字体库绘制每一个字符。

3. 为了防止机器暴力破解,应该为验证码增加干扰线和噪声点,这些干扰线和噪声点应该在背景中随机生成。

下面是Java生成验证码的代码示例:


import java.awt.*;

import java.awt.image.BufferedImage;

import java.util.Random;

public class VerifyCode {

 public static final int VERIFY_CODE_WIDTH = 80;

 public static final int VERIFY_CODE_HEIGHT = 28;

 public static final int VERIFY_CODE_LENGTH = 4;

 public static String generateVerifyCode() {

  Random random = new Random();

  String verifyCode = "";

  for (int i = 0; i < VERIFY_CODE_LENGTH; i++) {

   int randInt = random.nextInt(36);

   if (randInt < 10) {

    verifyCode += randInt;

   } else {

    verifyCode += (char) (randInt - 10 + 'a');

   }

  }

  return verifyCode;

 }

 public static BufferedImage generateVerifyImage(String verifyCode) {

  BufferedImage image = new BufferedImage(VERIFY_CODE_WIDTH, VERIFY_CODE_HEIGHT, BufferedImage.TYPE_INT_RGB);

  Graphics2D graphics = (Graphics2D) image.getGraphics();

  graphics.setColor(Color.WHITE);

  graphics.fillRect(0, 0, VERIFY_CODE_WIDTH, VERIFY_CODE_HEIGHT);

  graphics.setFont(new Font("Arial", Font.BOLD, 18));

  Random random = new Random();

  for (int i = 0; i < VERIFY_CODE_LENGTH; i++) {

   graphics.setColor(new Color(random.nextInt(100), random.nextInt(100), random.nextInt(100)));

   graphics.drawString(String.valueOf(verifyCode.charAt(i)), i*20+5, 20);

  }

  for (int i = 0; i < 5; i++) {

   graphics.setColor(new Color(random.nextInt(100), random.nextInt(100), random.nextInt(100)));

   graphics.drawLine(random.nextInt(VERIFY_CODE_WIDTH), random.nextInt(VERIFY_CODE_HEIGHT),

     random.nextInt(VERIFY_CODE_WIDTH), random.nextInt(VERIFY_CODE_HEIGHT));

  }

  return image;

 }

 public static boolean validate(String inputVerifyCode, String generateVerifyCode) {

  if (inputVerifyCode == null || inputVerifyCode.length() != VERIFY_CODE_LENGTH)

   return false;

  

  return inputVerifyCode.equals(generateVerifyCode);

 }

 public static void main(String[] args) {

  String verifyCode = generateVerifyCode();

  System.out.println("验证码:" + verifyCode);

  BufferedImage image = generateVerifyImage(verifyCode);

  System.out.println("验证结果:" + validate("1234", verifyCode));

 }

}

通过运行上述代码,我们可以看到在控制台输出了验证码和验证结果。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复