Foros del Web » Programando para Internet » PHP »

Funcion que valida el rut (Chile)

Estas en el tema de Funcion que valida el rut (Chile) en el foro de PHP en Foros del Web. Hola, como nunca, hoy no vengo a hacerles una pregunta , Sino a aportar algo que espero que le sirva a mas de alguien. Hace ...
  #1 (permalink)  
Antiguo 22/08/2010, 20:59
Avatar de Cero_Cool  
Fecha de Ingreso: abril-2007
Ubicación: Chile
Mensajes: 113
Antigüedad: 17 años
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;
             } 
  #2 (permalink)  
Antiguo 22/11/2010, 15:31
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Funcion que valida el rut (Chile)

adjunto una que tenia por ahi si no te molesta :D

Código PHP:
/**
 * Validador de RUT con digito verificador 
 *
 * @param string $rut
 * @return boolean
 */
function RutValidate($rut) {
    
$rut=str_replace('.'''$rut);
    if (
preg_match('/^(\d{1,9})-((\d|k|K){1})$/',$rut,$d)) {
        
$s=1;$r=$d[1];for($m=0;$r!=0;$r/=10)$s=($s+$r&#37;10*(9-$m++%6))%11;
        
return chr($s?$s+47:75)==strtoupper($d[2]);
    }

saludos.

PD: el highlight falla al transformar el %
la linea es $s=1;$r=$d[1];for($m=0;$r!=0;$r/=10)$s=($s+$r%10*(9-$m++%6))%11;
__________________
More about me...
~ @rhyudek1
~ Github
  #3 (permalink)  
Antiguo 14/04/2011, 03:01
 
Fecha de Ingreso: abril-2011
Ubicación: Purén
Mensajes: 2
Antigüedad: 13 años
Puntos: 0
Respuesta: Funcion que valida el rut (Chile)

No entendi este código... :S
  #4 (permalink)  
Antiguo 14/04/2011, 06:20
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Funcion que valida el rut (Chile)

basicamente ...
borra los puntos.. valida con una expresion regular que tenga la estructura adecuada
y aplica el algoritmo chileno para verificar el digito verificador.

saludos.
  #5 (permalink)  
Antiguo 16/04/2016, 12:10
 
Fecha de Ingreso: enero-2007
Ubicación: Santiago
Mensajes: 9
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: Funcion que valida el rut (Chile)

Ya sé que este tema está medio obsoleto, pero por si alguien llega buscando librerias para validar RUT, les dejo esta:

La clase la pueden ver en [URL="http://freshworkstudio.github.io/ChileanBundle/"]http://freshworkstudio.github.io/ChileanBundle/[/URL]

La pueden bajar a través de composer :) o sacarla de github directamente.


Es tan simple como:
Código PHP:
Ver original
  1. use Freshwork\ChileanBundle\Rut;
  2.  
  3. Rut::parse("12.345.678-5")->validate(); //true
  4. Rut::parse("123456785")->format(); //12.345.678-9
  5. Rut::parse("12.345.678-1")->fix()->format(); //Arregla el dígito verificador: devuelve 12.345.678-5
  6.  
  7. (new Rut("123456785"))->format(Rut::FORMAT_WITH_DASH); //12345678-5
  8. etc etc

La documentación completa está en [URL="https://github.com/freshworkstudio/ChileanBundle"]https://github.com/freshworkstudio/ChileanBundle[/URL]

Etiquetas: chile, funcion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:21.