Foros del Web » Programando para Internet » PHP »

Rut Chile ...no puedo hacer funcionar

Estas en el tema de Rut Chile ...no puedo hacer funcionar en el foro de PHP en Foros del Web. Compañeros(as) Tengo el siguiente problema estoy tratando de hacer funcionar una funcion que encontre en la web...pero no resulta. Este es mi formulario llamado form_rut.php ...
  #1 (permalink)  
Antiguo 23/02/2007, 09:49
 
Fecha de Ingreso: marzo-2004
Ubicación: Chile
Mensajes: 382
Antigüedad: 20 años, 1 mes
Puntos: 0
Rut Chile ...no puedo hacer funcionar

Compañeros(as)

Tengo el siguiente problema estoy tratando de hacer funcionar una funcion que encontre en la web...pero no resulta.

Este es mi formulario llamado form_rut.php
Código HTML:
<body>
<form id="form_rut" name="form_rut" method="post" action="procesar_rut.php">
  <table width="225">
    <tr>
      <td width="26">Rut:</td>
      <td width="108"><input name="txtRut" type="text" id="txtRut" /></td>
      <td width="69"><label>
        <input name="textfield" type="text" size="5" />
      </label></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><label>
        <input name="btnVerificar" type="submit" id="btnVerificar" value="Enviar" />
      </label></td>
      <td>&nbsp;</td>
    </tr>
  </table>
</form>
</body> 
Y aca esta la funcion que valida el rut, voy a copiarla tal cual como la encontre incluyendo los derechos de autor con esta funcion genere un archivo llamado procesar_rut.php la llamo desde el formulario.

Código PHP:
/* Introducción  *****************************************************
 * Dígito Verificador 2.1, aunque nunca hubo una versión 1.0         *
 * Lo que hice fue bajar dv1.1 del baúl de la abuela y               *
 * modificarlo, porque no me funcionaba. Le encontré unas pifias     *
 * y las corregí, después lo programé para que funcionara con        *
 * RUT's en el formato 12345678 y en el formato 12.345.678           *
 * Finalmente, le puse 4 opciones para ser devuelto                  *
 *                                                                   *
 * Modo de uso (ejemplo)  ********************************************
 * rut ( string rut, int formato )                                 *
 * Ejemplo: si el rut es 12345678 o 12.345.678                       *
 * formato 0: devuelve 5                                             *
 * formato 1: devuelve 12.345.678-5                                  *
 * formato 2: devuelve 12345678-5                                    *
 * formato 3: devuelve 123456785                                     *
 *                                                                   *
 * Copyright  ********************************************************
 * Lo único que les pido es que citen mi nombre y mi e-mail cuando   *
 * usen esta función. Yo también respeto a otros creadores!          *
 *                                                                   *
 *                                                                   *
 *                                    Alejandro Mallea, [email protected] *
 *********************************************************************/
 
function rut($ru,$f) {
    
$parte explode('.',$ru,3);
    
$rut $ru $parte[0].$parte[1].$parte[2];
    
$i 0;
    
$res '0';
    while (
$rut) {
        
$resto round((($rut/10)-floor($rut/10))*10);
        
$rut floor($rut/10);
        
$res[$i++] = $resto;
    }
    
$suma = ($res[0]*2+$res[1]*3+$res[2]*4+$res[3]*5+$res[4]*6+$res[5]*7+$res[6]*2+$res[7]*3)/11;
    
$dv  11-ceil(($suma-floor($suma))*10);
    if (
$dv == 11) {
        
$dv 0;
    }
    elseif (
$dv == 10) {
        
$dv 'k';
    }
    
$a floor ($ru 1000000);
    
$b floor ($ru 1000) - $a 1000;
    
$c $ru floor ($ru 1000) * 1000;
    
// Lo siguiente revisa si los números $b y $c tienen sólo 1 o 2 dígitos
    // y los devuelve (como string) en el formato 00X o 0XY (3 dígitos)
    
if ($b 100 1) {
        if (
$b 10 1) {
            
$b '00'.$b;
        }
        else {
            
$b '0'.$b;
        }
    }
    if (
$c 100 1) {
        if (
$c 10 1) {
            
$c '00'.$c;
        }
        else {
            
$c '0'.$c;
        }
    }
    if (
$f==0) {
        return 
$dv;    // Devuelve el dígito verificador
    
}
    elseif (
$f==1) {
        return 
$a.'.'.$b.'.'.$c.'-'.$dv;    // Devuelve en el formato 12.345.678-5
    
}
    elseif (
$f==2) {
        return 
$a.$b.$c.'-'.$dv;    // Devuelve en el formato 12345678-5
    
}
    elseif (
$f==3) {
        return 
$a.$b.$c.$dv;    // Devuelve en el formato 123456785
    
}
}
?>

Ojala puedan ayudarme ya que estoy hace varias horas tratando de poder llamar la funcion  y no resulta sera quizas nose llamarla o quizas debe estar la funcion en el mismo archivo del formulario.

Bueno se agradece de antemano

Saludos desde CHILE 
  #2 (permalink)  
Antiguo 23/02/2007, 10:03
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
De acuerdo Re: Rut Chile ...no puedo hacer funcionar

jeje seria bueno que nos dijeras como es que "tú" estas mandando a llamar esa función.

Saludillos.
  #3 (permalink)  
Antiguo 23/02/2007, 10:12
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Rut Chile ...no puedo hacer funcionar

Mira, entiendo que tu formulario es este:
Código PHP:
<html>
<
body>
<
form id="form_rut" name="form_rut" method="post" action="procesar_rut.php">
  <
table width="225">
    <
tr>
      <
td width="26">Rut:</td>
      <
td width="108"><input name="txtRut" type="text" id="txtRut" /></td>
      <
td width="69"><label>
        <
input name="textfield" type="text" size="5" />
      </
label></td>
    </
tr>
    <
tr>
      <
td>&nbsp;</td>
      <
td><label>
        <
input name="btnVerificar" type="submit" id="btnVerificar" value="Enviar" />
      </
label></td>
      <
td>&nbsp;</td>
    </
tr>
  </
table>
</
form>
</
body>
</
html
De aquí se entiende que rut lo escribes en el campo txtRut ya que así lo llamaste y supongo que el formato es el que escribes en el campo textfield, así que cuando el usuario pulse el botón Enviar estos datos se enviaran por método POST hacia el archivo "procesar_rut.php" en este archivo debes poner la función que mencionas y pasarle las variables que enviamos por este método para que al final nos imprima en la pantalla el formato.
La declaración de las variables las hacemos de este modo:
Código PHP:
$_POST['txtRut'];
$_POST['textfield']; 
y la llamada a la función se hace así en tu caso:
Código PHP:
rut$rut$formato ); 
así que el archivo "procesar_rut.php" nos quedaría de esta manera:
Código PHP:
<?php
function rut$ru,$f )

    
$parte explode('.',$ru,3); 
    
$rut $ru $parte[0].$parte[1].$parte[2]; 
    
$i 0
    
$res '0'
    while (
$rut) { 
        
$resto round((($rut/10)-floor($rut/10))*10); 
        
$rut floor($rut/10); 
        
$res[$i++] = $resto
    } 
    
$suma = ($res[0]*2+$res[1]*3+$res[2]*4+$res[3]*5+$res[4]*6+$res[5]*7+$res[6]*2+$res[7]*3)/11
    
$dv  11-ceil(($suma-floor($suma))*10); 
    if (
$dv == 11) { 
        
$dv 0
    } 
    elseif (
$dv == 10) { 
        
$dv 'k'
    } 
    
$a floor ($ru 1000000); 
    
$b floor ($ru 1000) - $a 1000
    
$c $ru floor ($ru 1000) * 1000
    
// Lo siguiente revisa si los números $b y $c tienen sólo 1 o 2 dígitos 
    // y los devuelve (como string) en el formato 00X o 0XY (3 dígitos) 
    
if ($b 100 1) { 
        if (
$b 10 1) { 
            
$b '00'.$b
        } 
        else { 
            
$b '0'.$b
        } 
    } 
    if (
$c 100 1) { 
        if (
$c 10 1) { 
            
$c '00'.$c
        } 
        else { 
            
$c '0'.$c
        } 
    } 
    if (
$f==0) { 
        return 
$dv;    // Devuelve el dígito verificador 
    

    elseif (
$f==1) { 
        return 
$a.'.'.$b.'.'.$c.'-'.$dv;    // Devuelve en el formato 12.345.678-5 
    

    elseif (
$f==2) { 
        return 
$a.$b.$c.'-'.$dv;    // Devuelve en el formato 12345678-5 
    

    elseif (
$f==3) { 
        return 
$a.$b.$c.$dv;    // Devuelve en el formato 123456785 
    

}

// declaramos nombres de variables cortos de las variables enviadas mediante post
$cadena $_POST['txtRut'];
$formato $_POST['textfield'];

// llamamos a la funcion
echo rut$cadena$formato );
?>
Espero sea lo que necesitabas o por lo menos te des una idea. Suerte
  #4 (permalink)  
Antiguo 23/02/2007, 11:12
 
Fecha de Ingreso: marzo-2004
Ubicación: Chile
Mensajes: 382
Antigüedad: 20 años, 1 mes
Puntos: 0
Re: Rut Chile ...no puedo hacer funcionar

Gracias por las respuestas.

Erikfrancisco aplique el codigo que tu modificaste pero no me aparece nada al parecer no me imprime el resultado.

Voy a explicar un poco en que consite el rut chileno es un calculo que se hace para generar una cadena unica donde al valor de txtRut se le aplican una serie de operaciones matematicas para generar el digito verificador txtDv (ahora el cambie el nombre en el formulario para identificarlo bien antes tenia textfield)

ejemplo:

9541846 este viene siendo mi txtRut.

y atraves de una serie de calculos en la funcion deberia generarme el valor 5

La cadena completa quedaria de esta forma : 9541846-5 osea esto deberia imprimirme por pantalla.

Las modificaciones que aplique son las siguientes:

Para el formulario form_rut.php tan solo modifique el nombre del campo textfield por txtDv.

De esta forma quedo:
Código HTML:
<body>
<form id="form_rut" name="form_rut" method="post" action="procesar_rut.php">
  <table width="225">
    <tr>
      <td width="26">Rut:</td>
      <td width="108"><input name="txtRut" type="text" id="txtRut" /></td>
      <td width="69"><label>
        <input name="txtDv" type="text" id="txtDv" size="5" />
      </label></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><label>
        <input name="btnVerificar" type="submit" id="btnVerificar" value="Enviar" />
      </label></td>
      <td>&nbsp;</td>
    </tr>
  </table>
</form>
</body> 
Y para el caso del archivo procesar_rut.php modifique tus sugerecias y se incluyo el cambio de las variables que agregaste al final de esta forma:

$cadena = $_POST['txtRut'];
$formato = $_POST['textfield'];

se reemplaza por :

$rut = $_POST['txtRut'];
$dv = $_POST['txtDv'];

llamada a la funcion de esta forma:

echo rut( $rut, $dv )

Codigo completo modificado procesar_rut.php

Código PHP:
<?php
function rut($ru,$f) {

    
$parte explode('.',$ru,3);
    
$rut $ru $parte[0].$parte[1].$parte[2];
    
$i 0;
    
$res '0';
    while (
$rut) {
        
$resto round((($rut/10)-floor($rut/10))*10);
        
$rut floor($rut/10);
        
$res[$i++] = $resto;
    }
    
$suma = ($res[0]*2+$res[1]*3+$res[2]*4+$res[3]*5+$res[4]*6+$res[5]*7+$res[6]*2+$res[7]*3)/11;
    
$dv  11-ceil(($suma-floor($suma))*10);
    if (
$dv == 11) {
        
$dv 0;
    }
    elseif (
$dv == 10) {
        
$dv 'k';
    }
    
$a floor ($ru 1000000);
    
$b floor ($ru 1000) - $a 1000;
    
$c $ru floor ($ru 1000) * 1000;
    
// Lo siguiente revisa si los números $b y $c tienen sólo 1 o 2 dígitos
    // y los devuelve (como string) en el formato 00X o 0XY (3 dígitos)
    
if ($b 100 1) {
        if (
$b 10 1) {
            
$b '00'.$b;
        }
        else {
            
$b '0'.$b;
        }
    }
    if (
$c 100 1) {
        if (
$c 10 1) {
            
$c '00'.$c;
        }
        else {
            
$c '0'.$c;
        }
    }
    if (
$f==0) {
        return 
$dv;    // Devuelve el dígito verificador
    
}
    elseif (
$f==1) {
        return 
$a.'.'.$b.'.'.$c.'-'.$dv;    // Devuelve en el formato 12.345.678-5
    
}
    elseif (
$f==2) {
        return 
$a.$b.$c.'-'.$dv;    // Devuelve en el formato 12345678-5
    
}
    elseif (
$f==3) {
        return 
$a.$b.$c.$dv;    // Devuelve en el formato 123456785
    
}
}
// declaramos nombres de variables cortos de las variables enviadas mediante post 
$rut $_POST['txtRut']; 
$dv $_POST['txtDv']; 

// llamamos a la funcion 
echo rut$rut$dv ); 

?>
Eso espero haberme explicado bien......gracias por su tiempo y voluntad

Juan Pablo G.
  #5 (permalink)  
Antiguo 23/02/2007, 11:21
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
Pregunta Re: Rut Chile ...no puedo hacer funcionar

¿Cual es el error que estas teniendo? Porque , por lo que se puede ver, todo esta bien

Saludillos.
  #6 (permalink)  
Antiguo 23/02/2007, 11:37
 
Fecha de Ingreso: marzo-2004
Ubicación: Chile
Mensajes: 382
Antigüedad: 20 años, 1 mes
Puntos: 0
Re: Rut Chile ...no puedo hacer funcionar

Osea no hay ningun error, tan solo que no muestra nada no imprime nada por pantalla.

La idea es que me arroje en resultado diciendome que el digito verificador en este caso txtDv ingresado por el usuario corresponde al resultado de la funcion osea si el usuario digita el ultimo con un valor 8 y la funcion me arroja 4 que avise por pantalla que el rut digitado es erroneo que vuelva a digitarlo.


Esa es la idea.

Ojala que puedan ayudarme que me estoy volviendo loco....es broma.

Pero desespero
  #7 (permalink)  
Antiguo 23/02/2007, 11:40
 
Fecha de Ingreso: febrero-2007
Mensajes: 15
Antigüedad: 17 años, 2 meses
Puntos: 1
Re: Rut Chile ...no puedo hacer funcionar

mmmmmmm yo tenia un link donde estaba lo del rut en como 37821937182 lenguajes

dame 5 min y lo busko
  #8 (permalink)  
Antiguo 23/02/2007, 11:47
 
Fecha de Ingreso: febrero-2007
Mensajes: 15
Antigüedad: 17 años, 2 meses
Puntos: 1
Re: Rut Chile ...no puedo hacer funcionar

<?php
function dv($r){$s=1;for($m=0;$r!=0;$r/=10)$s$s+$r%10*(9-$m++%6))%11;
return chr($s?$s+47:75);}
?>


eso valida el rut en PHP .......

esta como en 4783294729 lenguajes en un foro x pero no se si lo consideren como publicidad asi ke si necesitai mas me mandai un mp
  #9 (permalink)  
Antiguo 23/02/2007, 12:27
 
Fecha de Ingreso: marzo-2004
Ubicación: Chile
Mensajes: 382
Antigüedad: 20 años, 1 mes
Puntos: 0
Re: Rut Chile ...no puedo hacer funcionar

Gracias a todos por su ayuda una gran comunidad.

Pero aun no me funciona intente con el codigo ofrecido por felipexcore y me arroja error en esta linea:

Código PHP:
function dv($r){$s=1;for($m=0;$r!=0;$r/=10)$s$s+$r%10*(9-$m++%6))%11
Yo por mi parte intente ordenar un poco el codigo de la siguiente forma:

Código PHP:
function dv($r)
{
    
$s=1;
    for(
$m=0;$r!=0;$r/=10)
    
$s$s+$r%10*(9-$m++%6))%11
return 
chr($s?$s+47:75);

$rut $_POST['txtRut']; 
$dv $_POST['txtDv']; 

// llamamos a la funcion 
echo dv$rut); 
y me arroja el error en esta linea:

$s$s+$r%10*(9-$m++%6))%11;

Extraño esto:
$s$s+$r%10 ...

Intente asignando osea asi:
$s=$s+$r%10 ...

y Tampoco.....

Gracias nuevamente
  #10 (permalink)  
Antiguo 23/02/2007, 14:30
 
Fecha de Ingreso: febrero-2007
Mensajes: 15
Antigüedad: 17 años, 2 meses
Puntos: 1
Re: Rut Chile ...no puedo hacer funcionar

mmmmm aca copie otra cosa ke encontre por ahi...

Validar Rut
Otra para validar RUT
Enviado por admin el 11 Julio, 2004 - 1:31pm.
Clasificado en: PHP | Php retorcido | Validar Rut
Reconozco que esta implementación del validador de rut le gana en laconismo a todas las otras que he visto (incluyendo la mía):


<?php
function dv($r) {
$s = 1;
for($m = 0; $r != 0; $r/= 10)$s = ($s+$r%10 * (9-$m++%6))%11;
return chr($s?$s+47:75);
}
?>
Bonito, no?
5 comentarios | 5056 lecturas
Función para validar RUT
Enviado por admin el 22 Junio, 2004 - 1:34am.
Clasificado en: Php para dummies | Validar Rut
Gracias a Cristian(mi compañero de pega) y a un par de páginas, logré dar con el código necesario para validar el RUT, o sea, verificar que tenga el formato correcto y el dígito verificador sea el adecuado. Disfruten!
<?php
/**
* Verifica que el rut ingresado sea v&aacute;lido
* Debe estar en formato xxxxxxxx-x
* @return bool
*/
function validarRut($sUsr) {
if (!preg_match("/(\d{7,8})-([\dK])/", strtoupper($sUsr), $aMatch)) {
return false;
}
$sRutBase = substr(strrev($aMatch[1]) , 0, 8 );
$sCodigoVerificador = $aMatch[2];
$iCont = 2;
$iSuma = 0;
for ($i = 0;$i&lt;strlen($sRutBase);$i++) {
if ($iCont>7) {
$iCont = 2;
}
$iSuma+= ($sRutBase{$i}) *$iCont;
$iCont++;
}
$iDigito = 11-($iSuma%11);
$sCaracter = substr("-123456789K0", $iDigito, 1);
return ($sCaracter == $sCodigoVerificador);
}
?>

--------------------------------------------------------------------------------
Actualización: Se me había olvidado poner strtoupper, para poner a mayúsculas el posible 'k' al final del rut


es cosa de googlear un poco y sale al toke :S
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 23:12.