java文件中,需输出 4位网站验证码  要求:
  1 不能重复
  2 数字和大小写字符, 但是不能包含1,0,o,O,l,L,Z,2,9,g等这如何实现呀,thanks

解决方案 »

  1.   

    最笨的方法是:把能用的数字和字母放入数组,写个四重循环就ok了。不知道lz说的不能重复是每一位不能重复还是生成出来的四位码之间不能重复,这种例子很多的。
      

  2.   


    private static final String AUTH_CODE = "0123456789";

    public static String getCheckCode()
    {
    StringBuilder sb = new StringBuilder();
    for(int i = 0;i<4;i++)
    {
    int index = new Random().nextInt(AUTH_CODE.length());
    sb.append(AUTH_CODE.charAt(index));
    }
    return sb.toString();
    }
    将0123456789换成想输出的字符即可...
      

  3.   

    1、如下是产生验证码的class,你只需要小小改一下,排除1,0,o,O,l,L,Z,2,9,g等。
    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import java.util.Random;//定义类public class VerifyCode {
    static Random r = new Random();
    static String ssource =  "0123456789";
    static char[] src = ssource.toCharArray();


    //产生随机字符串

    private static String randString (int length){
    char[] buf = new char[length];
    int rnd;
    for(int i=0;i<length;i++){
    rnd = Math.abs(r.nextInt()) % src.length;

    buf[i] = src[rnd];
    }
    return new String(buf);
    }

    //调用该方法,产生随机字符串,
    //参数i: 为字符串的长度
    public String runVerifyCode(int i){
    String VerifyCode = randString(i);
    return VerifyCode;
    }


    //给定范围获得随机颜色
    public 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);
        }
      
       //调用该方法将得到的验证码生成图象
       //sCode:传递验证码 w:图象宽度 h:图象高度
       public BufferedImage CreateImage(String sCode)
       {
       try{
       //字符的字体
    Font CodeFont = new Font("Arial Black",Font.PLAIN,16);
    int iLength = sCode.length(); //得到验证码长度
    int width=22*iLength, height=20; //图象宽度与高度
    int CharWidth = (int)(width-24)/iLength; //字符距左边宽度
    int CharHeight = 16;     //字符距上边高度

    // 在内存中创建图象
    BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

    // 获取图形上下文
    Graphics g = image.getGraphics();

    //生成随机类
    Random random = new Random();

    // 设定背景色
    g.setColor(getRandColor(200,240));
    g.fillRect(0, 0, width, height);

    //设定字体
    g.setFont(CodeFont);

    //画随机颜色的边框
    g.setColor(getRandColor(10,50));
    g.drawRect(0,0,width-1,height-1);

    // 随机产生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);
    }


    for (int i=0;i<iLength;i++)
    {
    String rand = sCode.substring(i,i+1); 
    // 将认证码显示到图象中
    g.setColor(new Color(20+random.nextInt(60),20+random.nextInt(120),20+random.nextInt(180)));
    g.drawString(rand,CharWidth*i+14,CharHeight);
    }
    // 图象生效
    g.dispose();
    return image;
    }catch(Exception e){
    //e.printStackTrace();
    //System.out.println(e.getMessage());
    }
    return null;
    }

    //测试
    public static void main(String[] args){
    //VerifyCode vc = new VerifyCode();
    //String s1 = vc.runVerifyCode(4);
    //Fun.DreamNewsTitle;System.out.println(s1);
    //Image im = vc.CreateImage(s1);
    //Graphics g = im.getGraphics();
    //g.drawImage(im,20,20,this);
    //g.drawString(s1,20,20);

    }
    }2、定义验证码jsp。
    <meta http-equiv="Content-Type" content="text/html; charset=GBK">
    <%@ page contentType="text/html; charset=gb2312" language="java"
    import="java.awt.*,java.awt.image.*"%>
    <%@ page import="java.util.*,javax.imageio.*,java.io.*"%>
    <%@ page import="com.cissst.dsan.utils.*"%><%!String sVerifyCode; //声明验证码字符串%><%
    //设置页面不缓存
    response.setHeader("Pragma", "No-cache");
    response.setHeader("Cache-Control", "no-cache");
    response.setDateHeader("Expires", 0);
    response.reset(); try {
    // 将认证码存入SESSION
    //调用 runVerifyCode(int i) ,把i改成所要的验证码位数
    VerifyCode VC = new VerifyCode();
    session.setAttribute("VerifyCode", VC.runVerifyCode(4));
    //session.setMaxInactiveInterval(60); // 输出图象到页面
    sVerifyCode = (String) session.getAttribute("VerifyCode");
    OutputStream outs = response.getOutputStream();
    ImageIO.write(VC.CreateImage(sVerifyCode), "JPEG", outs);
    } catch (Exception e) {
    return;
    }
    %>
    3、在登录页面引入验证码
    类似于如下:<TD colspan="2" align="left">
    <FONT color=#ffffff><STRONG>验证码:</STRONG>
    &nbsp;&nbsp;<input type="text" name="verifycode"
    size="4" maxlength="4" value="" /> <html:image
    src="VerifyCode.jsp" />
    </TD>
    上面是比较简单的验证码实现。
    其实,apache组织就有一个验证码组件,直接可以调用,是
    开源组件jcaptcha,可以做jsp彩色验证码 ,很简单,也很安全。
      

  4.   

    绝对正确的答案,刚入门学java老师给我们出过的题目...import java.util.Arrays;
    import java.util.Random;public class Yanzhengma3 {
    public static void main(String[] args)
    {
    char []ary=new char[52];//定义一个数组
    count(ary);
    System.out.println(Arrays.toString(count(ary)));
    System.out.println(Arrays.toString(four(ary)));

    }
    public static char[] count(char []ary)
    {

    int j=0;
    for(int i=51;i<123;i++)
    {
    if(((i<57)||(i>=65&&i<90)||(i>=97))&&i!=76&&i!=79&&i!=103&&i!=108&&i!=111)
    {

    ary[j++]=(char) i;
    }
    }
    return ary; }
    public static char[] four(char[] ary)
    {
    char[] s =new char[4];
    w:for(int i=0;i<4;i++)
    {
    Random rd=new Random();
    int a=rd.nextInt(52);
    System.out.print(a+" ");
    //System.out.println(ary[a]);
    for(int j=0;j<i;j++)
    {
    if(s[j]==ary[a])
    {
    i--;
    continue w;
    }
    }
    s[i]=ary[a];

    //System.out.print(s[j]);
    //System.out.println(ary[a]);
    }

    return s;
    }
    }
      

  5.   

    在达内刚学java时候的回家作业...package homework;import java.util.Arrays;
    import java.util.Random;public class Yanzhengma3 {
    public static void main(String[] args)
    {
    char []ary=new char[52];//定义一个数组
    count(ary);
    //System.out.println(Arrays.toString(count(ary)));
    System.out.println(Arrays.toString(four(ary)));

    }
    public static char[] count(char []ary)
    {

    int j=0;
    for(int i=51;i<123;i++)
    {
    if(((i<57)||(i>=65&&i<90)||(i>=97))&&i!=76&&i!=79&&i!=103&&i!=108&&i!=111)
    {

    ary[j++]=(char) i;
    }
    }
    return ary; }
    public static char[] four(char[] ary)
    {
    char[] s =new char[4];
    w:for(int i=0;i<4;i++)
    {
    Random rd=new Random();
    int a=rd.nextInt(52);
    //System.out.print(a+" ");
    //System.out.println(ary[a]);
    for(int j=0;j<i;j++)
    {
    if(s[j]==ary[a])
    {
    i--;
    continue w;
    }
    }
    s[i]=ary[a];

    //System.out.print(s[j]);
    //System.out.println(ary[a]);
    }

    return s;
    }
    }
      

  6.   


    package homework;import java.util.Arrays;
    import java.util.Random;public class Yanzhengma3 {
    public static void main(String[] args)
    {
    char []ary=new char[52];//定义一个数组
    count(ary);
    //System.out.println(Arrays.toString(count(ary)));
    System.out.println(Arrays.toString(four(ary)));

    }
    public static char[] count(char []ary)
    {

    int j=0;
    for(int i=51;i<123;i++)
    {
    if(((i<57)||(i>=65&&i<90)||(i>=97))&&i!=76&&i!=79&&i!=103&&i!=108&&i!=111)
    {

    ary[j++]=(char) i;
    }
    }
    return ary; }
    public static char[] four(char[] ary)
    {
    char[] s =new char[4];
    w:for(int i=0;i<4;i++)
    {
    Random rd=new Random();
    int a=rd.nextInt(52);
    //System.out.print(a+" ");
    //System.out.println(ary[a]);
    for(int j=0;j<i;j++)
    {
    if(s[j]==ary[a])
    {
    i--;
    continue w;
    }
    }
    s[i]=ary[a];

    //System.out.print(s[j]);
    //System.out.println(ary[a]);
    }

    return s;
    }
    }