docenciait / ProgramacionDAW

0 stars 0 forks source link

Ejemplo propuesto NIF #6

Open ivanjimenez opened 4 years ago

ivanjimenez commented 4 years ago
package unidad5;

public class GestDni {

    private int numDNI;
    //private String numNIF;
    private static final String LETRAS_DNI= "TRWAGMYFPDXBNJZSQVHLCKE";

    public int obtenerDNI() {return this.numDNI;}
    public String obtenerNIF() {
        char letra = calcularLetraNif(numDNI);
        return Integer.toString(numDNI)+letra;
    }

    public void establecer(int dni) throws Exception{
        if (dni > 0 && dni < 99999999) {
            this.numDNI = dni;
        }
        else throw new Exception("DNI no válido" +  dni);
    }
    public void establecer(String nif) throws Exception{
        if (validarNIF(nif)) {
            this.numDNI = GestDni.extraerNumDni(nif);
        }
        else {
            throw new Exception("Nif no válido" + nif);
        }
    }

    private static char calcularLetraNif(int dni) {
        return LETRAS_DNI.charAt(dni % 23);
    }

    private static char extraerLetraNif(String nif) {
        return nif.charAt(nif.length()-1);

    }

    private static int extraerNumDni(String nif) {
        return Integer.parseInt(nif.substring(0,nif.length()-1));

    }

    private boolean validarNIF(String nif){

        int num = extraerNumDni(nif);
        char letra = extraerLetraNif(nif);
        boolean valido = true;
        if (nif == null)
            valido = false;
        else {
            if (letra == calcularLetraNif(num)) {
                valido = true;
            }
            else valido = false;
        }
        return valido;
    }

    public static void main(String[] args) throws Exception {
        GestDni dni = new GestDni();
        dni.establecer("54235828B");
        System.out.println(dni.obtenerDNI() +" "+dni.obtenerNIF());

    }
}