A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hailong 中级黑马   /  2014-11-4 12:06  /  1736 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package cn.verification;
  2. import java.util.Random;
  3. import java.util.Scanner;
  4. /*
  5. * 实现一个6位验证码,不能重复 ,验证码包含数字,字母大小写(不包含o和i),汉字 生成6位验证吗,输出在控制台 用户输入,判断对或错,不区分大小写
  6. */
  7. /*
  8. * 思路: 1、用查表法,使用字符数组存储需要的字符 数字,字母,汉字 2、利用随机数,随机生成,随机数当作下标,在数组中找对应的字符
  9. * 3、从数组中找到字符后,将字符存储到缓冲区
  10. * 4、获取一个字符后,先判断缓冲区中是否存在这个字符,如果不存在,存进去,如果存在,不要这个字符,继续下一次获取随机数
  11. * 5、将获取到的字符,存储后,判断缓冲区长度,是6 break
  12. */
  13. public class Verification {
  14.         public static void main(String[] args) {
  15.                 input();
  16.         }
  17.         //接收用户输入并判断是否正确,不区分大小写
  18.         public static void input(){
  19.                 Scanner sc = new Scanner(System.in);
  20.                 String yz = verificationCode();
  21.                 System.out.println("请输入验证码:"+yz);
  22.                 String s = sc.next();
  23.                 if(yz.equalsIgnoreCase(s)){
  24.                         System.out.println("验证通过");
  25.                 }else{
  26.                         System.out.println("验证码不正确");
  27.                 }
  28.         }
  29.         //随机生成6位验证码
  30.         public static String verificationCode() {
  31.                 String[] str = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a",
  32.                                 "b", "c", "d", "e", "f", "g", "h", "k", "m", "Q", "W", "E",
  33.                                 "R", "T", "Y", "P", "A", "S", "D", "天", "地", "玄", "黄", "宇",
  34.                                 "宙", "洪", "荒", "日", "月" };
  35.                 Random rd = new Random();
  36.                 StringBuffer buffer = new StringBuffer();
  37.                 String s;
  38.                 int temp = 0;
  39.                 while (true) {
  40.                         temp = rd.nextInt(str.length);
  41.                         if (buffer.length() < 6) {
  42.                                 s = str[temp];
  43.                                 if (buffer.indexOf(s) >= 0) {
  44.                                         continue;
  45.                                 }
  46.                                 buffer.append(s);
  47.                         } else {
  48.                                 break;
  49.                         }
  50.                 }
  51.                 return buffer.toString();
  52.         }
  53. }
复制代码
请各位大神帮忙改进,谢谢

2 个回复

倒序浏览
import java.util.*;
class Test1 {
        public static void main(String[] args) {
                char[] a = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'l',
                                'm', 'n', '1', '2', '3', '4', '5', '6', '7', '8', '9', '一',
                                '二', '三','四', '五', '六', '七', '八', '九', '十' };
                // int i =0;
                StringBuffer sb = new StringBuffer();
                Random ran = new Random();
                for (int i = 0; i < 6; i++) {
                        int index = ran.nextInt(a.length);
                        if (!sb.toString().contains(a[index] + "")) {
                                sb.append(a[index]);
                        } else {
                                i--;
                        }
                }
                System.out.println(sb.toString());
                System.out.println("请输入验证码");
                Scanner scanner = new Scanner(System.in);
                while (true) {
                        String string = scanner.next();
                        if (string.trim().equalsIgnoreCase(sb.toString().trim())) {
                                System.out.println("输入正确.");
                                break;
                        }else{
                                System.out.println("请重新输入");
                        }
                }

        }

}

  我是这么写的..
回复 使用道具 举报
现在验证码都不是图片识别么- -直接输出的会被一些广告软件自动识别的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马