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 }