/*
clase llamada Password:
atributos longitud y contraseña . Por defecto,
longitud =8.
Los constructores:
Un constructor por defecto.
Un constructor con la longitud que nosotros le pasemos.
Generara una contraseña aleatoria con esa longitud.
Los métodos:
esFuerte(): devuelve un booleano si es fuerte o no, para que sea
fuerte debe tener mas de 2 mayúsculas, mas de 1 minúscula y mas de 5 números.
generarPassword(): genera la contraseña del objeto con la longitud que tenga.
Método get para contraseña y longitud.
Método set para longitud.
clase clase ejecutable:
Crea un array de Passwords con el tamaño que tu le indiques por teclado.
Crea un bucle que cree un objeto para cada posición del array.
Indica también por teclado la longitud de los Passwords (antes de bucle).
Crea otro array de booleanos donde se almacene si el password del array
de Password es o no fuerte (usa el bucle anterior).
Al final, muestra la contraseña y si es o no fuerte (usa el bucle anterior).
Usa este simple formato:
contraseña1 valor_booleano1
contraseña2 valor_bololeano2
*/
import java.util.*;
public class Password{
private int longitud;
private String contrasenia;
private final int LONG_DEFUAULT=8;
private char [] abecedarioMayusculas = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M','N','O','P','Q','R','S','T','U','V','W', 'X','Y','Z'};
private char [] abecedarioMinusculas ={'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm','n','o','p','q','r','s','t','u','v','w', 'x','y','z'};
private char[] numeros={'0','1','2','3','4','5','6','7','8','9'};
//constructores
public Password(){
this.longitud=LONG_DEFUAULT;
this.contrasenia=contrasenia;
}
public Password(int longitud){
this.longitud=longitud;
this.contrasenia=generarPassword(longitud);
}
//getting
public int getLongitud(){
return this.longitud;
}
public String getContrasenia(){
return this.contrasenia;
}
//setting
public void setLongitud(int longitud){
this.longitud=longitud;
}
public void setContrasenia(String contrasenia){
this.contrasenia=contrasenia;
}
public String generarPassword(int longitud){
int aleatorio,aleatorio1;
int contMinusculas=0;
int contMayusculas=0;
int contNumeros=0;
int cont=0;
int i=0;
int longitudMayusculas=(longitud*3/11);
int longitudNumeros=(longitud*6/11);
int longitudMinusculas=(longitud-longitudMayusculas-longitudNumeros);
StringBuilder str=new StringBuilder();
Random rnd=new Random();
while(longitud>cont){
aleatorio=(int)(rnd.nextDouble()*3);
if(aleatorio==0 && contMinusculas<longitudMinusculas){
aleatorio1=(int) (rnd.nextDouble()*(abecedarioMinusculas.length-1));
str.append(abecedarioMinusculas[aleatorio1]);
cont++;
contMinusculas++;
}
if(aleatorio==1 && contMayusculas<longitudMayusculas){
aleatorio1=(int) (rnd.nextDouble()*(abecedarioMayusculas.length-1));
str.append(abecedarioMayusculas[aleatorio1]);
cont++;
contMayusculas++;
}
if(aleatorio==2 && contNumeros<longitudNumeros){
aleatorio1=(int) (rnd.nextDouble()*9+0);
str.append(aleatorio1);
cont++;
contNumeros++;
}
}
return str.toString();
}
public boolean isEsFuerte(String contrasenia){
char comparar;
boolean encontrado=false;
boolean cond=false;
int contNumeros=0;
int contMayus=0;
int contMinus=0;
int k=0;
for(int i=0; i<this.longitud ;i++){
comparar=contrasenia.charAt(i);
k=0;
encontrado=false;
while(!(k==(26-1)) && !(comparar==(abecedarioMayusculas[k]))){
k++;
}
if(comparar==(abecedarioMayusculas[k])){
contMayus++;
encontrado=true;
}
k=0;
while(encontrado==false && !(k==(26-1)) && !(comparar==(abecedarioMinusculas[k]))){
k++;
}
if(comparar==(abecedarioMinusculas[k])){
contMinus++;
encontrado=true;
}
k=0;
while(encontrado==false && !(k==(10-1)) && !(comparar==(numeros[k]))){
k++;
}
if(comparar==(numeros[k])){
contNumeros++;
}
}
if(contMinus>1 && contMayus>2 && contNumeros>5){
cond=true;
}
return cond;
}
}
//@udlea2014
import java.util.*;
public class Ejecutable{
public static void main(String[]args){
int numeroDePass;
Scanner tec=new Scanner(System.in);
System.out.println("Ingrese el numero de contraseñas a construir");
numeroDePass=tec.nextInt();
Password pass[]=new Password[numeroDePass];
String cond,fuerte;
int longitud;
for(int i=0;i<numeroDePass;i++){
System.out.println("Desea ingresar la longitud de la contraseña? ");
cond=tec.next();
if(cond.toLowerCase().equals("si")){
System.out.println("Ingrese su longitud y se creara automaticamente su contraseña ");
longitud=tec.nextInt();
pass=new Password(longitud);
}else{
pass=new Password();
System.out.println("Escriba su contraseña de 8 caracteres:");
pass.setContrasenia(tec.next());
}
}
for(int i=0;i<numeroDePass;i++){
if(pass.isEsFuerte(pass.getContrasenia())==true){
fuerte="fuerte!";
}else{
fuerte="debil";
}
System.out.println("la contraseña Nº: "+(i+1)+" es igual a: "+pass.getContrasenia()+" "+" " +fuerte);
}
}
}
//@udlea2014