您的位置:首页 > 其它

随机产生验证码并进行输入匹配

2016-11-26 22:22 218 查看

》题目要求

  》》用户输入产生验证码的个数

  》》根据个数随机产生验证码

  》》用户输入验证码

  》》验证码比较(不区分大小写)

》程序实现

1 package atest.dak.com;
2
3 import java.util.Arrays;
4 import java.util.Random;
5 import java.util.Scanner;
6
7 public class Test01{
8     public static void main(String[] args) {
9
10         /*随机产生指定数量的不重复的验证码*/
11         Scanner scan = new Scanner(System.in);
12         System.out.print("请输入需要产生的验证码的数量:");
13         int number = scan.nextInt();
14         char [] ran_verification_code = create_verification_code(number);
15         System.out.println("随机产生的" + number + "个验证码为: " + Arrays.toString(ran_verification_code));
16
17         /*输入验证码*/
18         System.out.print("请输入验证码:");
19         String str01 = scan.next();
20         char [] input_verification_code = str01.toCharArray();
21         System.out.println("你输入的验证码是:" + Arrays.toString(input_verification_code));
22
23         /*验证码判断*/
24         int num_correct = 0;
25         for(int i = 0; i < input_verification_code.length; i++) {
26             for(int j = 0; j < ran_verification_code.length; j++) {
27                 if((input_verification_code[i] == ran_verification_code[j]) && (i == j)) {
28                     num_correct++;
29                 }
30             }
31         }
32         if(number == num_correct) {
33             System.out.println("验证码输入正确。");
34         }
35         else {
36             System.out.println("你输错啦" + (number - num_correct) + "个验证码。");
37         }
38
39     }
40
41     /**
42      * 随机产生指定数量的验证码
43      * @param number TODO
44      * @return TODO
45      *
46      */
47     private static char[] create_verification_code(int number) {
48         char[] letter = create_alphabet();  //存放所有的字母
49         boolean [] judge = new boolean[letter.length]; //存放所有字母是否被选中的状态
50         char[] ran_num = {}; //存放随机产生的验证码
51         int index = 0;
52         Random random = new Random();
53         for(int i = 0; i < number; i++) {
54             do {
55                 index = random.nextInt(letter.length);
56             } while(judge[index]);
57             judge[index] = true; //没选中一个字母,就将这个字母的状态变成选中
58             ran_num = Arrays.copyOf(ran_num, ran_num.length + 1); //扩容处理
59             ran_num[ran_num.length - 1] = letter[index]; //添加元素
60         }
61 //        System.out.println(Arrays.toString(ran_num));
62         return ran_num;
63     }
64
65     /**
66      * 产生全部大写字母和全部小写字母还有0到9的阿拉伯数字
67      * @return TODO
68      *
69      */
70     private static char[] create_alphabet() {
71         char x = 'a';
72         char y = 'A';
73         char z = '0';
74         char [] alphabet = {}; //用于存放字符
75         for(int i = 0; i < 26; i++) { //将26个小写字母放到alphabet数组中去
76             alphabet = Arrays.copyOf(alphabet, alphabet.length + 1); //扩容处理
77             alphabet[alphabet.length - 1] = (char)(x + i); //添加元素
78         }
79         for(int i = 0; i < 26; i++) { //将26个大写字母放到alphabet数组中去
80             alphabet = Arrays.copyOf(alphabet, alphabet.length + 1);
81             alphabet[alphabet.length - 1] = (char)(y + i);
82         }
83         for(int i = 0; i <= 9; i++) { //将10个阿拉伯数字放到alphabet中去
84             alphabet = Arrays.copyOf(alphabet, alphabet.length + 1);
85             alphabet[alphabet.length - 1] = (char)(z + i);
86         }
87 //        System.out.println(Arrays.toString(alphabet));
88         return alphabet;
89     }
90
91 }


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: