Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/08/2010, 20:59
Avatar de Cero_Cool
Cero_Cool
 
Fecha de Ingreso: abril-2007
Ubicación: Chile
Mensajes: 113
Antigüedad: 17 años, 6 meses
Puntos: 6
Funcion que valida el rut (Chile)

Hola, como nunca, hoy no vengo a hacerles una pregunta , Sino a aportar algo que espero que le sirva a mas de alguien.

Hace unos días me puse a buscar en internet alguna función en php que validara el rut de una persona (esto es válido para Chile), pero solo encontré funciones que realizaban esta tarea usando 2 cajas de texto, una para el digito verificador y otra para el resto de la cadena, y esto era justo lo que yo no quería, así que comencé a programar una función para poder validar el rut ingresándolo todo en una sola caja de texto. Lo más probable es que no sea una función muy eficiente ya que una vez que la terminé encontré varias nativas de php que me hubieran hecho más corto el trabajo pero al menos funciona perfectamente según todas las pruebas que hice.

Código PHP:
<?php

function valida_rut($rut)
{
if(
strlen($rut) > 10)
{
return 
false;
}

if(
strstr($rut'-') == false)
{
return 
false;
}

$array_rut_sin_guion explode('-',$rut); // separamos el la cadena del digito verificador.
$rut_sin_guion $array_rut_sin_guion[0]; // la primera cadena
$digito_verificador $array_rut_sin_guion[1];// el digito despues del guion.


if(is_numeric($rut_sin_guion)== false)
{
return 
false;
}
if (
$digito_verificador != 'k' and $digito_verificador != 'K')
{
    if(
is_numeric($digito_verificador)== false
      {
      return 
false;
      }
}
$cantidad strlen($rut_sin_guion); //8 o 7 elementos
for ( $i 0$i $cantidad$i++)//pasamos el rut sin guion a un vector
    
{
    
$rut_array[$i] = $rut_sin_guion{$i};
    }  


$i = ($cantidad-1);
$x=$i;
for (
$ib 0$ib $cantidad$ib++)// ingresamos los elementos del ventor rut_array en otro vector pero al reves.
    
{
    
$rut_reverse[$ib]= $rut_array[$i];
    
     
$rut_reverse[$ib];
    
$i=$i-1;
    }
    
$i=2;
$ib=0;
$acum=0
   do
    {
    if( 
$i )
      {
      
$i=2;
      }
      
$acum $acum + ($rut_reverse[$ib]*$i);
     
$i++;
     
$ib++;
   }while ( 
$ib <= $x);

$resto $acum%11;
$resultado 11-$resto;
if (
$resultado == 11) { $resultado=0; }
if (
$resultado == 10) { $resultado='k'; }
if (
$digito_verificador == 'k' or $digito_verificador =='K') { $digito_verificador='k';}

if (
$resultado == $digito_verificador)
    {
    return 
true;
    }
    else
    {
    return 
false;
    }
}
?>
...Y para usarla, yo lo hago asi:

Código PHP:
            require("funciones.php");
          if (
valida_rut($rut)== false)
             {
             echo 
'el rut no es correcto';
             exit;
             }