Ver Mensaje Individual
  #1736  
Antiguo 02-10-2021
Sistel Sistel is offline
Miembro
 
Registrado: nov 2019
Ubicación: Bilbao
Posts: 393
Reputación: 5
Sistel Va por buen camino
Cita:
Empezado por Sistel Ver Mensaje
Hola ermendalenda,
Sí, hay muchos casos posibles.
En https://es.wikipedia.org/wiki/N%C3%B...%C3%B3n_fiscal tienes la información de cada uno de ellos y el algoritimo de verificación (cálculo de la letra en el DNI y del último dígito en el CIF)
Saludos
Yo, desde hace muchos años, uso las mismas funciones para comprobar si un documento (NIF, NIE o CIF) expedido en España es válido.
En PHP, llamando a la función COMPROBAR_DOCUMENTO($nif) :
Código PHP:
<?php
function COMPROBAR_DOCUMENTO($nif){
    
// Limpia
    
$nif LIMPIAR_NIF($nif);
    
// Comprueba NIF, CIF o NIE
    
if(stristr("XYZ"$nif[0])) $salida COMPROBAR_NIE($nif);
    if(
stristr("ABCDEFGHJKLMNPQRSUVW"$nif[0])) $salida COMPROBAR_CIF($nif);
    if(
stristr("0123456789"$nif[0])) $salida COMPROBAR_NIF($nif);
    
// Si la comprobación ha dado errónea se devuelve texto
    
if($salida <> '1') return "Error en documento (CIF/NIF/NIE)";
    return 
"";
}
/***************************************************************************************************************/
function COMPROBAR_NIE($nie){
    if(
$nie[0] == "X"$nie "0".substr($nie1);
    if(
$nie[0] == "Y"$nie "1".substr($nie1);
    if(
$nie[0] == "Z"$nie "2".substr($nie1);
    
$dni substr($nie0, -1);
    if(
LETRA_NIF($dni) <> substr($nie, -11)) return "Error: NIE erróneo";
    return 
1;
}
/***********************************************************************************/
function COMPROBAR_NIF($nif){
    
$nif str_replace(" """$nif);
    
$nif str_replace("."""$nif);
    
$nif str_replace("-"""$nif);
    
$nif str_replace("_"""$nif);
    
$nif str_replace(","""$nif);
    
$dni substr($nif0, -1);
    if(
LETRA_NIF($dni) <> strtoupper(substr($nif, -11))) return "Error: NIF erróneo";
    return 
1;
}
/***************************************************************************************************************/
function COMPROBAR_CIF($cif){
    
$cif str_replace(" """$cif);
    
$cif str_replace("."""$cif);
    
$cif str_replace("-"""$cif);
    if(
strlen($cif) <> 9) return "Error: Número de caracteres del CIF no es 9";
    
$validos "ABCDEFGHJKLMNPQRSUVW";
    if(!
strstr($validossubstr($cif01))) return "Error: Primera letra del CIF errónea";
    if(!
ctype_digit(substr($cif17))) return "Error: Dígitos no numéricos en el CIF";

    
// Cálculo del dígito final
    
$a $cif[2] + $cif[4] + $cif[6];
    for(
$i=1$i<=7$i=$i+2){
        
$x $cif[$i] * 2;
        
$x sprintf('%02d'$x);
        
$b += $x[0] + $x[1];
    }
    
$c $a $b;
    
$c sprintf('%02d'$c);
    
$d 10 $c[1];
    if(
$d == 10$d 0;
    
$letras = array("J","A","B","C","D","E","F","G","H","I");
    if(
$cif[8] <> $d && $cif[8] <> $letras[$d]) return "Error: CIF erróneo";
    return 
1;
}
/***************************************************************************************************************/
function LIMPIAR_NIF($nif){
    
$nif str_replace(' '''$nif);
    
$nif str_replace('-'''$nif);
    
$nif str_replace('/'''$nif);
    
$nif str_replace('_'''$nif);
    
$nif str_replace('.'''$nif);
    
$nif str_replace(','''$nif);        
    
$nif strtoupper($nif);            
    return 
$nif;
}
/***************************************************************************************************************/
function LETRA_NIF($dni){
    
$dni str_replace(" """$dni);
    
$dni str_replace("."""$dni);
    
$resto = (int) ($dni 23);
    
$letras "TRWAGMYFPDXBNJZSQVHLCKE";
    
$letra substr ($letras$resto1);
    return 
$letra;
}
?>
Saludos
Responder Con Cita