lunes, 10 de febrero de 2014

Unidad 3: Ejercicio 6

/*
6. Verificar si una cadena de texto leída por teclado es un NIF correcto o no.
* Suponer que los NIFs tienen 8 dígitos y  a continuación una letra
* (no importa que sea mayúscula o minúscula).
PISTAS: dos condiciones que debe cumplir el NIF:
* tener 9 caracteres y que el último sea una letra.
* Comprobado esto, verificar que el resto de caracteres son dígitos.
Usar el método length() de java.lang.String para conocer el número de caracteres de una cadena de texto.
Usar el método estático isLetter(char c) de java.lang.Character para comprobar que un carácter es una letra.
Usar el método estático isDigit(char c) de java.lang.Character para comprobar que un carácter es un dígito.
Usar el método substring(int inicio, int fin) de java.lang.String para obtener la parte numérica del nif

*/
package unidad3ejercicio6;

import java.util.Scanner;

/**
*
* @author Juan
*/
public class Unidad3Ejercicio6 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        char [] letraDni= {'T','R','W','A','G','M','Y','F','P','D','X','B','N','J','Z','S','Q','V','H','L','C','K','E'};
        String numDni;
        Scanner leo = new Scanner(System.in);
        boolean dniCorrecto = true;
        int cont =0;
 

       int parteNumerica=0;
       
        System.out.println("Introduzca su NIF: ");
        numDni= leo.nextLine();
        numDni= numDni.trim();
        if (numDni.length()!=9)
        {
            System.out.println("El número de dígitos de su NIF es incorrecto");
            dniCorrecto= false;
        }
        else {
            while (dniCorrecto && cont < 8)  {
                if (Character.isDigit(numDni.charAt(cont))) ++cont;
                else {
                    System.out.println("Los números de su NIF son incorrectos - ha introducido un carácter en lugar de un número");
                    dniCorrecto=false;
                }
            
            }
           
            if (dniCorrecto){
                parteNumerica = Integer.parseInt(numDni.substring(0, 8));
                if (Character.isLetter(numDni.toUpperCase().charAt(8)) && letraDni[parteNumerica%23]!=numDni.toUpperCase().charAt(8)){
                    System.out.println("El carácter de verificación o su NIF  es incorrecto");
                    dniCorrecto=false;
                }
            }
                                  
        }
     if (dniCorrecto) {
         System.out.println( " NIF correcto");
         System.out.println( "Número: " + parteNumerica + " Letra: " + numDni.toUpperCase().charAt(8) );
     }
    
     else System.out.println( " NIF erróneo");
    
   
    }
}