Validar la referencia catastral en Javascript

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.

6 comentarios en «Validar la referencia catastral en Javascript»

  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 : )

    Responder
  2. ¡Muchas gracias por el algoritmo!

    Funciona perfectamente para fincas urbanas y rústicas, puesto que el algoritmo de control es el mismo, aunque la estructura de la referencia catastral sea diferente.

    Responder
    • Hola. He visto tu código para calcular la referencia catastral es genial . Lo que pasa es que para las rústicas no funciona bien.
      Sabes que formula se utiliza para calcular el DC en las rústicas.

      Gracias de antemano.

      Responder
  3. Hola,
    En primer lugar, gracias por el algoritmo.

    Sólo un par de comentarios:
    – El algoritmo no sirve para fincas rústicas
    – El algoritmo no sirve para las fincas ubicadas en Euskadi y Navarra, que si no recuerdo mal, suelen tener 14 dígitos.

    Por último, una opinión técnica: habitualmente los códigos de retorno son 0 cuando ha ido bien un determinado proceso y distinto de 0 cuando se produce un error.

    Un saludo.

    Responder

Deja un comentario

Pin It on Pinterest