Algoritmo de comprobación de DNI válido

3 de abril de 2008

El siguiente código verifica que la cadena suministrada sea un DNI válido. En realidad, para que un DNI sea válido, basta con que tenga entre 1 y 8 caracteres. Si lo que se desea es verificar un NIF o un NIE, con la letra asociada, es mejor consultar la entrada verificación de NIF/NIE.

El código de la verificación del DNI es el siguiente

public static boolean esDni(String dni){
 
	Pattern dniPattern = Pattern.compile("(\\d{1,8})");
	Matcher m = dniPattern.matcher(dni);
	if(m.matches()){
		return true;
	}
	else
		return false;
}

Algoritmo de verificación de cuenta de banco válida

26 de marzo de 2008

Este código realiza la verificación de si la cadena de entrada es una cuenta de banco válida, de 20 dígitos y con los dígitos de control correctos

public static boolean esCuentaBancaria (String cuenta){
 
	_log.debug("Cuenta del Banco "+cuenta);
 
	Pattern cuentaPattern = Pattern.compile("\\d{20}");
	Matcher m = cuentaPattern.matcher(cuenta);
	if(m.matches()){
		_log.debug("cuenta cumple el patrón (20 dígitos)");
 
		String banco = "00"+cuenta.substring(0,8);
		_log.debug("Banco (con 00) "+banco);
 
		int suma = Integer.parseInt(banco.substring(0,1))*1+
			Integer.parseInt(banco.substring(1,2))*2+
			Integer.parseInt(banco.substring(2,3))*4+
			Integer.parseInt(banco.substring(3,4))*8+
			Integer.parseInt(banco.substring(4,5))*5+
			Integer.parseInt(banco.substring(5,6))*10+
			Integer.parseInt(banco.substring(6,7))*9+
			Integer.parseInt(banco.substring(7,8))*7+
			Integer.parseInt(banco.substring(8,9))*3+
			Integer.parseInt(banco.substring(9,10))*6;
 
		int control= 11 - (suma%11);
		_log.debug("control banco después del modulo 11 "+control);
		if (control==10)
			control=1;
		else if (control==11)
			control=0;
 
		_log.debug("control "+control );
 
		int controlBanco = Integer.parseInt(cuenta.substring(8,9));
		if (controlBanco!=control)
			return false;
		_log.debug("El control del banco está bien");
 
		_log.debug("cuenta "+cuenta.substring(10,20));
 
		suma = Integer.parseInt(cuenta.substring(10,11))*1+
			Integer.parseInt(cuenta.substring(11,12))*2+
			Integer.parseInt(cuenta.substring(12,13))*4+
			Integer.parseInt(cuenta.substring(13,14))*8+
			Integer.parseInt(cuenta.substring(14,15))*5+
			Integer.parseInt(cuenta.substring(15,16))*10+
			Integer.parseInt(cuenta.substring(16,17))*9+
			Integer.parseInt(cuenta.substring(17,18))*7+
			Integer.parseInt(cuenta.substring(18,19))*3+
			Integer.parseInt(cuenta.substring(19,20))*6;
 
		control= 11 - (suma%11);
		_log.debug("control cuenta después del modulo 11 "+control);
		if (control==10)
			control=1;
		else if (control==11)
			control=0;
 
		_log.debug("control "+control);
 
		int controlcuenta = Integer.parseInt(cuenta.substring(9,10));
		if (controlcuenta!=control)
			return false;
		else
			return true;
 
	}
	else
		return false;
 
}

Verificación de NIF o NIE válido

19 de marzo de 2008

El siguiente código realiza la verificación de que la cadena suministrada como entrada sea un NIF o NIE válido. Un NIE sólo lleva una X, Y o Z  antepuesta al resto de la cadena, por lo que si la cadena comienza por X, Y o Z, se elimina de la cadena a verificar.

public static boolean isNifNie(String nif){
 
   _log.debug("NIF "+nif);
   //si es NIE, eliminar la x,y,z inicial para tratarlo como nif
   if (nif.toUpperCase().startsWith("X")||nif.toUpperCase().startsWith("Y")||nif.toUpperCase().startsWith("Z"))
nif = nif.substring(1);
 
Pattern nifPattern =
Pattern.compile("(\\d{1,8})([TRWAGMYFPDXBNJZSQVHLCKEtrwagmyfpdxbnjzsqvhlcke])");
Matcher m = nifPattern.matcher(nif);
if(m.matches()){
String letra = m.group(2);
//Extraer letra del NIF
String letras = "TRWAGMYFPDXBNJZSQVHLCKE";
int dni = Integer.parseInt(m.group(1));
dni = dni % 23;
String reference = letras.substring(dni,dni+1);
 
if (reference.equalsIgnoreCase(letra)){
_log.debug("son iguales. Es NIF. "+letra+" "+reference);
return true;
}else{
_log.debug("NO son iguales. NO es NIF. "+letra+" "+reference);
return false;
}
}
else
return false;
}

Como verificar si un número es par o impar

10 de marzo de 2008

En esta entrada vamos a implementar 2 sencillos métodos para verificar si un entero, que será la variable, es un número par o un número impar. Tener implementados estos métodos den verificación en una clase de utilidades matemáticas nos permitirá posteriormente acceder a los métodos sin tener que pensar en su implementación otra vez cuando nos surja la necesidad.

El hecho de declarar ambos métodos que realizan la verificación como estáticos permitirá posteriormente invocar el método sin necesidad de crear una nueva instancia de la clase.

public final class UtilidadesMatematicas {
	public UtilidadesMatematicas () {
	}
 
	public static boolean esPar(int x) {
		if ((x % 2) == 0) {
			return true;
		}
 
		return false;
	}
 
	public static boolean esImpar(int x) {
		return !esPar(x);
	}
}