用Java随机产生一个用户所需的验证码

用Java随机产生一个用户所需的验证码,第1张

要求:让用户同时输入账户,密码,验证码,只有三个都满足的时候,输出登录成功,否则若账户密码正确,验证码错误,输出验证码错误,若账户密码错误则输出账户密码出错.

为了完成上面的要求,首先我们要获取到用户输入的账户,密码,验证码的数据,则需要用到键盘输入的方法,如下:

import java.util.Scanner;			//导入Scanner包
public UserPasswoed{
	public static void main(String[] args){
		Scanner a=new Scanner(System.in);		//创建新的Scanner对象a
		String user=a.next();					//将输入的用户的账户存储进变量user中
		String password=a.next();				//将输入的用户的密码存储进变量password中
		String verify=a.next();					//将用户输入的的验证码存储进verify变量中
	}
}

这样,就获取到了用户输入的我们所需要的值,但是我们知道验证码是每次都会发生变化的,而不是固定不变写死的,那么为了让我们的验证码随机产生,则我们需要去导入Random包来;

import java.util.Random;

接下来需要思考,假如我们需要一个6位数的验证码.如果验证码都是数字就只需要确保Random.nextInt()的取值范围为;100000-999999;则可以写为Random.nextInt(900000)+100000,但是我们知道验证码不可能只有数字,还会有大小写字母,这个时候,就不能用这个了,那么我们的java里也没有一个Random.nextChar或者Random.nextString的方法,那么就需要去吧这个6位数的验证码拆分开,一位一位的随机,然后拼接起来,则:

Random b=new Random();		//创建一个新的Random对象
int middle;
String string="";
for(int i=0;i<6;i++){
	int midIf=b.nextInt(3);		/*随机生成0,1,2三个数,如果随机到0则让验证码这一位置为数字,随机到1则让验证码这一位为大写字母,随机到2则让一位为小写字母*/
	if(midIf==0){
		middle=b.nextInt(10);		//随机生成一个0-9的数字给middle中
		string+=middle;
	}
	else if(midIf==1){
		middle=b.nextInt(26)+65;	//因为没有char,所以可以利用ASCII码来 *** 作,之后再把值强制转换为char就可以了.此处为大写字母A为65
		string+=(char)middle;
	}
	else{
		middle=b.nextInt(26)+97;		//此处为小写a,为97
		string+=(char)middle;
	}
	
}
System.out.println("验证码:"+string);			//输出验证码

那么这样随机的6位数验证码就生成好了,现在只需要进行判断就好了,整体的具体代码如下:

import java.util.Scanner;
import java.util.Random;
public UserPasswoed{
	public static void main(String[] args){
	int middle,aa=0;				//变量aa用来存储输错的次数
	Scanner a=new Scanner(System.in);
	Random b=new Random();
	while(true){
		System.out.println("请输入用户名:");
		String user=a.next();
		System.out.println("请输入密码:");
		String password=a.next();
		System.out.println("请输入和下面相同的验证码");
		String string="";
		for(int i=0;i<6;i++){
			int midIf=b.nextInt(3);		/*随机生成0,1,2三个数,如果随机到0则让验证码这一位置为数字,随机到1则让验证码这一位为大写字母,随机到2则让这一位为小写字母*/
			if(midIf==0){
				middle=b.nextInt(10);		//随机生成一个0-9的数字给middle中
				string+=middle;
				}
			else if(midIf==1){
				middle=b.nextInt(26)+65;	//因为没有char,所以可以利用ASCII码来 *** 作,之后再把值强制转换为char就可以了.大写字母A为65
				string+=(char)middle;
				}
			else{
				middle=b.nextInt(26)+97;		//此处为小写a,为97
				string+=(char)middle;
				}
			}
		System.out.println(string);
		String verify=a.next();
		if(user.equals("admin") && password.equals("mypassword")){
			if(verify.equals(string)){
				System.out.println("登录成功");
				break;
			}
			else{
				System.out.println("验证码错误");
			}
		}
	else{
		aa+=1;
		if(aa==3){
			System.out.println("连续输错三次,账户已冻结");
			break;
		}
		else{
			System.out.println("账户密码输入错误,请重新输入");
		}
	}
	}
	}
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/916200.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存