PHP – Validar CIF

En el artículo anterior vimos cómo validar un NIF con PHP, y en éste, veremos cómo validad un CIF con PHP. Una función sencilla que devuelve true si es correcto o false, si no lo es.

Aquí está la función en PHP que valida un CIF:

function validateCif ($cif) {
      $cif_codes = 'JABCDEFGHI';

      $sum = (string) $this->getCifSum ($cif);
      $n = (10 - substr ($sum, -1)) % 10;

      if (preg_match ('/^[ABCDEFGHJNPQRSUVW]{1}/', $cif)) {
        if (in_array ($cif[0], array ('A', 'B', 'E', 'H'))) {
          // Numerico
          return ($cif[8] == $n);
        } elseif (in_array ($cif[0], array ('K', 'P', 'Q', 'S'))) {
          // Letras
          return ($cif[8] == $cif_codes[$n]);
        } else {
          // Alfanumérico
          if (is_numeric ($cif[8])) {
            return ($cif[8] == $n);
          } else {
            return ($cif[8] == $cif_codes[$n]);
          }
        }
      }

      return false;
    }

Por un lado, tenemos la utilización de la función preg_match que mira si una string cumple con un formato regular concreto. Es muy utilizada para ver si una string cumple con el formato de email, de enlace web,… La complicación viene en saber crear la regla para indicar a la función cómo debe ser la string. Tiene un «lenguaje» propio y no es sencillo. Para más información al respecto, podéis visitar la documentación php sobre preg_match.

Si os fijáis esta función, llama a otra que valida que la letra sea correcta, la función getCifSum. Es la función encargada de mirar si la letra del CIF es la correcta. Veamos esa función:

function getCifSum($cif) {
      $sum = $cif[2] + $cif[4] + $cif[6];

      for ($i = 1; $i<8; $i += 2) {
        $tmp = (string) (2 * $cif[$i]);

        $tmp = $tmp[0] + ((strlen ($tmp) == 2) ?  $tmp[1] : 0);

        $sum += $tmp;
      }

      return $sum;
    }

Con estas dos funciones, podemos ver si el CIF es válido. Hemos visto muchas más funciones que también son válidas por internet, eso dependrá de vuestras necesidades.

La verdad es que mirar si un CIF es correcto en PHP, no es sencillo. Hay que tirar un poco de Internet. Espero que os sea de utilidad estas funciones, sabiendo que pueden perfeccionarse y optimizarse.

Más información