Foros del Web » Programando para Internet » PHP »

PHP OO Clase RFC

Estas en el tema de Clase RFC en el foro de PHP en Foros del Web. Estoy haciendo una base de datos que genere una facturas, en mi aplicacion trato de validar un rfc, lo logre hacer por medio de funciones ...
  #1 (permalink)  
Antiguo 28/01/2015, 01:39
Avatar de bowiecamaleon  
Fecha de Ingreso: mayo-2013
Ubicación: Mexico
Mensajes: 15
Antigüedad: 11 años, 5 meses
Puntos: 1
Clase RFC

Estoy haciendo una base de datos que genere una facturas, en mi aplicacion trato de validar un rfc, lo logre hacer por medio de funciones separadas, nunca habia hecho una clase, pero trate de unir todas mis funciones en una sola clase, para hacerlo mas "organico" y organizado, ademas esto me da la facilidada de volver a utilizar el codigo, uno seria para el propio usuario darse de alta y otro para que el usuario genere una libreta de contactos y a la hora que el ingrese un rfc de algun contacto sepa que lo puso mal, la expresion regular la encontre en un pdf (no recuerdo donde) del propio sat mi pregunta es a los expertos ¿Como se podria mejorar la extructura de dicha clase? como dije es la primera vez que hago una y trate de hacerlo pues como pienso que es la manera optima, poniendo algunas funciones privadas y otras publicas, con una clase constructora.

Código PHP:
class rfc {    
    
    private 
$rfc_prosesa = array(
            
'tipo' =>"",  
            
'insertado' =>""
            
'valida' => array('mensaje' => "" 'status' => FALSE)
            );
    public 
$get_rfc = array(); 

    
//Funcion que se autoejecuta cuando defines un objeto, 
    //le puedes poner argumentos de inicialización, por defecto todo es vacio.
    
public function __construct($rfc_insertado,$tipo_insertado="DEDUCE") {
    
        
//Eliminamos espacios en blanco.
        
$rfc_insertado str_replace(' '''$rfc_insertado);
        
//Eliminamos guiones.
        
$rfc_insertado str_replace('-'''$rfc_insertado);
        
//Pasamos a mayusculas.
        
$rfc_insertado strtoupper($rfc_insertado);
        
//Asignamos valores a los atributos con los argumentos
        
$this->rfc_prosesa['tipo'] = $tipo_insertado;
        
$this->rfc_prosesa['insertado'] = $rfc_insertado;

    }

    private function 
comprueba_rfc() {
        
//Convertimos en varibles locales algunas propiedades del objeto RFC
        
$longitud =strlen($this->rfc_prosesa['insertado']);
        
$insertado=$this->rfc_prosesa['insertado'];
        
$patron ="/[A-Z,Ñ,&]{3,4}[0-9]{2}[0-1][0-9][0-3][0-9][A-Z,0-9]?[A-Z,0-9]?[0-9,A-Z]?/";
        
$tipo $this->rfc_prosesa['tipo'];
        
            
//Checamos en el switch el numero de caracteres para ver si 
            //cumple con la canridad de dijitos para cada caso
            
switch ($tipo) {
            case 
'DEDUCE':
                if (
$longitud==12 || $longitud==13) {
                    
$this->rfc_prosesa['valida'] ['status'] = TRUE;

                    
//Reaccignamos el tipo dependiendo la cantidad de caracteres
                    
if ($longitud==13) {
                        
$this->rfc_prosesa['tipo'] = "FISICO";
                        
                    }else{
                        
$this->rfc_prosesa['tipo'] = "MORAL";
                    }
                }else{
                    
$this->rfc_prosesa['valida'] ['status'] = FALSE;
                    
$this->rfc_prosesa['valida'] ['mensaje'] = "El RFC que escribio le sobran o le faltan caracteres para que sea fisico o moral";
                }
                break;
            case 
'FISICO':
                if (
$longitud==13) {
                    
$this->rfc_prosesa['valida'] ['status'] = TRUE;
                }else{
                    
$this->rfc_prosesa['valida'] ['status'] = FALSE;
                    
$this->rfc_prosesa['valida'] ['mensaje'] = "El RFC que escribio le sobran o le faltan caracteres para que sea fisico";
                }
            break;
            case 
'MORAL':
                if (
$longitud==12) {
                    
$this->rfc_prosesa['valida'] ['status'] = TRUE;
                }else{
                    
$this->rfc_prosesa['valida'] ['status'] = FALSE;
                    
$this->rfc_prosesa['valida'] ['mensaje'] = "El RFC que escribio le sobran o le faltan caracteres para que sea un moral";
                }
                break;
            }

            
//Con una expresion comprobamos que cumple con el formato de un RFC;
            
if ($this->rfc_prosesa['valida'] ['status']) {
                    if (
preg_match($patron$insertado)) {
                        
$this->rfc_prosesa['valida'] ['status'] = TRUE;
                    } else {
                        
$this->rfc_prosesa['valida'] ['status'] = FALSE;
                        
$this->rfc_prosesa['valida'] ['mensaje'] = "El RFC que escribio no corresponde con el formato";
                        
                    }
            }

    }
    
    public  function 
get_rfc() {
        
        
$this->comprueba_rfc();
            if (
$this->rfc_prosesa['valida'] ['status']) {
                
                
$this->get_rfc['status'] = TRUE;
                
$this->get_rfc['tipo'] = $this->rfc_prosesa['tipo'];
                switch (
$this->rfc_prosesa['tipo'] ) {
                    case 
'MORAL':
                            
$grupo_1 substr($this->rfc_prosesa['insertado'], 0,3);
                            
$grupo_2 substr($this->rfc_prosesa['insertado'], 3,6);
                            
$grupo_3 substr($this->rfc_prosesa['insertado'], 9,3);
                            
$this->get_rfc['rfc'] = $grupo_1."-".$grupo_2."-".$grupo_3;
                    break;
                    
                    default:
                            
$grupo_1 substr($this->rfc_prosesa['insertado'], 0,4);
                            
$grupo_2 substr($this->rfc_prosesa['insertado'], 4,6);
                            
$grupo_3 substr($this->rfc_prosesa['insertado'], 10,3);
                            
$this->get_rfc['rfc'] = $grupo_1."-".$grupo_2."-".$grupo_3;
                    break;
                }
            }else{
                
$this->get_rfc['status'] = FALSE;
                
$this->get_rfc['mensaje'] = $this->rfc_prosesa['valida'] ['mensaje'];
            }
        
        return 
$this->get_rfc;
    }


}
$rfc = new rfc("BAFJ070401AZ2");
$rfc2 = new rfc("HCM581122AZ","MORAL"); 
La funcion viene con la opcion de "tratar" de deducir si el rfc es fisico o moral

Última edición por bowiecamaleon; 28/01/2015 a las 01:42 Razón: error

Etiquetas: clases, rfc
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 01:05.