Foros del Web » Programando para Internet » PHP »

Alguien me explica como funciona esto?

Estas en el tema de Alguien me explica como funciona esto? en el foro de PHP en Foros del Web. me pusieron esta función en php en un post que hice para validar el rut con el digito verificador segun el algoritmo de 11.. pero ...
  #1 (permalink)  
Antiguo 10/12/2009, 12:44
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Alguien me explica como funciona esto?

me pusieron esta función en php en un post que hice para validar el rut con el digito verificador segun el algoritmo de 11..

pero realmente no lo entiendo.. y no me gusta no entender las cosas. si alguien me pudiera guiar un poco?


Código php:
Ver original
  1. <?php
  2. function dv($r){$s=1;for($m=0;$r!=0;$r/=10)$s=($s+$r%10*(9-$m++%6))%11;
  3. return chr($s?$s+47:75);}
  4. ?>


gracias.. saludos!
__________________
More about me...
~ @rhyudek1
~ Github
  #2 (permalink)  
Antiguo 10/12/2009, 13:22
Avatar de Fairy_Boy  
Fecha de Ingreso: octubre-2009
Ubicación: Kokiri Forest
Mensajes: 235
Antigüedad: 14 años, 6 meses
Puntos: 5
Respuesta: Alguien me explica como funciona esto?

y realmente funciona eso?
x lo que vi, no funcionaron los links que dejo el otro user.
y no valido nada
=/
  #3 (permalink)  
Antiguo 10/12/2009, 13:30
Avatar de omar1977  
Fecha de Ingreso: abril-2006
Mensajes: 178
Antigüedad: 18 años
Puntos: 4
Respuesta: Alguien me explica como funciona esto?

yo hice esto para el asunto del rut....
lo aplico de varias formas... ta las comento
Código PHP:
Class RUT {

    var 
$rut;
    var 
$dv;
    var 
$valido;

    function 
RUT ($rut$dv 'X'){
        if(
preg_match("/-/",$rut)){
            
$dv  substr($rut,strlen($rut)-1);
            
$rut substr($rut,0,strlen($rut)-2);
        }
        
$rut    =   strtoupper(preg_replace('{\.|,|-}','',$rut));
        if(
$dv == 'X'){
            
$this->rut substr($rut,0,strlen($rut)-1);
            
$dv  substr($rut,-1);
        }else{
            
$this->rut $rut;
        }
        
$this->dv $this->Valida($this->rut);

        if(
$this->dv == $dv){
            
$this->valido true;
        }else{
            
$this->valido false;
        }
    }

    function 
Valida($r){
        
$s=1;
        for(
$m=0;$r!=0;$r/=10){
            
$s=($s+$r%10*(9-$m++%6))%11;
        }
        return 
chr($s?$s+47:75);
    }
}  
// END CLASS 
y lo aplico
$RUT = RUT("xx.xxx.xxx-x");
$RUT = RUT("xx.xxx.xxx-x","x");
$RUT = RUT("xx.xxx.xxx","x");

puede ser con puntos o comas o nada.
por ejemplo

Código PHP:
$RUT = new RUT("xx.xxx.xxx-9");
if(
$RUT->Valido){
    echo 
"si vale";
}else{
    echo 
"no vale";


ahora lo que tu preguntas es precisamente la formula para retornar el digito verificador del rut
en esta pagina se esplica un poco como es el cuento, de forma detallada
http://www.dcc.uchile.cl/~mortega/mi...os/validarrut/
__________________
no hay nadie que sea tan inutil, por ultimo sirve como mal ejemplo
  #4 (permalink)  
Antiguo 10/12/2009, 13:42
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Alguien me explica como funciona esto?

si vi completa esa pagina para buscar pero la información que dan es el algoritmo y yo necesito otra cosa :B

para ser mas especifico esto
Cita:
$s=1;
for($m=0;$r!=0;$r/=10){
$s=($s+$r%10*(9-$m++%6))%11;
}
return chr($s?$s+47:75);
lo que entiendo es solo la ultima parte.. en donde obtienes un numero y lo sumas con 47 para obtener el dígito verificador... pero..
el bucle for ni idea .. si me pudieras explicar eso te estaría muy agradecido :B

saludos!
__________________
More about me...
~ @rhyudek1
~ Github
  #5 (permalink)  
Antiguo 10/12/2009, 14:20
Avatar de omar1977  
Fecha de Ingreso: abril-2006
Mensajes: 178
Antigüedad: 18 años
Puntos: 4
Respuesta: Alguien me explica como funciona esto?

y que tal ahora.....
creo que la traduccion esta media julera...
seria mas o menos asi...

% Devuelve el residuo de una división 10 % 3 = 1
$a /= $b //Asigna a $a la división de $a entre $b

$s=1;$r=12345678;
//para m=0 mientras r<>0 hasta r/10 o (1234567.8)
for ($m=0 ; $r!=0 ; $r/=10 ){
//s = el residuo de (s +(el residuo de r y 10) por (9 - el residuo de (m = m + 1) y 6 ) y 11;
$s = ($s+ $r%10 * (9 - $m++ % 6 ) ) % 11;
}
// retornamos el caracter( si($s es verdadero) entonces sumamos 47 a s de lo contrario entregamos 75 )
return chr ( $s ? $s+47 : 75 );


el asunto del retorno es para los codigos ASCII ejemplo el ASCII de 75 es K.... jejeje
espero quede mas claro

si te das cuenta
r=12345678
r=1234567.8
r=123456.78
r=12345.678
etc...
r=0.123..... es decir ya no cuenta para el ciclo.... jejejejej
__________________
no hay nadie que sea tan inutil, por ultimo sirve como mal ejemplo
  #6 (permalink)  
Antiguo 10/12/2009, 14:33
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Alguien me explica como funciona esto?

:O mas o menos claro.. pero de igual manera como se te ocurrió esa forma de realizar el proceso?.. te lo digo pq por lo general uno toma los pasos típicos. hay algún otro algoritmo para sacar el digito del rut o algo?

saludos!
__________________
More about me...
~ @rhyudek1
~ Github
  #7 (permalink)  
Antiguo 10/12/2009, 14:42
Avatar de omar1977  
Fecha de Ingreso: abril-2006
Mensajes: 178
Antigüedad: 18 años
Puntos: 4
Respuesta: Alguien me explica como funciona esto?

como asi de
Cita:
como se te ocurrió esa forma de realizar el proceso?
si te fijas el metodo fuerte de validacion es la misma, lo unico que le agregue mas datos para hacer la limpieza del rut, es decir sacarle los "." o las "," o cachar si viene con o sin "-"+digito.

de esa forma puedo acceder a la validacion de cuanquier forma... de hecho tengo ganas de mejorarla, agrager metodos de ingreso, mascara, etc...
__________________
no hay nadie que sea tan inutil, por ultimo sirve como mal ejemplo
  #8 (permalink)  
Antiguo 10/12/2009, 14:48
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Alguien me explica como funciona esto?

me referia a lo de obtener el digito verificador .. xD es eso lo que no me dejara dormir en la noche si no lo entiendo 100% T_T
__________________
More about me...
~ @rhyudek1
~ Github
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 19:22.