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

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;
 
}

Deje una respuesta

Se debe registrar para escribir un comentario.