Cuando se necesita validar un CIF-NIF lo primero que te viene a la cabeza es que hay varios tipos, no me voy a explayar, esta todo muy bien explicado en la Wikipedia:
El caso es que es la típica historia que empaquetas en una función y te olvidas:
function cif_validation ($cif) { $cif = strtoupper($cif); if (preg_match('~(^[XYZ\d]\d{7})([TRWAGMYFPDXBNJZSQVHLCKE]$)~', $cif, $parts)) { $control = 'TRWAGMYFPDXBNJZSQVHLCKE'; $nie = array('X', 'Y', 'Z'); $parts[1] = str_replace(array_values($nie), array_keys($nie), $parts[1]); $cheksum = substr($control, $parts[1] % 23, 1); return ($parts[2] == $cheksum); } elseif (preg_match('~(^[ABCDEFGHIJKLMUV])(\d{7})(\d$)~', $cif, $parts)) { $checksum = 0; foreach (str_split($parts[2]) as $pos => $val) { $checksum += array_sum(str_split($val * (2 - ($pos % 2)))); } $checksum = ((10 - ($checksum % 10)) % 10); return ($parts[3] == $checksum); } elseif (preg_match('~(^[KLMNPQRSW])(\d{7})([JABCDEFGHI]$)~', $cif, $parts)) { $control = 'JABCDEFGHI'; $checksum = 0; foreach (str_split($parts[2]) as $pos => $val) { $checksum += array_sum(str_split($val * (2 - ($pos % 2)))); } $checksum = substr($control, ((10 - ($checksum % 10)) % 10), 1); return ($parts[3] == $checksum); } return false; }
El funcionamiento es tan sencillo como llamar a la función con un CIF-NIF y te devuelve true o false según sea válido o no.
Saludos
Hace ya tiempo de mi última entrada de apuntes de electrónica. Fue la entrada sobre…
Buscando multímetros económicos encontré el Zoyi ZT-300AB, por unos 20€ tenemos un aparato más que…
En mi búsqueda de multímetros interesantes encontré a un fabricante cuyos multímetros vendían varios distribuidores…
Desde que la industria empezó a deslocalizar sus fabricas llevando gran parte del peso de…
Desde que vi por primera vez una pinza amperimétrica quise tener una. Con la aparición…