我是一个Java初学者,我的项目包括创建一个简单的程序来注册校友中心的用户。该进程创建一个ID,然后向新用户提供一个OTP。接下来是登录(输入ID:,输入OTP:)。
我的OTP验证方法不工作。似乎是IF出了问题。=声明时,进程直接跳转到ELSE条件。
有什么建议吗?
下面是我的代码:class Main {
static NewRegandLogin newRegAndLogin = new NewRegandLogin(null, null, null, null, null, null);
static ArrayList<NewRegandLogin> loginInformation = new ArrayList<>();
public static void main(String[] args) {
System.out.println(" WELCOME TO THE ALUMNI SHE-CODES SYSTEM ");
System.out.println("_________________________________n - New Alumni registration - n");
System.out.println("");
newRegAndLogin.registerNewGrad();
System.out.println();
System.out.println("_________________________________");
System.out.println();
System.out.println("Your new Alumni ID is: " + newRegAndLogin.getAlumniId());
System.out.println();
System.out.println("Your temporary password is:");
System.out.println(newRegAndLogin.oTp(8));
loginInformation.add(newRegAndLogin);
System.out.println("_________________________________");
System.out.println("_________________________________n - Alumni Login - n");
System.out.println("");
newRegAndLogin.login();
System.out.println("");
System.out.println("Please make a list of completed Courses: -->Enter 'S' to stop adding courses<--");
newRegAndLogin.setAlumniCourses();
System.out.println("_________________________________");
newRegAndLogin.setLinkedInPage();
loginInformation.add(newRegAndLogin);
//printAlumniProfile();
System.out.println("_________________________________");
newRegAndLogin.jobOffer();
}
void login() {
System.out.print("ID: ");
alumniIdImput = scanner.nextLine();
idVerification();
do {
System.out.println("Password (OTP if logging in for the first time): ");
passwordImput = scanner.nextLine();
oTpFromImput = passwordImput.toCharArray();
oTpVerification();
} while (isPasswordCorrect=false);
void oTpVerification() {
isPasswordCorrect = false;
if (oTpFromImput.equals(oTp(8))) {
isPasswordCorrect = true;
System.out.println("Logging In.....");
}else {
isPasswordCorrect = false;
System.out.println("Incorrect password.nPlease enter valid password: 8 alpha numeric
characters(Aa,123,@,#,$,%)");
}
}
这是oTp方法
char[] oTp (int length) {
String capitalChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
String smallChars = "abcdefghijklmnopqrstuvwxyz";
String numbers = "0123456789";
String symbols = "!@#$%^&*_-=+/.?<>";
String values = capitalChars + smallChars + numbers + symbols;
Random oneTimePassword = new Random();
char[] password = new char[length];
for(int i = 0; i<length;i++) {
password[i] = values.charAt(oneTimePassword.nextInt(values.length()));
}
return password;
}
看来你构建了一个猜谜游戏,而不是OTP验证码。
首先读取用户的OTP,然后随机生成一个与之比较的OTP。
基本上,您的代码期望用户猜测一个没有创建的随机8个字符的密码,这基本上是不可能的…
你需要先生成一个OTP,显示给用户,然后让他们输入。
我看到你的逻辑代码是在用户输入后生成OTP代码。这看起来很奇怪,兄弟。
无论何时调用oTp(8)
函数都会生成新的OTP。
Use应该先生成OTP,然后存储在某个地方,然后用户输入并比较。
您需要将生成的otp存储在某个地方。然后将其与输入的otp进行比较。现在你正在把它和其他的比较。而otp(8)总是返回一个新的otp。