JSP任意长度验证码

<%@page import="java.io.*,java.util.*,java.awt.*,java.awt.image.*,javax.imageio.*"%>
<%
/*
使用方法:在需要显示验证码的html代码中使用<img p">
  在需判断session的时候判断session.getAttribute("rand")
*/
  int codeLength=55;//验证码长度
  int mixTimes=0;//模糊程度参数
  Color bgColor=getRandColor(200, 250);//背景颜色
  Color bfColor=new Color(0,0,0);//字体颜色
  boolean ifRandomColor=true;//单个字符是否颜色随机
  boolean ifMixColor=false;//模糊线是否颜色随机

  //设置页面不缓存
  response.setHeader("Pragma", "No-cache");
  response.setHeader("Cache-Control", "no-cache");
  response.setDateHeader("Expires", 0);
  // 在内存中创建图象
  int width = 13*codeLength+6, height = 20;
  BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
  // 获取图形上下文
  Graphics g = image.getGraphics();
  // 设定背景色
  g.setColor(bgColor);
  g.fillRect(0, 0, width, height);
  //设定字体
  g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
  //画边框
  g.setColor(new Color(33,66,99));
  g.drawRect(0,0,width-1,height-1);
  // 随机产生干扰线,使图象中的认证码不易被其它程序探测到
  g.setColor(getRandColor(160, 200));
  for (int i = 0; i < mixTimes*codeLength/10; i++) {
 if(ifMixColor)
 {
  g.setColor(getRandColor(160, 200));
 }
 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 sRand = "";
  for (int i = 0; i < codeLength; i++) {
    String rand = String.valueOf(random.nextInt(10));
    sRand += rand;
    // 将认证码显示到图象中
 if(ifRandomColor)
  g.setColor(getRandColor(20,110,0));
 else
  g.setColor(bfColor);
 //调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
    g.drawString(rand, 13 * i + 6, 16);
  }
  // 将认证码存入SESSION
  session.setAttribute("rand", sRand);
  // 图象生效
  g.dispose();
  // 输出图象到页面
  ImageIO.write(image, "PNG", response.getOutputStream());
%>
<%!
//给定范围获得随机颜色
private static Random random=new Random();
private Color getRandColor(int fc, int bc) {
  return getRandColor(fc, bc, fc);
}
private Color getRandColor(int fc, int bc,int interval) {
  if (fc > 255) {
    fc = 255;
  }
  if (bc > 255) {
    bc = 255;
  }
  int r = fc + random.nextInt(bc - interval);
  int g = fc + random.nextInt(bc - interval);
  int b = fc + random.nextInt(bc - interval);
  return new Color(r, g, b);
}
%>

 

时间: 2024-09-17 04:00:53

JSP任意长度验证码的相关文章

Jsp实现图片验证码的技巧

图片验证码的实现主要的技术点是如何生成一个图片.生成图片可以使用java.awt包下的类来实现.我们先写一个简单的生成图片的程序HelloImage.java.以下是代码部分. package com.vogoal.test;import java.awt.Color;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import

生成任意长度的随机数 JS

1.Math.random().toString(36).substr(2); 结果:ywv6cnpkliahj4tep0 2.   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 /* ** randomWord 产生任意长度随机字母数字组合 ** randomFlag-是否任意长度 min-任意长度最小位[固定位数] max-任意长度最大位 ** xuanfeng 2014-08-28 */   function randomWor

傅立叶变换-是否有支持定点化,支持NEON, 支持任意长度的的傅里叶变换的库

问题描述 是否有支持定点化,支持NEON, 支持任意长度的的傅里叶变换的库 现在正在做实时信号处理,在ARM上对性能要求比较高,所以需要比较快的FFT库 需要能同时支持定点化,NEON指令优化,并且支持非2的N次方的傅里叶变换库.希望有谁有用过的,了解过的,介绍一下给点指导. PS:现在找到大部分库都都不能满足上面三个特性,例如FFTWKISSFFTNET10 等都是只能满足两个特性.

JSP动态生成验证码存储在session作用范围内_JSP编程

(1)在登录应用中,为防止恶意登录,常常需要服务器动态生成验证码并存储在session作用范围中,最后以图像形式返回给客户端显示 (2)下边的代码实现的功能:写一个JSP页,动态生成一个验证码,存储在session作用范围内,并以图像形式返回给客户端显示. 另写一个JSP页面,引用此JSP页面生成的验证码: authen.jsp代码如下: <%@ page import="java.awt.*,java.awt.image.*,java.util.*,com.sun.image.codec

求C#DES加密的key可为任意长度字符或为空代码

问题描述 其它java,C代码的DES的KEY可任意长度字符或为空,现在我使用的C#des加密算法,当key为空时出错,请高手支招,贴出key可任意长度字符的代码网上的代码,key不可为空,必须要8位尹学渊用VC++写的,可key为空,加密结果到到其它工具或其它语言写的工具上去 反解,并且一切正常尹学渊用VC++写的(http://www.cnblogs.com/erwin/archive/2009/04/14/1435288.html#2346568),key为空得到的密文可到其它标准DES上

《Python Cookbook(第3版)中文版》——1.2 从任意长度的可迭代对象中分解元素

1.2 从任意长度的可迭代对象中分解元素 1.2.1 问题 需要从某个可迭代对象中分解出N个元素,但是这个可迭代对象的长度可能超过N,这会导致出现"分解的值过多(too many values to unpack)"的异常. 1.2.2 解决方案 Python的"表达式"可以用来解决这个问题.例如,假设开设了一门课程,并决定在期末的作业成绩中去掉第一个和最后一个,只对中间剩下的成绩做平均分统计.如果只有4个成绩,也许可以简单地将4个都分解出来,但是如果有24个呢?表

jsp实现简单验证码的方法_JSP编程

本文实例讲述了jsp实现简单验证码的方法.分享给大家供大家参考.具体如下: 这里只有一个文件,可以在<img />的src属性里直接调用显示,适用于各种项目的表单安全验证 jsp页面代码: <%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %> <%! Color getRandColor(

C语言---递归反向输出任意长度的字符串

(该字符串可以包含空格和回车!) [题目要求] 编写一个递归函数,实现将输入的任意长度的字符串反向输出的功能. 例如输入字符串:ABCD,输出字符串:DCBA. [题目分析] 应用递归的思想有时可以很轻松地解决一些看似不太容易实现的功能. 本题就是利用递归方法解决这类问题的一个代表.要将一个字符串反向地输出,一般采用的方法是将该字符串存放到一个数组中,然后将数组元素反向地输出即可. 这样需要一个存储空间,而且字符串的长度无法自由掌握,因为数组是一种静态数据结构.如果选用动态生成的顺序表或者链表来

JSP生成彩色验证码程序

js|程序|验证码 生成有4个随机数字和杂乱背景的图片,数字和背景颜色会改变,服务器端刷新(用history.go(-1)也会变)  产生验证码图片的文件image.jsp <%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %><%!Color getRandColor(int fc,int bc){/