Jump to content

(SOLUCIONADO) Como Validar DNI (Rut en Chile)


Daviant

Recommended Posts

Saludos;

 

Nuevamente solicitando orientación de las personas entendidas en estos temas.

 

Necesito validar el Campo NIF (Rut en Chile) y el script que pongo aqui hace eso muy bien.  El problema es que no tengo idea de donde insertar este código y como pasar el valor del NIF como parámetro.

 

Agradecería cualquier ayuda al respecto.

Muchas gracias de antemano.

<?php
function validaRut($rut){
    if(strpos($rut,"-")==false){
        $RUT[0] = substr($rut, 0, -1);
        $RUT[1] = substr($rut, -1);
    }else{
        $RUT = explode("-", trim($rut));
    }
    $elRut = str_replace(".", "", trim($RUT[0]));
    $factor = 2;
    for($i = strlen($elRut)-1; $i >= 0; $i--):
        $factor = $factor > 7 ? 2 : $factor;
        $suma += $elRut{$i}*$factor++;
    endfor;
    $resto = $suma % 11;
    $dv = 11 - $resto;
    if($dv == 11){
        $dv=0;
    }else if($dv == 10){
        $dv="k";
    }else{
        $dv=$dv;
    }
   if($dv == trim(strtolower($RUT[1]))){
       return true;
   }else{
       return false;
   }
}
------------------------------------------------------------------------------
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
       <form method="post" action="">
<label for="rut">Ingresa tu RUT para validar</label>
<input name="rut" value="" type="text" />
<input type="submit" value="probar" />
</form>
<div>
-----------------------------------------------------------------------------

<?php 
if($_POST['rut']){
    if(validaRut($_POST['rut'])==true){
        echo "El rut ".$_POST['rut']." es válido";
    }else{
         echo "El rut ".$_POST['rut']." no es incorrecto";
    }
}

?>
</div>
<p>El código de esta página es:</p>
<pre>
<?php echo show_source(__FILE__);?>
</pre>
    </body>
</html>

Edited by Daviant (see edit history)
Link to comment
Share on other sites

Saludos;

 

Bueno, ya logré incorporarlo y lo mejor de todo es que funciona.  En retribución a toda la ayuda que he recibido de los amigos del foro comparto la solución.  Es solo para validar el Rut Chileno (dígito verificador módulo 11).

 

En el archivo:

/classes/Validate.php

Hay que buscar lo siguiente:

public static function isDniLite($dni)
        {
		return empty($dni) || (bool)preg_match('/^[0-9A-Za-z-.]{1,16}$/U', $dni);
	}

Y reemplazarlo por el siguiente código modificado citado en el primer post:

public static function isDniLite($dni)
	{
    if(strpos($dni,"-")==false){
        $RUT[0] = substr($dni, 0, -1);
        $RUT[1] = substr($dni, -1);
    }else{
        $RUT = explode("-", trim($dni));
    }
    $elRut = str_replace(".", "", trim($RUT[0]));
    $factor = 2;
    for($i = strlen($elRut)-1; $i >= 0; $i--):
        $factor = $factor > 7 ? 2 : $factor;
        $suma += $elRut{$i}*$factor++;
    endfor;
    $resto = $suma % 11;
    $dv = 11 - $resto;
    if($dv == 11){
        $dv=0;
    }else if($dv == 10){
        $dv="k";
    }else{
        $dv=$dv;
    }
   if($dv == trim(strtolower($RUT[1]))){
       return true;
   }else{
       return false;
   }
} 

Notas adicionales:

 

- Tienen que tener activado el DNI para Chile en el módulo de Localización / Países

- Para que aparezca en el lugar donde lo necesiten tienen que acomodarlo en el formato de dirección dentro del país correspondiente.

- Los mensajes de error hay que traducirlos para adaptarlos al páis (no lo hago aún)

 

 

Muchas gracias y espero les sirva.

Edited by Daviant (see edit history)
  • Like 2
Link to comment
Share on other sites

vi tu función y se ve buena, el tema es que quiero probarla en un login de validación al momento de compra, como llamo la función desde un form? si me pudieses ayudar sería espectacular

Saludos;

Aclaro que la función no es mia, está en un sitio a libre disposición  y adecuada para que funcione en Prestashop.  No he investigado como llamarla desde un Form, pero creo que en algún momento necesitaré esa funcionalidad.

 

En qué tipo de formulario quieres incorporarlo?  uno de confección propia, construido en sitio online o software intermediario?

 

Lo otro que puedes hacer es mirar el código de /classes/Validate.php y ver como es llamada la función y tratar de replicarlo adaptanto el código de tu formulario.

Edited by Daviant (see edit history)
  • Thanks 1
Link to comment
Share on other sites

  • nadie locked this topic
Guest
This topic is now closed to further replies.
×
×
  • Create New...