红阳建设集团网站,江苏省建设厅网站施工员证查询,网络设计与实施课程设计,漳州北京网站建设公司哪家好引言#xff1a;
我们生活中登录的时候都要输入验证码#xff0c;这些验证码是为了增加注册或者登录难度#xff0c;减少被人用脚本疯狂登录注册导致的一系列危害#xff0c;减少数据库的一些压力。 毕竟那些用脚本生成的账号都是垃圾账号
本次实践#xff1a;生成这样的…引言
我们生活中登录的时候都要输入验证码这些验证码是为了增加注册或者登录难度减少被人用脚本疯狂登录注册导致的一系列危害减少数据库的一些压力。 毕竟那些用脚本生成的账号都是垃圾账号
本次实践生成这样的验证码 并且附带一些干扰线 项目想法
我们生成一个验证码有好几个要求
1.验证码必须是随机的每次都不能重复出现一模一样的 2.验证码得让人有体验感最起码得看得清大小要合适 3.验证码初步需要一些干扰线防止很轻易的就被脚本识别出来。
初步学习先以这些为要求进行实践。 项目思路
我们要理解这个验证码的生成过程。
1.我们需要有一个画板 2.我们需要一只笔可以在画板上涂鸦 3.我们需要用笔在画板上画字符 4.我们需要调节画板和字符的颜色及其大小提升体验感 5.我们需要画出干扰线 项目实践
1.我们需要一些字母或者数字这样组成随机的四位验证码
我们可以写一个程序快速生成这样的数组
public class Zifu {public static void main(String[] args) {for(int i0; i26; i){char ch (char) (a i); // 生成字母if (i ! 25) {System.out.print(\ ch \, );} else {System.out.print(\ ch \);} }for(int i0; i10; i){char ch(char)(0i);if (i ! 9) {System.out.print(\ ch \, );} else {System.out.print(\ ch \);} }for(int i0; i26; i){char ch (char) (A i); // 生成字母if (i ! 25) {System.out.print(\ ch \, );} else {System.out.print(\ ch \);} }}
}
输出为
然后我们将其复制粘贴在静态数组里面 这样我们就准备好我们所需要的数组了
2.怎样画图
画图的思路是
1.准备画板 2.准备笔 3.然后笔在画板上画
如何准备画板 先导入相关包画板有专门的类是BufferedImage 笔相关的包是Graphics
3.创建画板
创建画板要先实例化一个画板然后补充宽高和组成 int height200;//高int width400;//宽int imageType BufferedImage.TYPE_INT_RGB;//画板的组成rgb是redgreenblue红绿蓝组成BufferedImage image new BufferedImage(width,height,imageType);//实例化画板对象三个参数 代码运行后生成的jpg文件
4.生成随机验证码
这里需要用到random模块
r是实例化Random的对象r.newInt(界限)可以帮我们生成0到界限-1之间的随机数值我们可以通过它去随机选取字符数组的下标 生成的效果图为
5.生成干扰线
干扰线原理其实与生成字符一样
生成的重要代码是g.drawLine(x1,y1,x2,y2); 意思是两个点(x1,y1),(x2,y2)之间画条直线 生成的效果图为 本次项目的小知识点
1.画板有java自带的BufferedImage我们只需要导包就好了 2.笔有java自带的Graphice,也是只要导包就好了 3.画字符的时候字符的位置以及横坐标偏移如果不偏移两次画在同一个地方就会覆盖掉 4.字符的颜色字体可以通过Font去设置 5.最后就是将画出的图生成在本地了
tips最好的方法就是每做出一步就把图生成在本地查看情况然后根据需求进行调整我上面的步骤就是一步一步来的。
本次验证码生成的整体代码如下 文件路径我就删了需要的朋友们自己补充吧随便找个空的文件夹然后复制地址就好了
格式是这样的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 height200;//高int width400;//宽int imageType BufferedImage.TYPE_INT_RGB;//画板的组成rgb是redgreenblue红绿蓝组成BufferedImage image new BufferedImage(width,height,imageType);//实例化画板对象三个参数Graphics g image.getGraphics();//实例化了一支笔g.setColor(Color.white);//笔的颜色为白色g.fillRect(0, 0, width, height);//然后将画板填充为白色xy为矩形左上角的坐标/*设置画板 */Random rnew Random();//实例化一个随机的对象int x25,y125;//这个是xy界限g.setColor(Color.blue);//让验证码的颜色为蓝色g.setFont(new Font(宋体,Font.PLAIN,100));//设置字体字体为宋体并且大小为100for(int i0;i4;i){//用for循环生成4个随机验证码int indexr.nextInt(62);//strs数组总共62个数所以下标界限是0-61String strstrs[index];//随机取一个字符g.drawString(str, x, y);//画字符在画板上x100;//这个移位不然我第一次在这个位置画A第二次画B的时候还在这个位置不就覆盖掉了吗所以要移动位置}/*画出四位数的验证码 */g.setColor(Color.green);//让画笔的颜色为绿色for(int i0;i10;i){//生成十条干扰线int ar.nextInt(10);int br.nextInt(400);int cr.nextInt(10)380;int dr.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();}}
} 这是我第一次除了做题之外做出的有用的东西了 虽然都是照着视频学习照搬的但是也是第一次对做这些有那么一点小感悟和经历了