使用Java语言实现图片验证码的生成,并实现验证码验证操作。
package com.m.test5.user.controller;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
/**
* 生成验证码
* 小备注:
* 属性私有化,行为公开化。
* ctrl+shift+x: 转大写/小写.
* **/
public class Code {
//声明验证码图片的宽度和高度
private static final int W = 100;
private static final int H = 40;
//验证码生成库
private static final String CODE = "abcdefghijklmABCDEFGHIJKLM0123456789";
//验证码的字符数量
private static final int CODE_COUNT = 4;
//干扰线的数量
private static final int LINE_COUNT = 4;
//创建一个随机数对象
Random ran = new Random();
//获取验证码的StringBuffer对象,用于最后的验证。
static StringBuffer str = new StringBuffer("");
//绘制验证码图片的方法
public void getCode() {
//生成验证码图片
BufferedImage img = new BufferedImage(W,H,BufferedImage.TYPE_INT_RGB);
//获取画笔
Graphics g = img.getGraphics();
//设置画笔颜色
g.setColor(getColor()); //背景色
//设置 填充可绘制的区域---坐标(0,0) 宽高:W、H
g.fillRect(0, 0, W, H);
//创建字体对象
Font font = new Font("黑体",Font.BOLD,25);
//设置字体
g.setFont(font);
//循环结构
for(int i = 0;i<CODE_COUNT;i++) { //写里面的字的颜色
//再设置画笔颜色
g.setColor(getColor());
//从仓库中获取验证码字符
char c = getChar();
//得到每一个字符
str.append(c);
//绘制到图像中y
g.drawString(c+"", i*20+10, 25); //25 :同一个水平线上
}
//绘制干扰线
for(int i =0;i<LINE_COUNT;i++) {
//设置画笔颜色
g.setColor(getColor());
//两点确定一条线
int xStart = ran.nextInt(W+1);
int yStart = ran.nextInt(H+1);
int xEnd = ran.nextInt(W+1);
int yEnd = ran.nextInt(H+1);
//绘制线条
g.drawLine(xStart, yStart, xEnd, yEnd);
}
//画噪点
int total = (int)(W*H*0.02);
for(int i = 0;i<total;i++) {
//设置画笔颜色
g.setColor(getColor());
//两点确定一条线
int x = ran.nextInt(W);
int y = ran.nextInt(H);
//绘制线条
img.setRGB(x, y, getColor().getRGB());//数据下标越界
}
//通过IO流,将图片输出到指定位置
try {
ImageIO.write(img, "jpg", new FileOutputStream("code.jpg"));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//从仓库中获取验证码字符的方法
public char getChar() {
//从仓库中随机取值
return CODE.charAt(ran.nextInt(36));//[0,36)
}
//获取颜色的方法
public Color getColor() {
return new Color(ran.nextInt(256),ran.nextInt(256),ran.nextInt(256)); //[0,256)
}
public static void main(String[] args) {
new Code().getCode();
System.out.println("输出成功");
System.out.println("生成的验证码是:"+str);
if("".equals(str)) {
System.out.println("验证成功!");
}else{
System.out.println("验证失败!");
}
}
}
小遗憾:没有在页面上实现。
参考视频(B站):Java周哥 Java实现网站必备验证码图片_哔哩哔哩_bilibili