黑马程序员技术交流社区
标题:
随机生成6位验证码
[打印本页]
作者:
hailong
时间:
2014-11-4 12:06
标题:
随机生成6位验证码
package cn.verification;
import java.util.Random;
import java.util.Scanner;
/*
* 实现一个6位验证码,不能重复 ,验证码包含数字,字母大小写(不包含o和i),汉字 生成6位验证吗,输出在控制台 用户输入,判断对或错,不区分大小写
*/
/*
* 思路: 1、用查表法,使用字符数组存储需要的字符 数字,字母,汉字 2、利用随机数,随机生成,随机数当作下标,在数组中找对应的字符
* 3、从数组中找到字符后,将字符存储到缓冲区
* 4、获取一个字符后,先判断缓冲区中是否存在这个字符,如果不存在,存进去,如果存在,不要这个字符,继续下一次获取随机数
* 5、将获取到的字符,存储后,判断缓冲区长度,是6 break
*/
public class Verification {
public static void main(String[] args) {
input();
}
//接收用户输入并判断是否正确,不区分大小写
public static void input(){
Scanner sc = new Scanner(System.in);
String yz = verificationCode();
System.out.println("请输入验证码:"+yz);
String s = sc.next();
if(yz.equalsIgnoreCase(s)){
System.out.println("验证通过");
}else{
System.out.println("验证码不正确");
}
}
//随机生成6位验证码
public static String verificationCode() {
String[] str = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a",
"b", "c", "d", "e", "f", "g", "h", "k", "m", "Q", "W", "E",
"R", "T", "Y", "P", "A", "S", "D", "天", "地", "玄", "黄", "宇",
"宙", "洪", "荒", "日", "月" };
Random rd = new Random();
StringBuffer buffer = new StringBuffer();
String s;
int temp = 0;
while (true) {
temp = rd.nextInt(str.length);
if (buffer.length() < 6) {
s = str[temp];
if (buffer.indexOf(s) >= 0) {
continue;
}
buffer.append(s);
} else {
break;
}
}
return buffer.toString();
}
}
复制代码
请各位大神帮忙改进,谢谢
作者:
马兴
时间:
2014-11-4 20:38
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("请重新输入");
}
}
}
}
我是这么写的..
作者:
冥夜
时间:
2014-11-4 21:07
现在验证码都不是图片识别么- -直接输出的会被一些广告软件自动识别的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2