Logo JavaScript

Validar la referencia catastral en Javascript

En JavaScript, Programación por trellat1 Comentario

La referencia catastral es un conjunto de 20 caracteres alfanuméricos que se utilizan para situar inequívocamente cualquier inmueble, ya que es obligatorio tener uno asociado por inmueble y se trata de un identificador oficial. Se usa en múltiples sitios y seguramente, la última vez que lo hayas usado haya sido para formalizar la declaración de la renta, para declarar los bienes inmuebles que posees o para indicar la referencia catastral de tu vivienda habitual.

Por ello, es fácil que si se está implementando un formulario en una web, sea interesante capturar esta información y, por lo tanto, validar la referencia catastral con Javascript antes de mandarla al servidor para procesarla. Al ser un código largo, puede conllevar errores en la transcripción, lo que lo hace interesante para ser validado antes del envío al servidor.

Un ejemplo de referencia catastral de una vivienda podría ser el siguiente, con los campos desglosados según la definición.

Ejemplo de Referencia Catastral Urbana

Ejemplo de Referencia Catastral Urbana

El código de la función es el siguiente. El único parámetro que se le pasa es la referencia catastral en sí.

function validarReferenciaCatastral(referenciaCatastral)
{
    //Valor por el que se debe multiplicar cada posición de cada subcadena
    var pesoPosicion=[13,15,12,5,4,17,9,21,3,7,1];
    var letraDc='MQWERTYUIOPASDFGHJKLBZX';
    
    //Sólo se comprueban las referencias catastrales con 20 carácteres alfanuméricos,
	//los dos últimos corresponden a los dígitos de control.
	if(referenciaCatastral===null || referenciaCatastral.length!==20)
    {
        return -1;
    }
    referenciaCatastral=referenciaCatastral.toUpperCase();
	
    //Para calcular cada dígito de control se utilizan siguientes subcadenas
	var cadenaPrimerDC=(referenciaCatastral.substring(0,7) + referenciaCatastral.substring(14,18)).toUpperCase();
    var cadenaSegundoDC=(referenciaCatastral.substring(7,14) + referenciaCatastral.substring(14,18)).toUpperCase();
    
    var cadenasDC=[cadenaPrimerDC, cadenaSegundoDC];
    var dcCalculado='';
        
	cadenasDC.forEach(function(cadena) 
    {
        var sumaDigitos=0;
        
        /*
            Para el cálculo de cada dígito de control, se deben de sumar cada
            uno de los carácteres de cada cadena.
            Si el carácter no es numérico el valor corresponde de la siguiente 
            manera: A = 1, B = 2, ..., Z = 27.
        */
		cadena.split('').forEach(function(caracter, posicion)
        {
            valorCaracter=caracter;
            
            if(caracter>='A' && caracter<='N')
            {
                valorCaracter=caracter.charCodeAt()-64;
            }
            else if(caracter==='Ñ')
            {
                valorCaracter=15;
            }
            else if(caracter>'N')
            {
                valorCaracter=caracter.charCodeAt()-63;
            }
            
            sumaDigitos=(sumaDigitos+(valorCaracter*pesoPosicion[posicion]))%23;
            
            
        });
        
        //Valor del dígito de control calculado
        dcCalculado+=letraDc.charAt(sumaDigitos);
        
    });
    
    if(dcCalculado!==referenciaCatastral.substring(18,20))
    {
        return 0;
    }
    return 1;
    
}

 

Una vez llamada la función para validar la referencia catastral, puede devolver uno de los siguientes códigos:

  • -1: formato incorrecto, la referencia catastral no tiene 20 caracteres alfanuméricos, que es la longitud obligatoria.
  • 0: la referencia catastral no es válida, los dígitos de control (los dos últimos, posiciones 19 y 20) son incorrectos.
  • 1: la referencia catastral es válida.

Comentarios

  1. Muchas gracias por el aporte, me ha servido de ayuda para validar la referencia catastral urbana.

    Pero al intentar validar una referencia catastral rústica parece que no sigue el mismo sistema de verificación.
    ¿Sabría indicar como calcular los dígitos de control en el caso de una catastro rústico? o donde consultar los cálculos necesarios, ya que entiendo que la diferencia será en los pesos de las posiciones o la secuencia de letras de control.

    Muchas gracias : )

Deja un comentario