现在许多系统的注册、登录或者发布信息模块都添加的随机 验证码 功能,就是为了避免自动注册程序或者自动发布程序的使用。

验证码实际上就是随机选择一些字符以图片的形式展现在页面上,如果进行提交操作的同时需要将图片上的字符同时提交,如果提交的字符与服务器session保存的不同,则认为提交信息无效。为了避免自动程序分析解析图片,通常会在图片上随机生成一些干扰线或者将字符进行扭曲,增加

自动识别验证码

的难度。

在这里,我们使用java实现验证码。

Color getRandColor(int fc,int bc){//给定范围获得随机颜色

Random random = new Random();

if(fc>255) fc=255;

if(bc>255) bc=255;

int r=fc+random.nextInt(bc-fc);

int g=fc+random.nextInt(bc-fc);

int b=fc+random.nextInt(bc-fc);

return new Color(r,g,b);

}

%>

//设置页面不缓存

response.setHeader("Pragma","No-cache");

response.setHeader("Cache-Control","no-cache");

response.setDateHeader("Expires", 0);

// 在内存中创建图象

int width=60, height=20;

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

// 获取图形上下文

Graphics g = image.getGraphics();

//生成随机类

Random random = new Random();

// 设定背景色

g.setColor(getRandColor(200,250));

g.fillRect(0, 0, width, height);

//设定字体

g.setFont(new Font("Times New Roman",Font.PLAIN,18));

// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到

g.setColor(getRandColor(160,200));

for (int i=0;i<155;i++)

{

int x = random.nextInt(width);

int y = random.nextInt(height);

int xl = random.nextInt(12);

int yl = random.nextInt(12);

g.drawLine(x,y,x+xl,y+yl);

}

// 取随机产生的认证码(4位数字)

String codeList = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";

String sRand="";

for (int i=0;i<4;i++){

int a=random.nextInt(codeList.length()-1);

String rand=codeList.substring(a,a+1);

sRand+=rand;

// 将认证码显示到图象中

g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成

g.drawString(rand,13*i+6,16);

}

// 将认证码存入SESSION

session.setAttribute("rand",sRand);

// 图象生效

g.dispose();

// 输出图象到页面

ImageIO.write(image, "JPEG", response.getOutputStream());

out.clear();

out = pageContext.pushBody();

%>

前台显示 然后将验证码放入session  后台从session中提取即可

验证码java如何实现_怎样用java实现验证码相关推荐

  1. java ean13 计算_实训java第三课 for 逻辑运算符 条件判断 商品条形码Ean-13验证码生成...

    package com.tarena.day03; public class SwitchDemo { /** * Switch */ public static void main(String[] ...

  2. 马士兵 java 学习笔记_马士兵java教程笔记1

    ---恢复内容开始--- 前记 虽然已经是个研究生了,但是会的东西还是特别的少 甚至连java都不能说是很会 所以准备从现在开始能好好的学习java 变成java master 标识符 标识符是由字母 ...

  3. java 02-cf_cf活动如何设置java环境变量_如何设置java环境变量

    cf助手怎么连接wifi_连接无线网设置 对于刚刚学习java的win7用户来说,首先要学会安装jdk和配置java环境变量,这是学习java的唯一途径,否则编写的代码运行时会出现bug.关于这一点, ...

  4. java 字符串乱码_这份Java面试题含答案解析竟然真的让你不用在面试上“如履薄冰”...

    面试题集共分为以下十部分: 一.Core Java: 1 - 95 题1 - 24 页 基础及语法: 1 - 61 题1 - 13 页 异常: 62 - 69 题13 - 15 页 集合: 70 - ...

  5. java console 交互_实例讲解java中Console类的用法

    java的Console类的使用方法及实例 java的Console类的使用方法及实例 JDK 6中提供了java.io.Console类专用来访问基于字符的控制台设备.如果你的Java程序要与Win ...

  6. java for循环_愉快地学Java语言:第五章 循环

    导读 本文适合Java入门,不太适合Java中高级软件工程师.本文以<Java程序设计基础篇>第10版为蓝本,采用不断提出问题,然后解答问题的方式来讲述.本篇文章只是这个系列中的一篇,如果 ...

  7. java 内存空间_怎样用java实现存储空间动态分配

    1.java是如何管理内存的 Java的内存管理就是对象的分配和释放问题.(两部分) 分配 :内存的分配是由程序完成的,程序员需要通过关键字new 为每个对象申请内存空间 (基本类型除外),所有的对象 ...

  8. linux java远程调试_[转]JPDA:Java平台调试架构(常用的远程调试方法)

    原文出处:http://www.javaeye.com/topic/75128 最近使用WTP的Server功能很不爽,连tomcat服务器时java类中的任何改动都要重启服务器,一怒之下就改用JPD ...

  9. java在线编译器_什么是Java内存模型

    在知识星球中,有个小伙伴提了一个问题:有一个关于JVM名词定义的问题,说"JVM内存模型",有人会说是关于JVM内存分布(堆栈,方法区等)这些介绍,也有地方说(深入理解JVM虚拟机 ...

  10. java web 截图_如何以Java实现网页截图技术

    今天看到某网友关于"如何以Java实现网页截图技术"的咨询帖,由于出现该咨询的地点非常不适合较长回复,故以博文形式回答. 事实上,如果您想以Java实现网页截图,也就是" ...

最新文章

  1. python刷题笔记怎么改_python面试题刷题笔记1 - 10
  2. Android手机启动流程与TEE OS
  3. (三)硕博生常用的英文文献下载的网站
  4. Apache配置文件
  5. MongoDB聚合运算之group和aggregate聚集框架简单聚合(10)
  6. 线性代数导论5——SVD分解
  7. 如何测定拼色染液中,各染料在不同染色时间时,染液中残留染料量及织物上吸附上染的染料量?
  8. 视觉在无人驾驶中的应用及分类_机器视觉在智能化生产中的广泛应用
  9. 手把手教你做产品经理1.0
  10. 美国Compuware败退中国市场!又一家外企逃离
  11. 拉勾教育管理系统(前端)
  12. Mac配置Android SDK环境变量
  13. BP神经网络之BP算法手写推导
  14. 百旺税控服务器维护,税控盘是百旺的,但航天信息发信息要交维护费,是什么意思?...
  15. PDF怎么拆分?有哪些免费的PDF拆分软件
  16. bootstrap 滚动 进度条_Bootstrap中的进度条
  17. 用大数据解决“痛点”问题 “云上贵州”再发力
  18. 远程工具MobaXterm安装和使用教程
  19. 连接策略与搜索引擎优化
  20. Security(安全框架)

热门文章

  1. 获取当前本地登录的QQ号码
  2. Share Disk、Share Memory和Share Nothing的区别
  3. 程序员大保健指南,给自己的身心偶尔放松的机会
  4. Beyond Compare 30天评估期结束解决办法
  5. cefsharp 网页另存为图片,CefSharp获取页面截图
  6. 51c语言单片机io口控制实验报告,单片机实验报告二 单片机IO口实验
  7. java mail pom_集成JavaMail
  8. cad补全三视图_机械制图课程中补全三视图的解题方法
  9. 华为安装gsm框架_华为nova5怎么下载安装谷歌服务助手,安装GMS框架教程
  10. c程序设计(谭浩强)阅读与实操 1章 (新手向)