Indicar si un NIF o CIF es válido

Código PHP

PHP – Validaciones – nif, cif

Función que valida un NIF o CIF español.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
/**
* Class HelperValidate
*/
abstract class HelperValidate
{
/**
* Indica si un NIF/CIF es válido
*
* @param $str
*
* @return bool
*/
public static function isNif($str) : bool
{
/* normalizamos el formato */
$str = preg_replace('/[^0-9A-Z]/i', '', $str);
/* El formato es de un NIF o un NIE */
if (preg_match('/X?[0-9]{8}[A-Z]/i', $str)) {
/* para no duplicar código, eliminamos la X
en el caso de que sea un NIE */
$str = preg_replace('/^X/i', '', $str);
/* calculamos que letra corresponde
al número del DNI o NIE */
$stack = 'TRWAGMYFPDXBNJZSQVHLCKE';
$pos = substr($str, 0, 8) % 23;
if (strtoupper(substr($str, 8, 1)) == substr($stack, $pos, 1)) {
return true;
}
} /* El formato es el de un CIF */
else {
/* CIF */
if (preg_match('/[A-HK-NPQS][0-9]{7}[A-J0-9]/i', $str)) {
$sum = 0;
/* sumar los digitos en posiciones pares */
for ($i = 2; $i < strlen($str) - 1; $i += 2) {
$sum += substr($str, $i, 1);
}
/* Multiplicar los digitos en posiciones impares
por 2 y sumar los digitos del resultado */
for ($i = 1; $i < strlen($str) - 1; $i += 2) {
$t = substr($str, $i, 1) * 2;
/* agrega la suma de los digitos del
resultado de la multiplicación */
$sum += ($t > 9) ? ($t - 9) : $t;
}
/* Restamos el último digito de la suma actual
a 10 para obtener el control */
$control = 10 - ($sum % 10);
/* El control puede ser un número o una letra */
if (substr($str, 8, 1) == $control ||
strtoupper(substr($str, 8, 1)) ==
substr('JABCDEFGHI', $control, 1)) {
return true;
}
return false;
}
}
return false;
}
}
/** * Class HelperValidate */ abstract class HelperValidate { /** * Indica si un NIF/CIF es válido * * @param $str * * @return bool */ public static function isNif($str) : bool { /* normalizamos el formato */ $str = preg_replace('/[^0-9A-Z]/i', '', $str); /* El formato es de un NIF o un NIE */ if (preg_match('/X?[0-9]{8}[A-Z]/i', $str)) { /* para no duplicar código, eliminamos la X en el caso de que sea un NIE */ $str = preg_replace('/^X/i', '', $str); /* calculamos que letra corresponde al número del DNI o NIE */ $stack = 'TRWAGMYFPDXBNJZSQVHLCKE'; $pos = substr($str, 0, 8) % 23; if (strtoupper(substr($str, 8, 1)) == substr($stack, $pos, 1)) { return true; } } /* El formato es el de un CIF */ else { /* CIF */ if (preg_match('/[A-HK-NPQS][0-9]{7}[A-J0-9]/i', $str)) { $sum = 0; /* sumar los digitos en posiciones pares */ for ($i = 2; $i < strlen($str) - 1; $i += 2) { $sum += substr($str, $i, 1); } /* Multiplicar los digitos en posiciones impares por 2 y sumar los digitos del resultado */ for ($i = 1; $i < strlen($str) - 1; $i += 2) { $t = substr($str, $i, 1) * 2; /* agrega la suma de los digitos del resultado de la multiplicación */ $sum += ($t > 9) ? ($t - 9) : $t; } /* Restamos el último digito de la suma actual a 10 para obtener el control */ $control = 10 - ($sum % 10); /* El control puede ser un número o una letra */ if (substr($str, 8, 1) == $control || strtoupper(substr($str, 8, 1)) == substr('JABCDEFGHI', $control, 1)) { return true; } return false; } } return false; } }
/**
 * Class HelperValidate
 */
abstract class HelperValidate
{
    /**
     * Indica si un NIF/CIF es válido
     *
     * @param $str
     *
     * @return bool
     */
    public static function isNif($str) : bool
    {
        /* normalizamos el formato */
        $str = preg_replace('/[^0-9A-Z]/i', '', $str);
        
        /* El formato es de un NIF o un NIE */
        if (preg_match('/X?[0-9]{8}[A-Z]/i', $str)) {
            
            /* para no duplicar código, eliminamos la X 
               en el caso de que sea un NIE */
            $str = preg_replace('/^X/i', '', $str);
  
            /* calculamos que letra corresponde 
               al número del DNI o NIE  */
   
            $stack = 'TRWAGMYFPDXBNJZSQVHLCKE';
            $pos   = substr($str, 0, 8) % 23;
            
            if (strtoupper(substr($str, 8, 1)) == substr($stack, $pos, 1)) {
                return true;
            }
        } /* El formato es el de un CIF  */
        else {
            
             /* CIF */
            if (preg_match('/[A-HK-NPQS][0-9]{7}[A-J0-9]/i', $str))  {
                
                $sum = 0;
                
                /* sumar los digitos en posiciones pares */
                for ($i = 2; $i < strlen($str) - 1; $i += 2) {
                    $sum += substr($str, $i, 1);
                }
                
                /* Multiplicar los digitos en posiciones impares 
                   por 2 y sumar los digitos del resultado */
                for ($i = 1; $i < strlen($str) - 1; $i += 2) {
  
                    $t = substr($str, $i, 1) * 2;
   
                    /* agrega la suma de los digitos del 
                       resultado de la multiplicación */
                    $sum += ($t > 9) ? ($t - 9) : $t;
                }
                
                /* Restamos el último digito de la suma actual 
                   a 10 para obtener el control */
  
                $control = 10 - ($sum % 10);
                
                /* El control puede ser un número o una letra */
                if (substr($str, 8, 1) == $control ||
                    strtoupper(substr($str, 8, 1)) == 
                                substr('JABCDEFGHI', $control, 1)) {
                    return true;
                }
                
                return false;
            }
        }
        
        return false;
    }
}