我们总是在登录微信,QQ或者其他一些网页的时候,都会出现一个验证码框,他们有的是数字的,有的是文字的,有的是混合的,各种各样的。

很好奇是怎么实现的。带着这样的疑问。


目录

1.随机数字字母组合的验证码

2.算数表达式验证码

3.使用框架进行实现验证码

4.案例学习:


1.随机数字字母组合的验证码

首先创建一个javaWeb的工程

然后在之前创建的随机数方法里,进行循环答应,输出4个随机数

 

接下来我们需要定义图片的宽度和高度

BufferedImage对象是图片的缓冲流,用于GRB绘制对象,在内存操作过程中,将内存操作的每一个步骤绘制到内存里面存储起来。将缓冲流进行输出。产生一张图片。

        //2.定义图片的高度和宽度int width =120;int height =25;//建立bufferedImage对象,制定图片的长度和宽度以及色彩BufferedImage bi =new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);//3.获取Graphics2D 绘制对象,开始绘制验证码Graphics2D g =bi.createGraphics();//4.设置文字的子图验证和大小Font font =new Font("微软雅黑", Font.PLAIN, 20);//5.设置字体的颜色Color color =new Color(0,0,0);//将颜色和字体放入g.setFont(font);g.setColor(color);g.setBackground(new Color(226,226,226));//背景颜色//开始绘制对象g.clearRect(0, 0, width, height);//绘制形状,获取距形对象FontRenderContext context =g.getFontRenderContext();//文字读取上下文Rectangle2D bounds =font.getStringBounds(code, context);//将生成的验证码放入//计算文字的坐标和间距double x =(width -bounds.getWidth())/2;double y =(height -bounds.getHeight())/2;double ascent =bounds.getY();double baseY =y -ascent;g.drawString(code, (int)x, (int)y);//结束配置g.dispose();//将图片保存到制定地方,输出try {ImageIO.write(bi,"jpg",response.getOutputStream());//刷新响应流response.flushBuffer();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return code;//用于验证码的对比和存储

做完这些后,我们需要定义一个code.jsp页面

<%@ page import="com.kilig.code.CaptcahCode" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%//1:清空浏览器缓存,目的是为了清空浏览器的缓存,因为浏览器//会对网站的资源文件和图像进行记忆存储,如果被浏览器加载过的图片就记忆起来,记忆以后//文件就不会和服务器在交互,如果我们验证不清空的话可能会造成一个问题就是:验证刷新以后没有效果。response.setHeader("pragma","no-cache");response.setHeader("cache-control","no-cache");response.setHeader("expires","0");//2:调用编写的生成验证码的工具String code = CaptcahCode.drawImage(response);session.setAttribute("code",code);//3:如何解决getOutputStream异常问题out.clear();out = pageContext.pushBody();
%>

然后在编制输出页面

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Java Verification Code</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">
</head>
<body><img src="code.jsp" alt="" id="code"><a href="javascript:void();" onclick="changeCode()">看不清,点我</a><script>function changeCode(){document.getElementById("code").src ="code.jsp?d="+new Date().getTime();}</script>
</body>
</html>

运行看效果:(每次刷新都不一样)

2.算数表达式验证码

通过观察算数表达式的验证码图片我们得出:

  • 随机数
  • 背景颜色
  • 随机颜色
public static String drawImageVerificate(HttpServletResponse response) throws IOException {//定义验证码的宽度和高度int width =100, height =30;//在内存中创建图片BufferedImage image =new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB);//创建图片的上下文Graphics2D g =image.createGraphics();//创建随机对象,此随机对象主要用于算数表达式的数字Random random =new Random();//设置背景g.setColor(getRandomColor(240,250));//设置字体g.setFont(new Font("微软雅黑", Font.PLAIN,22));//开始绘制g.fillRect(0,0,width,height);//干扰线的绘制 ,绘制线条到图片中g.setColor(getRandomColor(180,230));for (int i = 0; i <100 ; i++) {int x =random.nextInt(width);int y =random.nextInt(height);int x1 =random.nextInt(60);int y1 =random.nextInt(60);g.drawLine(x, y,x1,y1);}//开始对算数验证码表达式进行拼接int num1 =(int)(Math.random()*10+1);int num2 =(int)(Math.random()*10+1);int symbel =random.nextInt(3); //定义符号,产生一个[0,2]之间的随机整数//记录符号String symbelstr=null;int result =0;switch (symbel){case 0 : symbelstr ="+";result =num1+num2; break;case 1 : symbelstr ="-";result =num1-num2; break;case 2 : symbelstr ="*";result =num1*num2; break;}//计算表达式String calc =num1 + " "+ symbelstr +" "+ num2 +"=?";//设置随机颜色g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//绘制表达式g.drawString(calc, 5, 25);//结束绘制g.dispose();try{//输出图片到页面ImageIO.write(image,"JPEG",response.getOutputStream());return String.valueOf(result);}catch (Exception ex){ex.printStackTrace();return null;}//return null;}

3.使用框架进行实现验证码

kcaptcha实现技术

Java怎样实现验证码?相关推荐

  1. java登录的 验证码_java登录验证码

    一.创建web项目 二.生成验证码 创建VcodeObject.java,存储验证码与图片 package com.demo.vcode; import java.io.InputStream; pu ...

  2. java 生成校验验证码_java 验证码生成与校验

    java绘图相关类 验证码工具类 package dt2008.util; import javax.imageio.ImageIO; import javax.servlet.http.HttpSe ...

  3. Java发送邮箱验证码、session校验功能

    本篇主要描述"发送邮箱验证码.session校验"相关前(htmljs)后(java)台代码,业务逻辑示例,闲话少诉,直接上代码. 1.引入的jar包是mail-1.4.jar 2 ...

  4. java短信验证码实现_社交APP开发短信验证是通过什么技术实现

    我们已经习惯通过手机APP来解决我们生活中的一些问题,社交APP用来聊天交友,购物APP用来购买生活所需用品,游戏APP用来消遣娱乐,移动互联网行业正在飞速发展. 不难发现我们手机里面的各种APP都有 ...

  5. java实现滑动验证码

    功能:java实现滑动验证码 项目是采用springboot,maven 开发工具:采用idea 1.效果演示: 2.后端代码: 控制层: @Controller public class Slide ...

  6. java 验证码 字母_使用java生成字母验证码

    本文实例为大家分享了java生成字母验证码的具体代码,供大家参考,具体内容如下 import java.awt.BasicStroke; import java.awt.Color; import j ...

  7. 腾讯云短信服务实现 Java 发送手机验证码(SpringBoot+Redis 实现)

    文章目录 腾讯云短信服务实现 Java 发送手机验证码(SpringBoot+Redis 实现) 1.打开腾讯云短信服务 2.创建短信签名 3.创建短信正文模板 4.等待全部审核完毕即可 5.发送短信 ...

  8. 关于java+selenium识别验证码的问题

    ---------## (关于java+selenium识别验证码的问题) hahahahahahahahahahahahahaha~The first time you write a blog, ...

  9. java ocr 验证码_Ocrking图片识别之Java实现本地验证码的识别 | 学步园

    本实例代码为Java实现本地验证码的识别 依赖库为 httpclient-4.2 使用最新的库 需要修改部分代码 Author: niostars@gmail.com //构造一个httpclient ...

  10. Ocrking图片识别之Java实现本地验证码的识别

    最近一个项目需要用到验证码的识别,网上找到了Ocrking的识别平台,就拿来使用一下.平台为Java一下是实现方式: 转载请写明出处: 本实例代码为Java实现本地验证码的识别 依赖库为 httpcl ...

最新文章

  1. 【学术相关】科技论文写作:grammerly润色工具
  2. maven插件编写_编写Maven插件的提示
  3. python 角点检测_opencv python Shi-Tomasi角点检测
  4. TStrings和TStringLists类(经典有时间整理做个小例子)
  5. ajax提交不能获取数据,django无法收到ajax的请求数据
  6. html中transition默认,CSS3中的Transition详解
  7. 数商云SCM供应链协同管理系统解决方案
  8. Java Socket聊天室
  9. 潮流话机直接对接讯时FXO
  10. 计算机等级考试第一次报什么,计算机等级考试一年是考两次,3月和9月各一次 如果第一次没有考过第二次考要再报名缴费吗?...
  11. 实现链表的插入——头插/尾插
  12. 找个对象,找个男朋友
  13. winXP系统在“我的电脑”里打不开FAT32的U盘(8G)的一种解决办法
  14. Android 程序常用功能《清除缓存》
  15. itss认证条件是什么?
  16. Vmware Ubuntu虚拟机磁盘扩容(非常简单)
  17. JVM的mixed mode
  18. 网络营销理论研究:网络营销信息传递原理及其实践价值
  19. python自动给数字前面补0的方法
  20. 区块链开发指南_区块链开发权威指南

热门文章

  1. 易语言删除c盘源码,易语言基础教程利用API删除自身及子文件
  2. 财务oracle ap模块,Oracle ERP EBS R12财务应付AP模块基本业务操作
  3. 检测文章相似度的方法?文章原创度检测工具免费
  4. excel宏教程_综合 | 如何使用Excel按条件高效查找数据?
  5. 嵌入式 C 语言(上)
  6. CAD中级的考证费用是多少?
  7. 15日精读掌握《高德纳:具体数学》计划完成报告
  8. android listview 获取viewholder,Android ViewHolder 的基本使用
  9. Windows下载最新谷歌浏览器
  10. lmdb高效存储图片数据