博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
怎样用java实现验证码
阅读量:5934 次
发布时间:2019-06-19

本文共 1969 字,大约阅读时间需要 6 分钟。

现在许多系统的注册、登录或者发布信息模块都添加的随机 功能,就是为了避免自动注册程序或者自动发布程序的使用。 
验证码实际上就是随机选择一些字符以图片的形式展现在页面上,如果进行提交操作的同时需要将图片上的字符同时提交,如果提交的字符与服务器session保存的不同,则认为提交信息无效。为了避免自动程序分析解析图片,通常会在图片上随机生成一些干扰线或者将字符进行扭曲,增加 的难度。 

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

<%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %>
<%!
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中提取即可

文章出自:http://www.zhima365.com/shownews.php?id=370

 

转载地址:http://gdctx.baihongyu.com/

你可能感兴趣的文章
产品经理必会的五大数据分析模型
查看>>
MySpace出现史上最大规模数据泄露事件
查看>>
只要阅读两篇有关勒索软件的文章就可解锁!
查看>>
轻量级大规模机器学习算法库Fregata开源:快速,无需调参
查看>>
从蓝瘦“想哭”到 SELinux 看操作系统安全何在
查看>>
ISIS“摊上大事”,黑客组织“匿名者”发布仇杀令
查看>>
O2O借力商业WiFi入口的四大法则
查看>>
《大数据原理:复杂信息的准备、共享和分析》一一0.2 大数据VS小数据
查看>>
汽车的7个错误使用方式,现在改还来得及
查看>>
Android View绘制的三大流程
查看>>
借欧美“隐私盾”协议 敲响我国网络数据保护的警钟
查看>>
SIM CIO查结果:IT敏捷性和IT预算都上升
查看>>
《可穿戴创意设计:技术与时尚的融合》一一第2章 与可穿戴设备有关的故事...
查看>>
软件定义存储(SDS)的定义、分类及VMware VSAN剖析
查看>>
《 产品设计思维:电商产品设计全攻略》一一1.2 互联网设计思维
查看>>
《R语言编程艺术》——1.2 第一个R会话
查看>>
Tay继任者:微软人工智能聊天机器人Zo上线测试
查看>>
农业物联网应用发展分析
查看>>
5G进度卡关 联发科应如何解困?
查看>>
工信部全面推进移动物联网(NB-IoT)建设发展
查看>>