lunes, 31 de mayo de 2021

Php validacion DNI NIF NIE y otros documentos

A continuación la explicación detallada del tema y un enlace desde el que nos podemos descargar un código completo de formulario y validación de todos los documentos españoles, COSECHA PROPIA:

/* Bien podemos comenzar por una lógia por medio de la cual a la funcion show_form se le pide la validación y si hay errores nos retorna un array con los mismo. */


                        if($_POST['oculto']){
                                if($form_errors = validate_form()){
                                    show_form($form_errors);

                                        } else {
                                            process_form();
                                                }
                            } else {
                                        show_form();
                                    }
                                   
/* La función que valida los datos del formulario enviados en metodo Post. */                                   

function validate_form(){

    $errors = array(); /* El array que recoge los errores. */

    /* VALIDAMOS EL CAMPO  NUMERO DNI/NIF */

    if ($_POST['doc'] == 'DNI') {

        if(strlen(trim($_POST['dni'])) == 0){
        $errors [] = "N&uacute;mero DNI/NIF: <font color='#FF0000'>Campo Obligatorio.</font>";
        }

    elseif (!preg_match('/^[\d]+$/',$_POST['dni'])){
        $errors [] = "N&uacute;mero DNI/NIF: <font color='#FF0000'>Sólo Números.</font>";
        }

    elseif (strlen(trim($_POST['dni'])) < 8){
        $errors [] = "N&uacute;mero DNI/NIF: <font color='#FF0000'>Más de 7 Carácteres.</font>";
        }
    }

    /* VALIDAMOS LA LETRA DE CONTROL DEL DNI */

    /* DEFINO EL ALGORITMO PARA EL CALCULO DE LA LETRA CONTROL DEL DNI */
       
               $letras = 'TRWAGMYFPDXBNJZSQVHLCKE'; /* Array escalar. */
               $dni = $_POST['dni']; /*Variable que contiene el número de dni. */
               $indice = intval($_POST['dni'])%23; /* Variable que contiene el entero de aplicar la operación matematica al número. */
               $letra = $letras[$indice]; /* Variable que nos devuelve la posición dentro del array. */
   
     /* FIN DEL ALGORITMO DE DEFINICION DEL LA LETRA CONTROL DEL DNI */
   
    /* Validamos la letrita. */
   
    if ($_POST['doc'] == 'DNI') {
       
    /* Si no hay letra */
    if(strlen(trim($_POST['ldni'])) == 0){
        $errors [] = "Letra DNI: <font color='#FF0000'>Campo obligatorio.</font>";
        }
    /* Si se hay caracteres no autorizados. */
    elseif (!preg_match('/^[^0-9@#$&%<>:"·\(\)=¿?!¡\[\]\{\};,:\.\*]+$/',$_POST['ldni'])){
        $errors [] = "Letra Control DNI: <font color='#FF0000'>Solo texto</font>";
        }
    /* Si son minusculas. */
    elseif (!preg_match('/^[^a-z]+$/',$_POST['ldni'])){
        $errors [] = "Letra Control DNI: <font color='#FF0000'>Solo mayusculas</font>";
        }
    /* SI LA LETRA NO ES LA CORRECTA. */
    elseif (trim($_POST['ldni'] != $letra)){
    $errors [] = "Letra Control DNI: <font color='#FF0000'>Letra no correcta. $letra is ok.</font>";
        }
    }
            /* Retorna los errores en un array. */
            return $errors;

        }

/* Se llamará la función show_form con el retorno de $errors si es pertinente. */       
function show_form($errors=''){

    if($_POST['oculto']){
        $defaults = $_POST;
        } else {
        /* Nos retorna el formulario en caso de error, con lo valores hemos escrito*/
        /* PEj: <input type='text' name='dni' size=12 maxlength=8 value='".$defaults['dni']."' />*/
                $defaults = array ( 'doc' => '',
                                    'dni' => '',
                                    'ldni' => '');
                                                       }
/* Si hay errores se imprime la tabla en pantalla. */   
           
    if ($errors){
        print("    <div width='90%' style='float:left'>
                    <table align='left' style='border:none'>
                    <th style='text-align:left'>
                    <font color='#FF0000'>* SOLUCIONE ESTOS ERRORES:</font><br/>
                    </th>
                    <tr>
                    <td style='text-align:left'>");
           
        for($a=0; $c=count($errors), $a<$c; $a++){
            print("<font color='#FF0000'>**</font>  ".$errors [$a]."<br/>");
            }
        print("</td>
                </tr>
                </table>
                </div>
                <div style='clear:both'></div>");
        }
}   

Formulario y validación de todos los documentos españoles, COSECHA PROPIA:

No hay comentarios:

Publicar un comentario

Gracias por vuestros aportes.