Foros del Web » Programando para Internet » PHP »

cambiar formato a los rut

Estas en el tema de cambiar formato a los rut en el foro de PHP en Foros del Web. Tengo una base de dato donde tengo rut de personas pero sin puntos ni guion. y quiero que al mostrarlos en pantalla tenga los puntos ...
  #1 (permalink)  
Antiguo 18/03/2009, 14:04
 
Fecha de Ingreso: marzo-2009
Mensajes: 41
Antigüedad: 15 años, 1 mes
Puntos: 1
cambiar formato a los rut

Tengo una base de dato donde tengo rut de personas pero sin puntos ni guion. y quiero que al mostrarlos en pantalla tenga los puntos y el guion.

he intentado hacerlo de la siguientes manera

if(ereg("^\d{1,2}\d{3}\d{3}\w{1}$",$row["rut"],$rut)) {
$rutok = "$rut[1].$rut[2].$rut[3]-$rut[4]";
} else {
$rutok="algo esta mal";
}

y el php es

<?php
echo $rutok;
?>

asta ahora solo me da resultado "algo esta mal" y el array $rut esta en blanco.

no se si sera relevante pero el query esta tomando un get con el id de la persona. pero se que funciona ya que si mando a imprimir el $row["rut"] me da el rut sin puntos ni guion

El formato de un rut en chile es 12.345.456-k (el numero después del guion es (0-9kK) se le llama verificador. en la base de dato lo tengo 12345456k.

nota los rut comienzan desde 1millon asta 99.999.999, la verdad no se si ahora existen mayores a 100.000.000, creo que en la db no hay de ese tipo.

Última edición por exorton; 18/03/2009 a las 14:05 Razón: me faltaron unos simbolos en el if
  #2 (permalink)  
Antiguo 20/03/2009, 22:31
 
Fecha de Ingreso: marzo-2009
Mensajes: 12
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: cambiar formato a los rut

Hola, personalmente siempre recomiendo evitar el uso de las funciones que utilizan el motor de expresiones regulares ya que disminuye la performance del script, a no ser que sea realmente necesario.
Por suerte PHP dispone de muchisimas funciones para trabajar con cadenas.
Te dejo el siguiente codigo, espero que te sirva.

Código PHP:
 <?php     
     
function formateo_rut($rut_param){
    
    
//validaciones varias
    //....
    
$parte1 substr($rut_param0,2); //12
    
$parte2 substr($rut_param2,3); //345
    
$parte3 substr($rut_param5,3); //456
    
$parte4 substr($rut_param8);   //todo despues del caracter 8 

    
return $parte1.".".$parte2.".".$parte3."-".$parte4;

}
$rut "12345456k";
echo 
formateo_rut($rut);
?>
saludos, Juan.
  #3 (permalink)  
Antiguo 21/03/2009, 05:56
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: cambiar formato a los rut

otra opción es actualizar tu tabla con los resultados como los quieres mostrar.

Con esta, actualizas tus datos de tipo xx.xxx.xxx-k.
Código mysql:
Ver original
  1. update tabla set rut = insert(insert(insert(rut,3,0,'.'),7,0,'.'),11,0,'-') where length(rut) = 9

Con esta los de tipo x.xxx.xxx-k
Código mysql:
Ver original
  1. update tabla set rut = insert(insert(insert(rut,2,0,'.'),6,0,'.'),10,0,'-') where length(rut) = 8

Debes tener mucho cuidado con los registros entre 1 millon y 9.999.999 con 2 letras despues del guión, ya que coincide con el numero de caracteres de un rut de tipo xx.xxx.xxx-k y tambien te lo cambiaría. Pero creo que ese detalle tampoco lo tienes descrito en la solución anterior.

Un saludo

Última edición por huesos52; 21/03/2009 a las 07:29
  #4 (permalink)  
Antiguo 23/03/2009, 10:06
 
Fecha de Ingreso: marzo-2009
Mensajes: 41
Antigüedad: 15 años, 1 mes
Puntos: 1
cambiar formato a los rut

Gracias juan_benitez, al final utilice este sitema ya que el numero verificador (en chile) solo contiene un caracter de 0 a 9 y K cuando es 11 (cero es 10). y solo cambia el costado izq del numero pudiendo ser x.xxx.xxx-k o xx.xxx.xxx.-k. como dice huesos52, de esta forma contengo ambos sin tener que crear un campo con el rut escrito.



Código PHP:
 <?php     
     
function formateo_rut($rut_param){
    
        
$parte4 substr($rut_param, -1); // seria solo el numero verificador
    
$parte3 substr($rut_param, -4,3); // la cuenta va de derecha a izq 
    
$parte2 substr($rut_param, -7,3); 
        
$parte1 substr($rut_param0,-8); //de esta manera toma todos los caracteres desde el 8 hacia la izq

    
return $parte1.".".$parte2.".".$parte3."-".$parte4;

}
y funciona tanto para los xx.xxx.xxx-k y los x.xxx.xxx-k
  #5 (permalink)  
Antiguo 23/03/2009, 10:12
Avatar de argy  
Fecha de Ingreso: octubre-2007
Ubicación: Longitud 75º Latitud 18º Sur
Mensajes: 614
Antigüedad: 16 años, 6 meses
Puntos: 18
Respuesta: cambiar formato a los rut

podrías utilizar expresiones regulares para tal caso, ahora de que si disminuye la performance no estoy de acuerdo ya que ahora los ordenadores tienen un hardware más potentes.

además no utlices la libreria posix(ereg,eregi,etc), ya que es obsoleto en php 5.3 y en la version ya no estará disponible. en su lugar utiliza preg_match.
__________________
Software libre para un mundo libre.

Eventualmente en el foro.
  #6 (permalink)  
Antiguo 23/03/2009, 10:41
Avatar de SCY-FOX  
Fecha de Ingreso: septiembre-2007
Ubicación: Chile
Mensajes: 139
Antigüedad: 16 años, 7 meses
Puntos: 5
Respuesta: cambiar formato a los rut

vaya huesos, no tenia idea de esos comandos...

Todos los dias se aprende algo nuevo...

Personalmente prefiero usar la solución de juan benítez, porque parseas los datos con PHP sin afectar directamente la BD: Imagina que metes una coma o punto donde no debes y cagas todos los rut xD

Antes de hacer el update, lanza un echo al final, para comprobar que todo está saliendo como debería ir. y luego colocas el update.

Silla!
  #7 (permalink)  
Antiguo 23/03/2009, 22:05
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: cambiar formato a los rut

La ventaja de realizar los updates es que solo lo haces una vez y te ahorras el codigo de parseo desde php ganando un poco de performance al momento de interactuar el sistema.

Un saludo
  #8 (permalink)  
Antiguo 24/07/2009, 09:59
 
Fecha de Ingreso: diciembre-2008
Mensajes: 268
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: cambiar formato a los rut

Cita:
Iniciado por exorton Ver Mensaje
Gracias juan_benitez, al final utilice este sitema ya que el numero verificador (en chile) solo contiene un caracter de 0 a 9 y K cuando es 11 (cero es 10). y solo cambia el costado izq del numero pudiendo ser x.xxx.xxx-k o xx.xxx.xxx.-k. como dice huesos52, de esta forma contengo ambos sin tener que crear un campo con el rut escrito.



Código PHP:
 <?php     
     
function formateo_rut($rut_param){
    
        
$parte4 substr($rut_param, -1); // seria solo el numero verificador
    
$parte3 substr($rut_param, -4,3); // la cuenta va de derecha a izq 
    
$parte2 substr($rut_param, -7,3); 
        
$parte1 substr($rut_param0,-8); //de esta manera toma todos los caracteres desde el 8 hacia la izq

    
return $parte1.".".$parte2.".".$parte3."-".$parte4;

}
y funciona tanto para los xx.xxx.xxx-k y los x.xxx.xxx-k

EXORTON...probe tu script.. asi..
Código PHP:
 <?php     
     
function formateo_rut($rut_param){ 
     
        
$parte4 substr($rut_param, -1); // seria solo el numero verificador 
    
$parte3 substr($rut_param, -4,3); // la cuenta va de derecha a izq  
    
$parte2 substr($rut_param, -7,3);  
        
$parte1 substr($rut_param0,-8); //de esta manera toma todos los caracteres desde el 8 hacia la izq 

    
return $parte1.".".$parte2.".".$parte3."-".$parte4

}
$rut "12345763";
echo 
formateo_rut($rut) . "<br>";
$rut "112345763";
echo 
formateo_rut($rut);
?>
pero como veran...... se come siempre el primer digito...... la solucion fue simplemente
Código PHP:
 $parte1 substr($rut_param0,-7); 
exitos y gracias a todos !!!!
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 01:28.