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:
- Debes crear un método
static String getTipo(String dni_nie), que recibe unStringcon un dni o nie y, valiéndose del métodoesNIE(), devuelve "NIE" o "DNI" en función del tipo de documento enviado.- 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étodogetTipo().
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

