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");