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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

实现一个6位验证码,不能重复 , 验证码包含数字,汉字生成6位验证吗,输出在控制台,用户输入,判断对或错,不区分大小写

这是今天老师给的作业。分享下我的思路
先上 获取验证码的思路图:

  1. package cn.itcast;

  2. import java.util.Scanner;

  3. /*
  4.         实现一个6位验证码,不能重复 , 验证码包含数字,汉字
  5.         生成6位验证吗,输出在控制台,用户输入,判断对或错,不区分大小写
  6.         思路:
  7.         用查表法,字符数组,存储需要的字符 数字,字母,汉字
  8.         利用随机数,随机生成,随机数当作下标,数组找对应的字符
  9.         从数组中找到字符后,将字符存储到缓冲区(这里我用的是长为6的字符数组),
  10.         获取一个字符后,先别存到缓冲区,先看看缓冲区中是否存在这个字符,
  11.         如果不存在,存进去,如果存在,不要这个字符,继续下一次获取随机数
  12.         将获取到的字符,存储后,判断缓冲区长度,是6 break;
  13. */
  14. public class CodeTest {
  15.        
  16.         public static void main(String[] args) {
  17.                
  18.                 System.out.print("验证码:");
  19.                 String s = CodeTest.getCode();
  20.                 System.out.println(s);
  21.                 Scanner sc = new Scanner(System.in);
  22.                 System.out.println("请输入验证码:");
  23.                 String str = sc.nextLine();
  24.                 while(true){
  25.                         if(compareCode(str, s)){
  26.                                 System.out.println("验证成功,正在进入...");
  27.                                 System.out.println("恭喜您进来了,但是并没有什么东西让你用~~~");
  28.                                 break;
  29.                         }
  30.                         System.out.println("验证失败,请重新输入:");
  31.                         str = sc.nextLine();       
  32.                 }
  33.         }
  34.         //获取生成验证码
  35.         public static String getCode(){
  36.                 //定义一个字符串数组ch,储存随机数的的库。
  37.                 char[] ch = {'实','现','一','个','位','验','证','码','不','能','重','复',
  38.                                 '1','2','3','4','5','6','7','8','9','0','a','b','c','d',
  39.                                 'e','f','g','h','i','g','k','l','m','n','o','p','q','r',
  40.                                 's','t','u','v','w','x','y','z','A','B','C','D','E','F',
  41.                                 'G','H','I','J','K','L','M','N','O','P','Q','R','S','T',
  42.                                 'U','V','W','X','Y','Z'};
  43.                 char[] code = new char[6];//定义长度为6的空字符数组用来存放生成的验证码
  44.                 int x = 0;
  45.                 tab:while ( x < 6 ) {
  46.                         double d = Math.random();
  47.                         int i = (int) (74 * d);
  48.                         // 进入循环判断生成的随机字符与之前的是否相等,从第二次生成随机数时开始。
  49.                         for (int j = 0; x > 0 && j < x ; j++) {
  50.                                 if (code[x] == code[j]){
  51.                                         break tab;
  52.                                 }
  53.                         }
  54.                         code[x] = ch[i];//将生成的放入code中
  55.                         x++;
  56.                 }
  57.                 return String.valueOf(code);
  58.         }
  59.         //判断两个字符相等
  60.         public static boolean compareCode(String str,String s){
  61.                 if(str.length() != 6){
  62.                         return false;
  63.                 }else {
  64.                         return str.equalsIgnoreCase(s);
  65.                 }
  66.                
  67.         }
  68.        
  69. }
复制代码
整体可能有些地方不够高效,但这是目前我觉比较好的了。


2 个回复

倒序浏览
大家来看看真么样~~~
回复 使用道具 举报
没人看呀~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马