<?php
/*************************************************************************
Clase de Validación del RIF (Registro de información fiscal) en Venezuela
Autor : Gunther González
Empresa : Igloo Web Studio
E-mail : hide@address.com
Web : http://www.igloo.com.ve
Fecha : 28/09/2006
Versión : 2.0
**************************************************************************/
//clase validarRIF
class vRIF
{
//**Atributos de la clase
var $URL;
var $pref;
var $mensaje;
var $RIF;
var $empresa;
//Constructor
function vRIF($RIF, $empresa)
{
$this->URL = "http://www.seniat.gov.ve/BuscaRif/BuscaRif.jsp?p_rif=";
$this->pref = "J,V,P,E,G";
$this->RIF = $RIF;
$this->empresa = $empresa;
}
//Función consultarRIF
//Consulta con la base de datos del SENIAT si el RIF existe
//y si esta asignado a la empresa dada.
function consultarRIF()
{
//Si la función formatearRIF devuelve TRUE
//se ejecuta el codigo
if ($this->formatearRIF($this->RIF))
{
//Abre la conexión con la BD del SENIAT
$file = fopen ($this->URL.$this->RIF, "r");
//Si no se puede establecer la conexión
//se emite un mensaje de error.
if (!$file)
{
$this->mensaje = $this->mensajes(05);
return;
}
//Lee el resultado de la consulta a la BD del SENIAT
while (!feof($file)) {
$consulta = fread($file, 8192);
}
//Busca el nombre de la empresa en el resultado de
//la BD del SENIAT
$consulta = stristr(strip_tags($consulta), $this->empresa);
//Si el RIF no existe o no está asignado a la empresa dada
//se emite un mensaje de error.
if (!$consulta)
{
$this->mensaje = $this->mensajes(06);
return;
}
//Si el RIF existe y está asignado a la empresa dada
//se emite un mensaje de exito.
else
{
$this->mensaje = $this->mensajes(07);
return;
}
//Cierra la conexión con la BD del SENIAT
fclose($file);
}
}
//Función formatearRIF
//Da formato y valida la estructura del RIF recibido
function formatearRIF($RIF)
{
//Elimina espacios al comienzo y al final del RIF
//Convierte todos los caracteres del RIF a MAYUSCULAS
//Elimina el guión (-) del número de RIF
$result = trim(strtoupper(str_replace("-","",$RIF)));
//Comprueba la longitud del RIF
//este solo puede tener una longitud de 10 caracteres
if (strlen($result) != 10)
{
$this->mensaje = $this->mensajes(01);
return false;
}
else
{
//Comprueba si el primer digito del RIF es un nmero
//este caracter solo puede ser una letra
if (is_numeric(substr($result,0,1)))
{
$this->mensaje = $this->mensajes(02);
return false;
}
//Comprueba si el primer digito del RIF contiene
//un caracter vlido este solo puede ser:
// "V" (Venezolanos)
// "E" (Extranjeros
// "P" (Pasaporte)
// "J" (Persona jurÃdica)
// "G" (Ente gubernamental)
elseif (!strrchr($this->pref,substr($result,0,1)))
{
$this->mensaje = $this->mensajes(03);
return false;
}
//Comprueba si los últimos 9 digitos del RIF son números
//estos no pueden contener letras
elseif (!is_numeric(substr($result,1)))
{
$this->mensaje = $this->mensajes(04);
return false;
}
else
{
//Devuelve el RIF una vez que ha sido formateado y validado
$this->RIF = $result;
return true;
}
}
}
function mensajes($num)
{
$msj[01] = "Recuerde que el RIF debe poseer 10 digitos (12 con los guiones).";
$msj[02] = "El primer caracter del RIF no puede ser un número.";
$msj[03] = "El primer caracter del RIF solo puede ser 'J', 'V', 'P', 'E' o 'G'.";
$msj[04] = "Los últimos 9 digitos del RIF solo pueden ser números.";
$msj[05] = "No se puede acceder al servidor en este momento.";
$msj[06] = "El RIF (".$this->RIF.") no está asignado a ".strtoupper($this->empresa)." o no existe";
$msj[07] = "El RIF esta perfecto";
return $msj[$num];
}
}
?>