A Verificar O Código Da Senha
Descrição Do Problema:
Alguns sites impõem certas regras para senhas. Escreva um método que verifique se uma string é uma senha válida. Suponha que a regra da senha é a seguinte:- uma senha deve ter pelo menos oito caracteres.
- uma senha consiste apenas em letras e dígitos.
- uma senha deve conter pelo menos dois dígitos.
Escreva um programa que pede ao utilizador para introduzir uma senha e mostra "senha válida" se a regra é seguida ou "senha inválida" caso contrário.
Isto é o que tenho até agora.import java.util.*;
import java.lang.String;
import java.lang.Character;
/**
* @author CD
* 12/2/2012
* This class will check your password to make sure it fits the minimum set requirements.
*/
public class CheckingPassword {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Please enter a Password: ");
String password = input.next();
if (isValid(password)) {
System.out.println("Valid Password");
} else {
System.out.println("Invalid Password");
}
}
public static boolean isValid(String password) {
//return true if and only if password:
//1. have at least eight characters.
//2. consists of only letters and digits.
//3. must contain at least two digits.
if (password.length() < 8) {
return false;
} else {
char c;
int count = 1;
for (int i = 0; i < password.length() - 1; i++) {
c = password.charAt(i);
if (!Character.isLetterOrDigit(c)) {
return false;
} else if (Character.isDigit(c)) {
count++;
if (count < 2) {
return false;
}
}
}
}
return true;
}
}
Quando eu executar o programa que só verifica o comprimento da senha, não consigo descobrir como certificar-me de que está a verificar as letras e os dígitos, e ter pelo menos dois dígitos na senha.
1
4 answers
Está quase. Existem alguns erros no entanto:
- não estás a ler todos os caracteres da password ({[[0]} está errado)
- começa com uma contagem de 1 dígitos em vez de 0
- verifica-se que a contagem dos algarismos é de pelo menos 2 assim que se encontra o primeiro algarismo, em vez de O verificar depois de ter digitalizado todos os caracteres
1
Author: JB Nizet, 2012-12-02 22:24:27
Como foi respondido anteriormente, você deve chek todos os caracteres de senha primeiro. Conte os seus dígitos e, finalmente, verifique se a contagem é menor que 2. Aqui está o código de referência.
if (password.length() < 8) {
return false;
} else {
char c;
int count = 0;
for (int i = 0; i < password.length(); i++) {
c = password.charAt(i);
if (!Character.isLetterOrDigit(c)) {
return false;
} else if (Character.isDigit(c)) {
count++;
}
}
if (count < 2) {
return false;
}
}
return true;
}
0
Author: istovatis, 2012-12-02 22:43:33
Suponha que uma senha válida tem:
- 8 ou mais caracteres, mas não mais de 16 caracteres
- um ou mais caracteres maiúsculos
- um ou mais caracteres minúsculos
- um ou mais dígitos
- um ou mais caracteres especiais (como $, @, or !)
Código:
import java.util.Scanner;
public class Password {
public static void main(String[] args) {
// TODO Auto-generated method stub
int min =8;
int max=16;
int digit=0;
int special=0;
int upCount=0;
int loCount=0;
String password;
Scanner scan = new Scanner(System.in);
System.out.println(" Enter Your Password:");
password = scan.nextLine();
if(password.length()>=min&&password.length()<=max){
for(int i =0;i<password.length();i++){
char c = password.charAt(i);
if(Character.isUpperCase(c)){
upCount++;
}
if(Character.isLowerCase(c)){
loCount++;
}
if(Character.isDigit(c)){
digit++;
}
if(c>=33&&c<=46||c==64){
special++;
}
}
if(special>=1&&loCount>=1&&upCount>=1&&digit>=1){
System.out.println(" Password is good:");
}
}
if(password.length()<min){
for(int i =0;i<password.length();i++){
char c = password.charAt(i);
if(Character.isLowerCase(c)){
loCount++;
}
}
if(loCount>0){
System.out.println(" Password must be atleat "+min+" characters:");
System.out.println(" You need atleast one upper case chracter:");
System.out.println(" You need atleast one digit:");
System.out.println(" You need atleast one special chracter:");
}
}
else if(password.length()<min&&upCount>1){
for(int i =0;i<password.length();i++){
char c =password.charAt(i);
if(Character.isLowerCase(c)){
loCount++;
}
if(Character.isUpperCase(c)){
upCount++;
}
}
if(loCount>0&&upCount>0){
System.out.println(" Password must be atleast "+min+" chracters:");
System.out.println(" You need atleast one digit:");
System.out.println(" You need atleast one special chracter:");
}
}
if(password.length()>max||password.length()>=max&&upCount>1&&loCount>1&&digit>1){
System.out.println(" Password is too long.Limit is "+max+" chracters:");
System.out.println(" You need atleast one special chracter:");
}
if(password.length()>=min&&password.length()<=max&&loCount>0&&upCount>0&&digit>0&&special==0){
System.out.println(" You need atleast a special chracter");
}
if(password.length()>=min&&password.length()<=max&&loCount>0&&upCount>0&&digit==0&&special==0){
System.out.println(" You need atleast one digit:");
System.out.println(" You need atleast one special chracter:");
}
}
}
0
Author: Abdul Hanan Khan, 2016-02-21 19:38:48
package com.parag;
/*
* @author Parag Satav
*/
public boolean check(String password) {
boolean flagUppercase = false;
boolean flagLowercase = false;
boolean flagDigit = false;
boolean flag = false;
if (password.length() >= 10) {
for (int i = 0; i < password.length(); i++) {
if (!Character.isLetterOrDigit(password.charAt(i))) {
return false;
}
if (Character.isDigit(password.charAt(i)) && !flagDigit) {
flagDigit = true;
}
if (Character.isUpperCase(password.charAt(i)) && !flagUppercase) {
flagUppercase = true;
}
if (Character.isLowerCase(password.charAt(i)) && !flagLowercase) {
flagLowercase = true;
}
}
}
if (flagDigit && flagUppercase && flagLowercase) {
flag = true;
System.out.println("Success..");
} else
System.out.println("Fail..");
return flag;
}
-1
Author: Parag Satav, 2016-03-06 11:23:10