Tema: ayudaa
Ver Mensaje Individual
  #3 (permalink)  
Antiguo 30/04/2009, 06:56
jesuscoro
 
Fecha de Ingreso: noviembre-2008
Mensajes: 115
Antigüedad: 16 años, 4 meses
Puntos: 4
Respuesta: ayudaa

A ver si te sirve esto. Creo que he comprobado todos los casos.

Código:
    public static int nivelPassword(String password) throws Exception{
        int NIVEL_BAJO = 0;
        int NIVEL_MEDIO = 1;
        int NIVEL_ALTO = 2;

        int size = password.length();

        String minusculas = "abcdefghijklmnopqrstuvwxyz";
        String mayusculas = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        String numeros = "0123456789";
        String caracteresEspeciales = "@!¡#$%&/()=?¿<>-{}[]+*|\\";

        boolean empiezaMinusculas = false;
        boolean empiezaMayusculas = false;
        boolean empiezaNumero = false;
        boolean empiezaCarater = false;

        boolean minusculasMayusculas = false;
        boolean minusculasNumeros = false;
        boolean mayusculasNumeros = false;

        boolean variedadSimbolos = false;

        //Primero comprueba la longitud. No importa que sean mayusculas o minusculas
        if(size<7 || size>10)
            throw new Exception("El tamaño tiene que estar entre 6 y 10");

        //Comprobamos si el primer caracter es un numero, minuscula o mayuscula o caracter especial
        
        if(!(minusculas.indexOf(password.charAt(0))<0))
            empiezaMinusculas = true;
        if(!(mayusculas.indexOf(password.charAt(0))<0))
            empiezaMayusculas = true;
        if(!(numeros.indexOf(password.charAt(0))<0))
            empiezaNumero = true;
        if(!(caracteresEspeciales.indexOf(password.charAt(0))<0))
            empiezaCarater = true;

        //Si empieza por un caracter raro, ya no hace falta saber mas
        if(empiezaCarater)
            return NIVEL_ALTO;

        //Una vez que sabemos por que empieza, comprobamos si todos son iguales
        if(empiezaMinusculas){
            for(int i=0;i<size;i++){
                //Si tiene minusculas y mayusculas
                if(!(mayusculas.indexOf(password.charAt(i))<0)){
                    minusculasMayusculas = true;
                }
                //Si tiene minusculas y numeros
                if(!(numeros.indexOf(password.charAt(i))<0)){
                    minusculasNumeros = true;
                }
            }
        }
        if(empiezaMayusculas){
            for(int i=0;i<size;i++){
                //Si tiene mayusculas y minusculas
                if(!(minusculas.indexOf(password.charAt(i))<0)){
                    minusculasMayusculas = true;
                }
                //Si tiene mayusculas y numeros
                if(!(numeros.indexOf(password.charAt(i))<0)){
                    mayusculasNumeros = true;
                }
            }
        }
        if(empiezaNumero){
            for(int i=0;i<size;i++){
                //Si tiene numeros y minusculas
                if(!(minusculas.indexOf(password.charAt(i))<0)){
                    minusculasNumeros = true;
                }
                //Si tiene numeros y mayusculas
                if(!(mayusculas.indexOf(password.charAt(i))<0)){
                    mayusculasNumeros = true;
                }

            }
        }

        //Ya sabes si tienes una mezcla de numeros y letras mayusculas o minusculas
        //Si hay mezcla, alguno sera true, si no es BAJO
        if(!mayusculasNumeros && !minusculasMayusculas && !minusculasNumeros)
            return NIVEL_BAJO;
        else{
            //Coprobamos si hay algun caracter raro
            for(int i=0;i<size;i++){
                if(caracteresEspeciales.indexOf(password.charAt(i))>0){
                    variedadSimbolos = true;
                }
            }
            //Si lo hay es ALTO
            if(variedadSimbolos)
                return NIVEL_ALTO;
            //Si no MEDIO
            else                
                return NIVEL_MEDIO;
        }
    }
Comprueba el array de caracteres especiales, que a lo mejor se me paso alguno

Entretenido ejercicio.