生成一个随机的验证码,判断输入是否正确。
import javax.imageio.ImageIO; import javax.swing.*; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Random; /** * @author: 13667 * @date: 2020/10/19 10:28 * @description: 生成一个随机的验证码 */ public class RandomCode { public static void main(String[] args) throws IOException { RandomCode rc = new RandomCode(); boolean isFlag = true; while (isFlag){ try { isFlag = rc.randomImgs(); }catch (RuntimeException e){ System.out.println(e.getMessage()); } } } /** * description 获取一个随机数 * author chen * updateTime 2020/10/19 10:30 * * return: 返回一个随机数0-val */ public int randomNum(int val){ Random random = new Random(); int num = random.nextInt(val); return num; } /** * description 生成一个随机的图片验证码 * author chen * updateTime 2020/10/19 11:20 * * return: false输入正确 错误时抛出一个异常 */ //A-z 65 - 90 public boolean randomImgs() throws IOException { //生成3组随机字母 + 随机数 StringBuffer sb = new StringBuffer(); for (int i = 0; i < 3; i++) { sb.append((char)( this.randomNum(25) + 60)); sb.append(this.randomNum(9)); } //保存生成的随机字母和随机数 String random = sb.toString(); File file = new File(System.currentTimeMillis() + ".jpg"); BufferedImage bi = new BufferedImage(200,80,BufferedImage.TYPE_INT_RGB); Graphics graphics = bi.getGraphics(); //增加干扰线条 for (int i = 0; i < 10; i++) { graphics.setColor(new Color(this.randomNum(255),this.randomNum(255),this.randomNum(255))); graphics.drawLine(this.randomNum(10),this.randomNum(80),(this.randomNum(10) + 190),this.randomNum(80)); } //写入文本 Font f = new Font("宋体",Font.BOLD,40); graphics.setFont(f); graphics.drawString(random,50,50); //增加干扰线条 for (int i = 0; i < 10; i++) { graphics.setColor(new Color(this.randomNum(255),this.randomNum(255),this.randomNum(255))); graphics.drawLine(this.randomNum(10),this.randomNum(80),(this.randomNum(10) + 190),this.randomNum(80)); } ImageIO.write(bi,"jpg",file); ImageIcon ii = new ImageIcon(file.getAbsolutePath()); //从弹窗获取到输入验证码的值 Object result = JOptionPane.showInputDialog(null,"请输入左边图片验证码:","验证",0,ii,null,""); //将获取到的值转换成String类型,使得输入不区分大小写 String str = String.valueOf(result); if(!str.toUpperCase().equals(random)){ file.delete(); throw new RuntimeException("验证码输入错误!请重新输入!"); } file.delete(); return false; } }