Su uso es muy sencillo, simplemente se hace la llamada a la función pasandola como parametro la cadena que queremos verificar y la función nos devolvera unos de los siguientes valores: 1 = NIF correcto, 2 = CIF correcto, 3 = NIE correcto, -1 = NIF incorrecto, -2 = CIF incorrecto, -3 = NIE incorrecto, 0 = ??? incorrecto.
function check_nif_cif_nie($cif) {
//Returns:
// 1 = NIF ok,
// 2 = CIF ok,
// 3 = NIE ok,
//-1 = NIF bad,
//-2 = CIF bad,
//-3 = NIE bad, 0 = ??? bad $cif = strtoupper($cif); for ($i = 0; $i < 9; $i ++){ $num[$i] = substr($cif, $i, 1); } //si no tiene un formato valido devuelve error if (!ereg('((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^
[0-9]{8}[A-Z]{1}$)', $cif)){
return 0;
}
//comprobacion de NIFs estandar
if (ereg('(^[0-9]{8}[A-Z]{1}$)', $cif)){
if ($num[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE',
substr($cif, 0, 8) % 23, 1)){
return 1;
}else {
return -1;
}
}
//algoritmo para comprobacion de codigos tipo CIF
$suma = $num[2] + $num[4] + $num[6];
for ($i = 1; $i < 8; $i += 2){
$suma += substr((2 * $num[$i]),0,1) +
substr((2 * $num[$i]),1,1); } $n = 10 - substr($suma, strlen($suma) - 1, 1); //comprobacion de NIFs especiales (se calculan como CIFs) if (ereg('^[KLM]{1}', $cif)){ if ($num[8] == chr(64 + $n)){ return 1; }else{ return -1; } } //comprobacion de CIFs if (ereg('^[ABCDEFGHJNPQRSUVW]{1}', $cif)){ if ($num[8] == chr(64 + $n) || $num[8] ==
substr($n, strlen($n) - 1, 1)){ return 2; }else{ return -2; } } //comprobacion de NIEs //T if (ereg('^[T]{1}', $cif)){ if ($num[8] == ereg('^[T]{1}[A-Z0-9]{8}$', $cif)){ return 3; }else{ return -3; } } //XYZ if (ereg('^[XYZ]{1}', $cif)){ if ($num[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE',
substr(str_replace(array('X','Y','Z'),
array('0','1','2'), $cif), 0, 8) % 23, 1)){
return 3;
}else{
return -3;
}
}
//si todavia no se ha verificado devuelve error
return 0;
}
Es lo que estaba buscando, gracias
ResponderEliminarmuchas gracias Daweed; código muy limpio.
ResponderEliminardejo la misma función solo cambiando ereg por preg_match para adaptarlo a php 5.3
$cif = strtoupper($str);
for ($i = 0; $i < 9; $i ++){
$num[$i] = substr($cif, $i, 1);
}
//si no tiene un formato valido devuelve error
if (!preg_match('/((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)/', $cif)){
return 0;
}
//comprobacion de NIFs estandar
if (preg_match('/(^[0-9]{8}[A-Z]{1}$)/', $cif)){
if ($num[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE', substr($cif, 0, 8) % 23, 1)){
return 1;
} else {
return -1;
}
}
//algoritmo para comprobacion de codigos tipo CIF
$suma = $num[2] + $num[4] + $num[6];
for ($i = 1; $i < 8; $i += 2){
$suma += substr((2 * $num[$i]),0,1) + substr((2 * $num[$i]),1,1);
}
$n = 10 - substr($suma, strlen($suma) - 1, 1);
//comprobacion de NIFs especiales (se calculan como CIFs)
if (preg_match('/^[KLM]{1}/', $cif)){
if ($num[8] == chr(64 + $n)){
return 1;
}else{
return -1;
}
}
//comprobacion de CIFs
if (preg_match('/^[ABCDEFGHJNPQRSUVW]{1}/', $cif)){
if ($num[8] == chr(64 + $n) || $num[8] == substr($n, strlen($n) - 1, 1)){
return 2;
}else{
return -2;
}
}
//comprobacion de NIEs
//T
if (preg_match('/^[T]{1}/', $cif)){
if ($num[8] == preg_match('/^[T]{1}[A-Z0-9]{8}$/', $cif)){
return 3;
}else{
return -3;
}
}
//XYZ
if (preg_match('/^[XYZ]{1}/', $cif)){
if ($num[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE', substr(str_replace(array('X','Y','Z'), array('0','1','2'), $cif), 0, 8) % 23, 1)){
return 3;
}else{
return -3;
}
}
//si todavia no se ha verificado devuelve error
return 0;
Falla comprobando los NIE. Al menos los que empiezan por Y. Devuelve 0 aunque sea correcto.
EliminarGracias por tu aportacion!!. Aunque todo hay que decirlo, el codigo no es mio, lo tengo recopilado hace mucho tiempo y no tengo quien lo hizo
ResponderEliminarBuenas Daweed,
ResponderEliminarParece ser que la función original (http://bulma.net/body.phtml?nIdNoticia=2248) es de David Vidal Serra. Es igual que esta, solamente cambia el nombre.
En que archivo debo incluir este codigo ? o que debo hacer exactamente? podrias hacer un manual para torpes, para que ignorantes como yo, pudieran ejecutarlo sin problemas?. Gracias de antemano.
ResponderEliminarPodrias hacer un manual para torpes, por que no se que debo hacer con este codigo, me refiero a ... En que archivo debo incluirlo.
ResponderEliminarMe parece genial, pero no se como implementarlo. Gracias de antemano.
Está mal para los CIFs. Por ejemplo, un CIF tipo B48896021 da un error de php.
ResponderEliminarComo es lógico, el for ($i = 1; $i < 8; $i += 2) {
$suma += substr((2 * $num[$i]),0,1) + substr((2 * $num[$i]),1,1);
}
está mal.