| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 711 人关注过本帖
标题:验证码的设计
只看楼主 加入收藏
wtuaimmmm
该用户已被删除
收藏
已结贴  问题点数:5 回复次数:7 
验证码的设计
提示: 作者被禁止或删除 内容自动屏蔽
搜索更多相关主题的帖子: 验证 设计 
2010-05-01 12:36
baifenghan
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:258
专家分:952
注 册:2006-3-17
收藏
得分:5 
一般就是生成一个数组,其中包含你要用于生成动态码包含的所有字符,然后使用随机数去获取数组中的字符生成一个你指定长度的组合。简单的就直接把这个组合放在界面上。

如果你还要生成一张图片的话,有两种思路:
1. 就是放一个静态图片做这个放置这个随机数组合的背景图片;
2.使用swing的图片生成功能去动态生成一张包含这个随机数组合的图片。

建议第二种,因为第一种经常在web出现,随机码出现了,但是图片背景出不来的应用性不强的结果,但是比第二种稍微简单点。
收到的鲜花
  • wtuaimmmm2010-05-02 09:11 送鲜花  3朵   附言:好文章
2010-05-01 19:58
baifenghan
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:258
专家分:952
注 册:2006-3-17
收藏
得分:0 
package test;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import
import
import java.util.Random;

import javax.imageio.ImageIO;

public class GenCheckCode {
   
    public static void genCheckImage(int length)
    {
        BufferedImage image = new BufferedImage(100, 25, BufferedImage.TYPE_3BYTE_BGR);
        Graphics g = image.getGraphics();
        g.setColor(Color.BLUE);
        g.fillRect(0, 0, 100, 25);
        g.setColor(Color.YELLOW);
        String code = genCheckNumber(length);
        Font font =  new Font("宋体", Font.BOLD + Font.ITALIC, 14 );
        g.setFont(font);
        g.drawString(code, 30, 15);
        try {
            ImageIO.write(image, "jpg", new File("c:\\test.jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
   
    /**
     * 生成随机字符串
     * @param length
     * @return
     */
    public static String genCheckNumber(int length)
    {
        StringBuffer ret = new StringBuffer();
        Random ran = new Random();
        int pos = 0;
        for (int i = 0; i < length; i++) {
            pos = ran.nextInt(26 * 2 + 10);
            while (pos < 0)
            {
                pos = ran.nextInt();
            }
                ret.append(genSource()[pos]);
        }
        
        return ret.toString();
        
    }
   
    /**
     * 生产一个数组总含有小写字母和大写字母,以及数字0到9
     * @return
     */
    public static String[] genSource()
    {
        String[] source = new String[26 * 2 + 10];
        int aToInt = (int)'a';
        for (char i = 'a'; i <= 'z'; i++) {
            source[i - aToInt] = String.valueOf(i);
        }
        int AToInt = (int)'A';
        for (char i = 'A'; i <= 'Z'; i++) {
            source[i - AToInt + 26] = String.valueOf(i);
        }
        
        for (int i = 0; i < 10; i++) {
            source[i + 26 * 2] = String.valueOf(i);
        }
        
        return source;
    }
   
    public static void main(String[] args) {
        genCheckImage(5);
    }

}

我自己写了一个,你试试。
2010-05-02 00:32
wtuaimmmm
该用户已被删除
收藏
得分:0 
回复 2楼 baifenghan
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-02 09:05
wtuaimmmm
该用户已被删除
收藏
得分:0 
回复 3楼 baifenghan
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-02 09:07
dousao
Rank: 2
等 级:论坛游民
帖 子:228
专家分:58
注 册:2007-11-8
收藏
得分:0 
在页面上对这个acion自动执行一个请求就可以了,输出用image的字节数组,具体去网上找个demo看一下 很多。

同行售各专业书籍,全1折,淘宝店:http://maishu.
2010-05-02 14:26
baifenghan
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:258
专家分:952
注 册:2006-3-17
收藏
得分:0 
回复 4楼 wtuaimmmm
这个很简单了,ImageIO中有一个支持将生成的图片写到一个OutPutStream中的write重载的方法,使用这个将图片信息写到页面上也可以的。


或者将生成的图片放到指定的web应用目录,用img标签放上去就可以了。
2010-05-02 16:54
wtuaimmmm
该用户已被删除
收藏
得分:0 
回复 7楼 baifenghan
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-02 21:17
快速回复:验证码的设计
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012792 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved