图片验证码概述及实现步骤

发布时间 - 2026-01-10 22:24:24    点击率:

一. 图片验证码概述:

很多网站都有该实现

作用:

为了提高系统的安全性

有了验证码,我们就可以要求用户在输入用户名,密码等信息后,同时输入图片上的文字,用户提交后,系统会首先从session中提取刚刚生成的验证码,并和用户输入的验证码进行比较,如果比较相等,表示用户是从登录界面登录过来的,否则,表示用户是非法的,我们使用验证码,是确保系统的使用必须要进行登录成功之后,才能使用,避免用户直接在地址栏中输入要访问的页面。

也就是说,使用验证码,就强制用户用户必须先从登录界面登录

. 验证实现方式

用到两个关键类,这两个类跟图片的输出是有关系的

BufferedImage im = new BufferedImage(60,20,BufferedImage.TYPE_INT_RGB);
//第一个参数im表示一个图片对象
//JPG表示图片输出类型
//response.getOutputStream()代表一个响应的输出流,也就是说,你访问这个servlet.该servlet就会图片显示给你
ImageIO.write(im, "JPG",response.getOutputStream());

. 实现步骤

1.使用BufferedImage产生一个图片,然后使用ImageIO输出,并指定为JPG格式

BufferedImage im = new BufferedImage(60,20,BufferedImage.TYPE_INT_RGB);
//第一个参数im表示一个图片对象
//JPG表示图片输出类型
//response.getOutputStream()代表一个响应的输出流,也就是说,你访问这个servlet.该servlet就会图片显示给你
ImageIO.write(im, "JPG",response.getOutputStream());

2.获取图片绘图对象

Graphics g = im.getGraphics();

3.填充绘图区域

Random rm = new Random();
Color c = new Color(rm.nextInt(255),rm.nextInt(255),rm.nextInt(255));
g.setColor(c);
//填充整个图片的颜色
g.fillRect(0, 0, 60, 20);

4.向图片中输出数字

g.setColor(new Color(rm.nextInt(255),rm.nextInt(255),rm.nextInt(255)));
g.setFont(new Font("华文隶书",Font.BOLD|Font.ITALIC,28));
g.drawString("8", 1, 18);

5.随机4位数字

//随机产生4位数字
for(int i=0;i<4;i++){
 g.setColor(new Color(rm.nextInt(255),rm.nextInt(255),rm.nextInt(255)));
 g.setFont(new Font("Gungsuh",Font.BOLD|Font.ITALIC,22));
 g.drawString(""+rm.nextInt(10), (i*15)+2, 18);
}

6.随机产生中文

String str = "胸有激雷而面如平湖者可拜上将军";
for(int i=0;i<4;i++){
 g.setColor(new Color(rm.nextInt(255),rm.nextInt(255),rm.nextInt(255)));
 g.setFont(new Font("Gungsuh",Font.BOLD|Font.ITALIC,15));
 g.drawString(""+str.charAt(rm.nextInt(str.length())), (i*15)+2, 18);
}

7.在页面中如何来引入该验证码:

<img alt="验证码" src="/ImageServlet">

8.保存数字,以便进行登录比较

//将得到的四个数字保存到session中,以便当用户登录的时候,用来比较
request.getSession().setAttribute("piccode", sbf.toString());

9.登录验证

首先,需要验证该用户在数据库中是否存在,如果存在,还需要验证输入的验证码是否一致.

验证成功后,需要转发到相关的操作页面.

代码实例:

boolean b_exist = login.validate(username,passwd);
//如果该用户存在
if(b_exist){
 String pic = ""+request.getSession().getAttribute("piccode");
 //比较验证码
 if(!pic.equals("") && pic.equals(code)){
 //向session中存入用户信息,以供其他中来使用
 request.getSession().setAttribute("username", username);
 
 response.sendRedirect("index.jsp");
 }
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# 图片  # 验证码  # Java实现图片验证码具体代码  # java图片验证码生成教程详解  # java web中图片验证码功能的简单实现方法  # Javaweb开发中通过Servlet生成验证码图片  # java生成图片验证码实例代码  # Java仿12306图片验证码  # Java实现验证码具体代码(图片、汉字)  # java图片验证码实现示例分享  # java生成图片验证码示例程序  # java 图片验证码的实现代码  # 就会  # 给你  # 第一个  # 也就是说  # 该用户  # 平湖  # 都有  # 是有  # 是从  # 这两个  # 还需要  # 输入用户名  # 中来  # 用户登录  # 数据库中  # 必须先  # 以供  # 为了提高  # 是否存在 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何彻底删除建站之星生成的Banner?  js实现点击每个li节点,都弹出其文本值及修改  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  浅谈Javascript中的Label语句  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  如何快速查询域名建站关键信息?  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  Laravel如何自定义分页视图?(Pagination示例)  Python文件异常处理策略_健壮性说明【指导】  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  微信小程序 五星评分(包括半颗星评分)实例代码  如何快速重置建站主机并恢复默认配置?  Laravel定时任务怎么设置_Laravel Crontab调度器配置  实现点击下箭头变上箭头来回切换的两种方法【推荐】  济南网站建设制作公司,室内设计网站一般都有哪些功能?  如何在宝塔面板创建新站点?  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  Bootstrap整体框架之CSS12栅格系统  Laravel如何处理文件下载请求?(Response示例)  北京网站制作的公司有哪些,北京白云观官方网站?  JS弹性运动实现方法分析  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  黑客如何利用漏洞与弱口令入侵网站服务器?  如何在IIS7上新建站点并设置安全权限?  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  太平洋网站制作公司,网络用语太平洋是什么意思?  如何在万网开始建站?分步指南解析  如何用PHP快速搭建高效网站?分步指南  Laravel Fortify是什么,和Jetstream有什么关系  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  利用python获取某年中每个月的第一天和最后一天  简历没回改:利用AI润色让你的文字更专业  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  Laravel如何使用Telescope进行调试?(安装和使用教程)  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  Laravel如何实现本地化和多语言支持?(i18n教程)  如何在阿里云ECS服务器部署织梦CMS网站?  如何用景安虚拟主机手机版绑定域名建站?  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  如何在自有机房高效搭建专业网站?