![]()
1 import java.util.Scanner;
2 import java.util.Random;
3 public class Text1
4 {
5 public static void main(String[] args)
6 {
7 Code code=new Code();
8 code.start();
9 }
10 }
11 class Code
12 {
13 char[] range=new char[62]; //定义验证码取值范围的数组
14 char[] code; //定义验证码保存数组
15 String codeRange; //定义用于保存验证码取值范围的变量
16 String myCode; //定义存放验证码字符串的变量
17 int state=1; //定义递归控制变量
18
19 //获取验证码取值范围的方法实现
20 public void range()
21 {
22 char a1='0';
23 char a2='a';
24 char a3='A';
25 for(int i=0;i<range.length;i++)
26 {
27 if(i<10)
28 {
29 range[i]=a1; //验证码取值0-9
30 a1++;
31 }
32 if(i>=10&&i<36)
33 {
34 range[i]=a2; //验证码取值a-z
35 a2++;
36 }
37 if(i>=36)
38 {
39 range[i]=a3; //验证码取值A-Z
40 a3++;
41 }
42 }
43 }
44 //获取m-n范围内的随机数的方法实现,包含m,n本身
45 public int randomRange(int m,int n)
46 {
47 Random random=new Random();
48 int value=random.nextInt(n-m)+m;
49 return value;
50 }
51 //获取验证码
52 public void code()
53 {
54 for(int i=0;i<code.length;i++)
55 {
56 code[i]=codeRange.charAt(randomRange(0,61));
57 }
58 }
59 //获取用户输入并比较
60 public void compare()
61 {
62
63 code=new char[randomRange(4,8)]; //生成4-8随机数量的验证码保存数组
64
65 code(); //生成验证码并保存到code数组
66 myCode=new String(code); //将验证码转换为字符串,以方便比较
67
68 System.out.println("验证码为:"+myCode);
69 System.out.print("请按照上图中显示的字符输入验证码:");
70
71 if(myCode.equals(new Scanner(System.in).nextLine()))
72 {
73 System.out.println("您的验证码输入正确");
74 }else if(state!=5)
75 {
76 System.out.println("您的验证码输入错误,您还有"+(5-state)+"次机会");
77 state++;
78 compare();
79 }else if(state==5)
80 {
81 System.out.println("笨蛋,一次都不对!");
82 }
83 }
84 //程序总开关
85 public void start()
86 {
87 range(); //获取到验证码取值范围并保存到数组
88 codeRange=new String(range); //将获取到的验证码取值范围转换为字符串,以方便截取
89 compare(); //功能实现
90 }
91 }