Correcto. Cuento con im?genes y texto desde el principio para mejor compresi?n:
1?) Tengo un formulario con un campo denominado NIF que hay que validar para que en la bbdd no pueda introducirse un NIF incorrecto
[ATTACH=CONFIG]n75653[/ATTACH]
2?) He creado un m?todo php llamado “validar_nifcif” para validar un campo del formulario llamado NIF
[ATTACH=CONFIG]n75654[/ATTACH]
3?) He creado un evento ajax ONBLUR al campo nif desde el que ejecuto el m?todo “validar_nifcif” al abandonar el campo NIF
[ATTACH=CONFIG]n75655[/ATTACH]
4?) El scrip de “validar_nifcif” es el siguiente:
// Crear una variable global para determinar si existe error en la validaci?n del nif
[var_nifOK] = 0;
// Validamos el campo nif, asignandolo a nuestra variable local
$str = {nif};
// Normalizamos el formato
$str = preg_replace( ‘/[^0-9A-Z]/i’, ‘’, $str );
// Comprobar longitud del Cif. No debe ser distinto de 9 caracteres.
for ($i = 0; $i < 9; $i ++){
$num[$i] = substr($str, $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}$)’, $str))
{
{ sc_error_message(“ERROR FORMATO NO VALIDO”); [var_nifOK] = 0; return; } // ERROR FORMATO NO VALIDO.
}
// 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) )
{[var_nifOK] = 1; return;} ; // NIF/NIE CORRECTO
}
// El formato es el de un CIF
else if (preg_match(’/[A-HK-NPQS][0-9]{7}[A-J0-9]/i’, $str)) //CIF
{
//sumar los digitos en posiciones pares
$sum = 0;
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 ))
{[var_nifOK] = 1; return;} ; // CIF CORRECTO
}
{sc_error_message(“Cif/Nif/Nie: No v?lido”); [var_nifOK] = 0; return;} ; // CIF/NIF/NIE INCORRECTO
5?) Este script funciona correctamente y valida el campo bien, sin embargo, y a pesar de que valida el campo correctamente y lanza el mensaje de error, y a pesar de no haberse corregido el error, deja actualizar el registro
Ello me obliga a buscar un m?todo alternativo para mantener el error y por ello he pensado en crear una variable global al inicio del formulario y he utilizado el evento onLOAD, y de tal forma que el m?todo PHP la modifique y la pueda utilizar comprob?ndo su valor en otro tipo de eventos como por ejemplo onVALIDATE.
CONTINUA EN EL SIGUIENTE POST, PUESTO QUE NO ME DEJA INCLUIR MAS DE CINCO IMAGENES