Programming

T03-001-03 Modificación de requisitos de una aplicación.

Enunciado

El siguiente cambio que nos proponen afecta a más métodos, ya que nos piden desarrollar un método getTipo(), que nos devuelve "DNI" o "NIE" en función del tipo de documento que se haya insertado. Por lo tanto:

  1. Debes crear un método static String getTipo(String dni_nie), que recibe un String con un dni o nie y, valiéndose del método esNIE(), devuelve "NIE" o "DNI" en función del tipo de documento enviado.
  2. En el main, el siguiente código
                if (esNIE(dni_nie)) {
                    dni = convierteNIE(dni_nie);
                    tipo = "NIE";
                } else {
                    dni = dni_nie;
                    tipo = "DNI";
                }

    deberás actualizarlo a
                if (tipo.equals("NIE")) {
                    dni = convierteNIE(dni_nie);
                } else {
                    dni = dni_nie;
                }

    por lo que previamente deberás haber invocado al método getTipo().

Solución


											
package validadni; import java.util.Scanner; public class ValidaDNI { static Scanner sc = new Scanner(System.in); public static void main(String[] args) { String dni_nie, tipo, dni; long numero; char letra; while (!(dni_nie = leeDniNie()).equals("0")) { tipo = getTipo(dni_nie); if (tipo.equals("NIE")) { dni = convierteNIE(dni_nie); } else { dni = dni_nie; } dni = dni + letraControl(dni); if (esValido(dni)) { escribeMensajeValido(tipo); } else { escribeMensajeNoValido(tipo); } } } static String leeDniNie() { return (sc.nextLine()).toUpperCase(); } static boolean esNIE(String dni_nie) { char primera; boolean esNieBoolean = false; primera = dni_nie.charAt(0); if (primera == 'X' || primera == 'Y' || primera == 'Z') { esNieBoolean = true; } return esNieBoolean; } static String convierteNIE(String dni_nie) { String numeroLetra; char letraNIE = dni_nie.charAt(0); switch (letraNIE) { case 'X': numeroLetra = "0"; break; case 'Y': numeroLetra = "1"; break; case 'Z': numeroLetra = "2"; break; default: numeroLetra = "9999"; } return numeroLetra + dni_nie.substring(1); } static long getNumero(String dni) { return Integer.parseInt(dni.substring(0, dni.length() - 1)); } static char getLetra(String dni) { return dni.charAt(dni.length() - 1); } static char letraControl(String dni) { char letraControl = '*'; long numero = Integer.parseInt(dni); if (numero <= 99999999) { int resto = (int) numero % 23; String letras = "TRWAGMYFPDXBNJZSQVHLCKE"; letraControl = letras.charAt(resto); } System.out.println(dni + letraControl); return letraControl; } static boolean esValido(String dni) { char letraControl; long numero = getNumero(dni); char letra = getLetra(dni); boolean valido = false; if (numero <= 99999999) { int resto = (int) numero % 23; String letras = "TRWAGMYFPDXBNJZSQVHLCKE"; letraControl = letras.charAt(resto); valido = (letra == letraControl); } return valido; } static void escribeMensajeValido(String tipo) { System.out.println(tipo + " Validado"); } static void escribeMensajeNoValido(String tipo) { System.out.println(tipo + " No validado"); } static String getTipo(String dni_nie) { String tipo; if (esNIE(dni_nie)) { tipo = "NIE"; } else { tipo = "DNI"; } return tipo; } }

Input

Y2345678 12345678 X2345678 23456789 0
Y2345678 X2345678 23456789 12345678 0

Output

12345678Z NIE Validado 12345678Z DNI Validado 02345678T NIE Validado 23456789D DNI Validado
12345678Z NIE Validado 02345678T NIE Validado 23456789D DNI Validado 12345678Z DNI Validado