class utl_funcionesRFC{
var $rfc;
var $array_mew;
var $array_dias;
function utl_funcionesRFC($rfc){
$this->rfc = $rfc;
$this->array_mes = array("01"=>"1","02"=>"2","03"=>"3","04"=>"4","05"=>"5","06"=>"6","07"=>"7","08"=>"8","09"=>"9", "10" =>"A","11" =>"B","12" =>"C");
$this->array_dias = array("01"=>"1","02"=>"2","03"=>"3","04"=>"4","05"=>"5","06"=>"6","07"=>"7","08"=>"8","09"=>"9", "10" =>"A","11" =>"B","12" =>"C","13"=>"D","14"=>"E","15"=>"F","16"=>"G","17"=>"H","18"=>"I","19"=>"J","20"=>"K","21"=>"L","22"=>"M","23"=>"N","24"=>"O","25"=>"P","26"=>"Q","27"=>"R","28"=>"S","29"=>"T","30"=>"U","31"=>"V");
}
function condensarRFC(){
$longitud_rfc=strlen($this->rfc);
if ($longitud_rfc == '13'){
$primera = substr($this->rfc,0,4);
$anio = substr($this->rfc,4,2);
$mes = $this->array_mes[substr($this->rfc,6,2)];
$dia = $this->array_dias[substr($this->rfc,8,2)];
$homo = substr($this->rfc,10,3);
if (preg_match('[�]', $primera)) {
for($l=0; $l<=3; $l++) {
$e=1;
$letra=substr($primera,$l,$e);
if(ereg ('[�]',$letra)){ $letra ='2'; }
//echo "letra: $letra
";
$primer = $primer.$letra;
} //Fin del For
$primera = $primer;
} //Fin del if
$condensado = $primera.$anio.$mes.$dia.$homo;
} //Fin del if
else {
$primera = substr($this->rfc,0,3);
$anio = substr($this->rfc,3,2);
$mes = $this->array_mes[substr($this->rfc,5,2)];
$dia = $this->array_dias[substr($this->rfc,7,2)];
$homo = substr($this->rfc,9,3);
$filler ='X';
if (preg_match('[�&]', $primera)) {
for($l=0; $l<=2; $l++) {
$e=1;
$letra=substr($primera,$l,$e);
if(preg_match ('[&]',$letra)){ $letra ='1'; }
if(preg_match ('[�]',$letra)){ $letra ='2'; }
$primer = $primer.$letra;
} //Fin del For
$primera = $primer;
} //Fin del if
$condensado = $primera.$anio.$mes.$dia.$filler.$homo;
} //Fin del if
return $condensado;
}
/**
* Funci�n para buscar la informaci�n del contribuyente y registrarla en l�nea de captura
*
* @param objeto conexion $obj_asimov
* @param objeto conexion $obj_discovery
* @return array
*/
function buscaInformacionContrib($obj_asimov,$obj_discovery){
$queryBusca="SELECT c.cot_id, cd.cod_id, c.cont_nombre, c.cont_apaterno, c.cont_amaterno
FROM contribuyente c JOIN contribuyente_detalle cd USING (cot_id)
WHERE c.cont_rfc='$this->rfc'";
$obj_discovery->set_query($queryBusca);
$obj_discovery->ejecuta();
if($obj_discovery->regresa_renglones() != 0){
$Datos = $obj_discovery->regresa_registro();
$cot_id = $Datos[cot_id];
$cod_id = $Datos[cod_id];
}
else {
$query ="SELECT tipo from contribuyente where rfc='$this->rfc'";
$obj_asimov->set_query($query);
//print_r($obj_asimov);
$obj_asimov->ejecuta();
if($obj_asimov->regresa_renglones() != 0){
$Contribuyentes = $obj_asimov->regresa_registro();
$tipo = $Contribuyentes[tipo];
}else{
echo "No se puede obtener tipo del Contribuyente.";
}
switch ($tipo) {
case 'M':
$query_contribuyente = "SELECT razon_social,abrev, calle, num_ext,num_int,codpos,colonia
FROM persona_moral m, domicilio d
WHERE m.rfc=d.rfc
AND m.rfc='$this->rfc'";
$ident = 1;
break;
case 'F':
$query_contribuyente = "SELECT nombre, apellido_paterno,apellido_materno, calle,num_ext,num_int,codpos,colonia
FROM persona_fisica f, domicilio d
WHERE f.rfc=d.rfc
AND f.rfc='$this->rfc'";
$ident = 2;
break;
default:
$query_contribuyente = "SELECT nombre, ap_paterno AS apellido_paterno, ap_materno AS apellido_materno,calle,num_ext,num_int,codpos,coloni AS colonia
FROM pre_contribuyente
WHERE rfc ='$this->rfc'";
$ident = 2;
break;
}
$obj_asimov->set_query($query_contribuyente);
$obj_asimov->ejecuta();
if($obj_asimov->regresa_renglones() != 0){
$Contribuyente = $obj_asimov->regresa_registro();
if($ident == 1){
$razon_social = str_replace("'","''",$Contribuyente[razon_social]);
$abrev = $Contribuyente[abrev];
$nombre_contribuyente = $razon_social." ".$abrev;
}
else {
$nombre_contribuyente = str_replace("'","''",$Contribuyente[nombre]);
$apaterno_contribuyente = str_replace("'","''",$Contribuyente[apellido_paterno]);
$amaterno_contribuyente = str_replace("'","''",$Contribuyente[apellido_materno]);
}
$calle = ereg_replace("'","''",$Contribuyente[calle])." ".$Contribuyente[num_ext];
$colonia = $Contribuyente[colonia];
if($colonia == ""){
$colonia = 1;
}
$codpos = $Contribuyente[codpos];
$query_id_con = "SELECT nextval('contribuyente_cot_id_seq')";
$obj_discovery->set_query($query_id_con);
$obj_discovery->ejecuta();
if ($obj_discovery->regresa_renglones() != 0) {
$Contador = $obj_discovery->regresa_registro();
$cot_id = $Contador[0];
}
else {
echo "No se puede obtener el consecutivo para Contribuyente.";
}
$longitud = strlen($this->rfc);
switch ($longitud) {
case 12:
$query_inserta ="BEGIN;
INSERT INTO contribuyente
VALUES ($cot_id,'$this->rfc','$apaterno_contribuyente','$amaterno_contribuyente','','M','$nombre_contribuyente');
INSERT INTO contribuyente_detalle
VALUES (1,$cot_id,$colonia,'$codpos','','$telefono','$extension','$correoe','$calle',now(),'','');";
break;
case 13:
$query_inserta ="BEGIN;
INSERT INTO contribuyente
VALUES ($cot_id,'$this->rfc','$apaterno_contribuyente','$amaterno_contribuyente','','F','$nombre_contribuyente');
INSERT INTO contribuyente_detalle
VALUES (1,$cot_id,'$colonia','$codpos','','$telefono','$extension','$correoe','$calle',now(),'','');";
break;
}
//echo $query_inserta;
$obj_discovery->set_query($query_inserta);
$obj_discovery->ejecuta();
if ($obj_discovery->regresa_insercion() != 1) {
$queryFinal= "ROLLBACK;";
echo "No se puede registrar al contribuyente";
}
else {
$queryFinal= "COMMIT;";
}
$obj_discovery->set_query($queryFinal);
$obj_discovery->ejecuta();
$cod_id=1;
}
else {
echo "No se puede obtener la informaci�n del Contribuyente.";
}
}
return array($cot_id,$cod_id);
}
}
?>
/**
* Formacion de Lineas de Captura
*
* Clase que ayudara a la formacion de la linea de captura de 20 caracteres para todos los impuestos
* y tramites. Los parametros que debe recibir son:
* 1. Clave del Concepto
* 2. Referencia de 11 posiciones
* 3. Fecha de Vigencia de la linea de captura Formato: YYYY-MM-DD
* 4. Importe total a pagar (sin formato)
* 5. Periodo de Pago en 2 posiciones.
*
* 2008-01-10 Se agrega la validaci�n de datos que recibe la clase
* La funci�n es validaDatos()
*
* 2008-11-17 Se agrega la funcionalidad de aceptar el tipo de Funcion de cobro y la nueva llave
* para el 2009. La funci�n es obtenerReferenciaFC($funcioncobro,$conexion_silica) y se modifica la
* funci�n formaDigitoVer()
*
* 2008-12-12 Se agrega la funcionalidad de aceptar el tipo de Funcion y de cobro sin tener que consultar
* en Base de Datos. Dicha funcionalidad solo aplica para Emision (Tenencia y Predial). La funci�n es
* obtenerReferenciaFCMasiva($funcioncobro,$cve_impuesto)
*
* 2008-12-20 Se agrega la funcionalidad de regresar los errores que marca la utileria a trav�s de un arreglo.
* Los codigos de los errores se pueden obtener llamando la funcion obtenerMensajeError()
*
* 2009-10-16 Se agrega la funcionalidad que para el caso de la clave 77 se puedan generar lineas de captura en cero
*
* @author Elizabeth Campos
* @package utilerias
* @version 4.1
*/
class utl_formaLinea{
const ERROR_NO_OBJETO_LINEA = 01;
const ERROR_FORMATO_FECHA=02;
const ERROR_FORMATO_IMPORTE=03;
const ERROR_FORMATO_CLAVE=04;
const ERROR_FORMATO_REF=05;
const ERROR_FORMATO_VIG=06;
const ERROR_FORMATO_PP=07;
const ERROR_FORMATO_LDC=10;
const ERROR_FUNCOB=11;
private $clave;
private $referencia;
private $vigencia;
private $importe;
private $periodo;
private $mi_lineacaptura;
private $fcondensada;
private $dv_imp;
private $linea_base;
private $llave;
private $ldc;
private $cve_funcob;
private $subconcepto;
private $mensajes_e = array();
/**
* Constructor de la clase.
* Verifica que los objetos que recibe la clase sean correctos.
*
* @param string $cve Clave del tramite
* @param string $ref Referencia (Numeros de folio, RFC, etc)
* @param string $vig Vigencia del trámite
* @param string $imp Importe del trámite
* @param string $pp Periodo de pago (Para impuestos en se se especifica el periodo de pago)
* @param object $obj_linea Objeto del tipo linea
*/
function __construct($cve,$ref,$vig,$imp,$pp,$obj_linea){
$this->clave=$cve;
$this->referencia=$ref;
$this->vigencia=$vig;
//echo "ESTA ES LA REFERENCIA ".$this->vigencia;
if($this->vigencia > date('Y').'-12-31'){
$this->vigencia = date('Y')."-12-31";
}
$this->importe=abs(trim($imp));
$this->periodo=$pp;
$this->mi_lineacaptura=$obj_linea;
$this->getKey();
$this->validaDatos();
}
/**
* Funci�n P�blica que servir� para obtener la referencia de la Funci�n de Cobro.
*
* @param string $funcioncobro Funci�n de cobro
* @param object $conexion_silica objeto tipo conexi�n a SILICA
*/
public function obtenerReferenciaFC($funcioncobro,$conexion_silica,$subconcepto=0){
try{
if(get_class($conexion_silica) != "Pg_conexion_php5"){
array_push($this->mensajes_e,self::ERROR_NO_OBJETO_LINEA);
throw new Exception("El parametro enviado no es de clase Pg_conexion_php5",
self::ERROR_NO_OBJETO_CONEXION);
} else {
$anio_now = date('Y');
$query_obtenConcepto = "SELECT con_id FROM concepto WHERE con_clavelc='$this->clave' AND con_anio='$anio_now';";
$conexion_silica->set_query($query_obtenConcepto);
$conexion_silica->ejecuta();
if ($conexion_silica->regresa_renglones() != 0) {
$resultado = $conexion_silica->regresa_registro();
$con_id = $resultado['con_id'];
$obtenConcepto = true; }
else { $obtenConcepto = false; }
if($obtenConcepto){
$query_obtenRefFC = "SELECT cve_fun_cob
FROM concepto_con_cobro
WHERE con_id = '$con_id'
AND funcion_cobro_id='$funcioncobro'
AND subconcepto='$subconcepto'";
$query_obtenRefFC;
$conexion_silica->set_query($query_obtenRefFC);
$conexion_silica->ejecuta();
if ($conexion_silica->regresa_renglones() != 0) {
$resultado = $conexion_silica->regresa_registro();
$this->cve_funcob = $resultado['cve_fun_cob']; }
else {
$this->cve_funcob='0';
array_push($this->mensajes_e,self::ERROR_FUNCOB);
throw new Exception("Funci�n de Cobro desconocida",self::ERROR_FUNCOB);
}
}
}
} catch (Exception $e){
echo 'Error LDC en: ', $e->getCode()." - ".$e->getMessage(),"\n";
}
//echo "SOY EL RESULTADO DE REFERENCIA LC ".$this->cve_funcob;
}
/**
* Funci�n P�blica que servir� para obtener la referencia de la Funci�n de Cobro para la parte Masiva
*
* @param string $funcioncobro Funci�n de cobro
* @param string $cve_impuesto Clave del Impuesto
*/
public function obtenerReferenciaFCMasiva($funcioncobro,$cve_impuesto){
try{
switch ($cve_impuesto) {
case '80':
if ($funcioncobro=='0101') $this->cve_funcob ="1";
elseif ($funcioncobro == '0102') $this->cve_funcob="2";
elseif ($funcioncobro == '0301') $this->cve_funcob="3";
else $this->cve_funcob ="0";
break;
case 81:
if ($funcioncobro == '0302') $this->cve_funcob="2";
else $this->cve_funcob ="0";
break;
case 86:
if ($funcioncobro == '1311') $this->cve_funcob="1";
else $this->cve_funcob ="0";
break;
case 87:
if ($funcioncobro == '1310') $this->cve_funcob="1";
else $this->cve_funcob ="0";
break;
case 84:
case 20:
case 22:
case 24:
case 26:
if ($funcioncobro == '1301') $this->cve_funcob="1";
else $this->cve_funcob ="0";
break;
case 85:
case 21:
case 23:
case 25:
case 27:
if ($funcioncobro == '1302') $this->cve_funcob="1";
else $this->cve_funcob ="0";
break;
default:
$this->cve_funcob ="0";
break;
}
if($this->cve_funcob == "0"){
array_push($this->mensajes_e,self::ERROR_FUNCOB);
throw new Exception("Funci�n de Cobro desconocidaa",self::ERROR_FUNCOB);
}
}catch(Exception $e){
echo 'Error LDC en: ', $e->getCode()." - ".$e->getMessage(),"\n";
}
}
private function validaDatos(){
//*****Validaci�n de la Clave
try {
if (!isset($this->clave) || !preg_match("/^[0-9]{2}/",$this->clave)) {
array_push($this->mensajes_e,self::ERROR_FORMATO_CLAVE);
throw new Exception("La clave del concepto es incorrecta", self::ERROR_FORMATO_CLAVE);
}
}catch(Exception $e){
echo 'Error LDC en: ', $e->getCode().' - '. $e->getMessage(),"\n";
}
//*****Validaci�n de la Referencia
try{
if(!isset($this->referencia) || strlen($this->referencia) != 11){
array_push($this->mensajes_e,self::ERROR_FORMATO_REF);
throw new Exception("La referencia es incorrecta", self::ERROR_FORMATO_REF);
}
}catch (Exception $e){
//echo 'Error LDC en: ', $e->getCode().' - '. $e->getMessage(),"\n";
}
//*****Validaci�n de la Vigencia
try {
if(!isset($this->vigencia) || strlen($this->vigencia) != 10){
array_push($this->mensajes_e,self::ERROR_FORMATO_FECHA);
throw new Exception("La fecha est� incompleta", self::ERROR_FORMATO_FECHA);
}
}catch (Exception $e){
echo 'Error LDC en: ', $e->getCode().' - '. $e->getMessage(),"\n";
}
try{
if(!checkdate(substr($this->vigencia,5,2),
substr($this->vigencia,8,2),
substr($this->vigencia,0,4))){
array_push($this->mensajes_e,self::ERROR_FORMATO_FECHA);
throw new Exception("El formato de la fecha no es correcto", self::ERROR_FORMATO_FECHA);
}
}catch (Exception $e){
echo 'Error LDC en: ', $e->getCode().' - '. $e->getMessage(),"\n";
}
//***** Validaci�n del Importe
try{
if(!(preg_match("/^([0-9]+)$/",$this->importe) || preg_match("/^([0-9]+).([0-9]{2})$/",$this->importe))) {
array_push($this->mensajes_e,self::ERROR_FORMATO_IMPORTE);
throw new Exception("El formato del importe no es correcto", self::ERROR_FORMATO_IMPORTE);
}
}catch (Exception $e){
echo 'Error LDC en: ', $e->getCode().' - '. $e->getMessage(),"\n";
}
try {
if($this->importe == 0 && $this->clave!='77'){
array_push($this->mensajes_e,self::ERROR_FORMATO_IMPORTE);
throw new Exception("El importe es de 0.00", self::ERROR_FORMATO_IMPORTE);
}
}catch (Exception $e){
echo 'Error LDC en: ', $e->getCode().' - '. $e->getMessage(),"\n";
}
//*****Validaci�n del Periodo de Pago
try{
//echo "SOY YO |".$this->periodo."|";
if (!isset($this->periodo) || strlen($this->periodo) != 2) {
array_push($this->mensajes_e,self::ERROR_FORMATO_PP);
throw new Exception("El periodo es incorrecto", self::ERROR_FORMATO_PP);
}
}catch (Exception $e){
echo 'Error LDC en: ', $e->getCode().' - '. $e->getMessage(),"\n";
}
//*****Validaci�n del Objeto Genera Digito
try{
if(get_class($this->mi_lineacaptura) != "utl_generaDigito"){
array_push($this->mensajes_e,self::ERROR_NO_OBJETO_LINEA);
throw new Exception("El parametro enviado no es de clase Genera digito",
self::ERROR_NO_OBJETO_LINEA );
}
}catch (Exception $e){
echo 'Error LDC en: ', $e->getCode().' - '. $e->getMessage(),"\n";
}
}
public function obtenerMensajeError(){
// print_r($this->mensajes_e);
return $this->mensajes_e;
}
private function getKey(){
$this->llave=87021923; //2021
}
/**
* Funcion para obtener la fecha condensada a partir del parametro enviado.
*
* @access public
* @param string $this->vigencia Fecha de la vigencia
* @return string $this->fcondensada Parte del objeto donde se almacena la fecha condensada
*/
private function formaFecha(){
$aniov = substr($this->vigencia,0,4);
$mesv = substr($this->vigencia,5,2);
$diav = substr($this->vigencia,8,2);
$arrFecV = array("01-01"=>"AA", "01-02"=>"AB", "01-03"=>"AC", "01-04"=>"AD",
"01-05"=>"AE", "01-06"=>"AF", "01-07"=>"AH", "01-08"=>"AJ",
"01-09"=>"AK", "01-10"=>"AM", "01-11"=>"AN", "01-12"=>"AP",
"01-13"=>"AQ", "01-14"=>"AR", "01-15"=>"AT", "01-16"=>"AU",
"01-17"=>"AV", "01-18"=>"AW", "01-19"=>"AX", "01-20"=>"AY",
"01-21"=>"BA", "01-22"=>"BB", "01-23"=>"BC", "01-24"=>"BD",
"01-25"=>"BE", "01-26"=>"BF", "01-27"=>"BH", "01-28"=>"BJ",
"01-29"=>"BK", "01-30"=>"BM", "01-31"=>"BN",
"02-01"=>"BP", "02-02"=>"BQ", "02-03"=>"BR", "02-04"=>"BT",
"02-05"=>"BU", "02-06"=>"BV", "02-07"=>"BW", "02-08"=>"BX",
"02-09"=>"BY", "02-10"=>"CA", "02-11"=>"CB", "02-12"=>"CC",
"02-13"=>"CD", "02-14"=>"CE","02-15"=>"CF", "02-16"=>"CH",
"02-17"=>"CJ", "02-18"=>"CK", "02-19"=>"CM", "02-20"=>"CN",
"02-21"=>"CP", "02-22"=>"CQ", "02-23"=>"CR", "02-24"=>"CT",
"02-25"=>"CU", "02-26"=>"CV", "02-27"=>"CW", "02-28"=>"CX",
"02-29"=>"CY",
"03-01"=>"DC", "03-02"=>"DD", "03-03"=>"DE","03-04"=>"DF",
"03-05"=>"DH", "03-06"=>"DJ", "03-07"=>"DK", "03-08"=>"DM",
"03-09"=>"DN", "03-10"=>"DP", "03-11"=>"DQ", "03-12"=>"DR",
"03-13"=>"DT", "03-14"=>"DU", "03-15"=>"DV", "03-16"=>"DW",
"03-17"=>"DX", "03-18"=>"DY", "03-19"=>"EA", "03-20"=>"EB",
"03-21"=>"EC","03-22"=>"ED", "03-23"=>"EE", "03-24"=>"EF",
"03-25"=>"EH","03-26"=>"EJ","03-27"=>"EK", "03-28"=>"EM",
"03-29"=>"EN", "03-30"=>"EP", "03-31"=>"EQ",
"04-01"=>"ER", "04-02"=>"ET","04-03"=>"EU","04-04"=>"EV",
"04-05"=>"EW","04-06"=>"EX","04-07"=>"EY", "04-08"=>"FA",
"04-09"=>"FB", "04-10"=>"FC", "04-11"=>"FD", "04-12"=>"FE",
"04-13"=>"FF","04-14"=>"FH", "04-15"=>"FJ", "04-16"=>"FK",
"04-17"=>"FM", "04-18"=>"FN", "04-19"=>"FP","04-20"=>"FQ",
"04-21"=>"FR", "04-22"=>"FT", "04-23"=>"FU", "04-24"=>"FV",
"04-25"=>"FW", "04-26"=>"FX", "04-27"=>"FY", "04-28"=>"HA",
"04-29"=>"HB", "04-30"=>"HC",
"05-01"=>"HE", "05-02"=>"HF", "05-03"=>"HH", "05-04"=>"HJ",
"05-05"=>"HK", "05-06"=>"HM", "05-07"=>"HN","05-08"=>"HP",
"05-09"=>"HQ", "05-10"=>"HR","05-11"=>"HT","05-12"=>"HU",
"05-13"=>"HV", "05-14"=>"HW","05-15"=>"HX", "05-16"=>"HY",
"05-17"=>"JA", "05-18"=>"JB", "05-19"=>"JC","05-20"=>"JD",
"05-21"=>"JE", "05-22"=>"JF", "05-23"=>"JH", "05-24"=>"JJ",
"05-25"=>"JK","05-26"=>"JM", "05-27"=>"JN", "05-28"=>"JP",
"05-29"=>"JQ", "05-30"=>"JR", "05-31"=>"JT",
"06-01"=>"JU", "06-02"=>"JV", "06-03"=>"JW","06-04"=>"JX",
"06-05"=>"JY", "06-06"=>"KA", "06-07"=>"KB","06-08"=>"KC",
"06-09"=>"KD", "06-10"=>"KE", "06-11"=>"KF", "06-12"=>"KH",
"06-13"=>"KJ", "06-14"=>"KK","06-15"=>"KM", "06-16"=>"KN",
"06-17"=>"KP", "06-18"=>"KQ","06-19"=>"KR", "06-20"=>"KT",
"06-21"=>"KU","06-22"=>"KV","06-23"=>"KW", "06-24"=>"KX",
"06-25"=>"KY","06-26"=>"MA", "06-27"=>"MB", "06-28"=>"MC",
"06-29"=>"MD","06-30"=>"ME",
"07-01"=>"MH","07-02"=>"MJ","07-03"=>"MK", "07-04"=>"MM",
"07-05"=>"MN", "07-06"=>"MP","07-07"=>"MQ", "07-08"=>"MR",
"07-09"=>"MT", "07-10"=>"MU", "07-11"=>"MV", "07-12"=>"MW",
"07-13"=>"MX", "07-14"=>"MY", "07-15"=>"NA", "07-16"=>"NB",
"07-17"=>"NC", "07-18"=>"ND", "07-19"=>"NE", "07-20"=>"NF",
"07-21"=>"NH", "07-22"=>"NJ", "07-23"=>"NK", "07-24"=>"NM",
"07-25"=>"NN", "07-26"=>"NP", "07-27"=>"NQ", "07-28"=>"NR",
"07-29"=>"NT","07-30"=>"NU","07-31"=>"NV",
"08-01"=>"NW", "08-02"=>"NX", "08-03"=>"NY", "08-04"=>"PA",
"08-05"=>"PB", "08-06"=>"PC", "08-07"=>"PD", "08-08"=>"PE",
"08-09"=>"PF", "08-10"=>"PH", "08-11"=>"PJ", "08-12"=>"PK",
"08-13"=>"PM", "08-14"=>"PN", "08-15"=>"PP", "08-16"=>"PQ",
"08-17"=>"PR", "08-18"=>"PT", "08-19"=>"PU", "08-20"=>"PV",
"08-21"=>"PW", "08-22"=>"PX", "08-23"=>"PY", "08-24"=>"QA",
"08-25"=>"QB", "08-26"=>"QC", "08-27"=>"QD", "08-28"=>"QE",
"08-29"=>"QF", "08-30"=>"QH", "08-31"=>"QJ",
"09-01"=>"QK", "09-02"=>"QM", "09-03"=>"QN", "09-04"=>"QP",
"09-05"=>"QQ","09-06"=>"QR", "09-07"=>"QT", "09-08"=>"QU",
"09-09"=>"QV","09-10"=>"QW", "09-11"=>"QX", "09-12"=>"QY",
"09-13"=>"RA", "09-14"=>"RB", "09-15"=>"RC", "09-16"=>"RD",
"09-17"=>"RE","09-18"=>"RF", "09-19"=>"RH", "09-20"=>"RJ",
"09-21"=>"RK", "09-22"=>"RM", "09-23"=>"RN", "09-24"=>"RP",
"09-25"=>"RQ", "09-26"=>"RR", "09-27"=>"RT", "09-28"=>"RU",
"09-29"=>"RV", "09-30"=>"RW",
"10-01"=>"RY", "10-02"=>"TA", "10-03"=>"TB", "10-04"=>"TC",
"10-05"=>"TD","10-06"=>"TE", "10-07"=>"TF", "10-08"=>"TH",
"10-09"=>"TJ", "10-10"=>"TK", "10-11"=>"TM", "10-12"=>"TN",
"10-13"=>"TP", "10-14"=>"TQ", "10-15"=>"TR", "10-16"=>"TT",
"10-17"=>"TU", "10-18"=>"TV", "10-19"=>"TW", "10-20"=>"TX",
"10-21"=>"TY", "10-22"=>"UA", "10-23"=>"UB", "10-24"=>"UC",
"10-25"=>"UD", "10-26"=>"UE","10-27"=>"UF", "10-28"=>"UH",
"10-29"=>"UJ", "10-30"=>"UK", "10-31"=>"UM",
"11-01"=>"UN", "11-02"=>"UP","11-03"=>"UQ", "11-04"=>"UR",
"11-05"=>"UT","11-06"=>"UU", "11-07"=>"UV", "11-08"=>"UW",
"11-09"=>"UX","11-10"=>"UY", "11-11"=>"VA", "11-12"=>"VB",
"11-13"=>"VC", "11-14"=>"VD", "11-15"=>"VE","11-16"=>"VF",
"11-17"=>"VH", "11-18"=>"VJ", "11-19"=>"VK", "11-20"=>"VM",
"11-21"=>"VN", "11-22"=>"VP","11-23"=>"VQ", "11-24"=>"VR",
"11-25"=>"VT", "11-26"=>"VU", "11-27"=>"VV", "11-28"=>"VW",
"11-29"=>"VX","11-30"=>"VY",
"12-01"=>"WB", "12-02"=>"WC", "12-03"=>"WD", "12-04"=>"WE",
"12-05"=>"WF","12-06"=>"WH", "12-07"=>"WJ","12-08"=>"WK",
"12-09"=>"WM","12-10"=>"WN", "12-11"=>"WP", "12-12"=>"WQ",
"12-13"=>"WR", "12-14"=>"WT", "12-15"=>"WU", "12-16"=>"WV",
"12-17"=>"WW", "12-18"=>"WX", "12-19"=>"WY","12-20"=>"XA",
"12-21"=>"XB","12-22"=>"XC", "12-23"=>"XD","12-24"=>"XE",
"12-25"=>"XF", "12-26"=>"XH","12-27"=>"XJ", "12-28"=>"XK",
"12-29"=>"XM", "12-30"=>"XN","12-31"=>"XP");
$fecha_conde= "$mesv-$diav";
$this->fcondensada=$arrFecV{$fecha_conde};
}
/**
* Funcion para obtener el digito verificador de la linea de captura
*
* @access public
* @param $this->clave Atributo de este objeto correspondiente a la clave
* @param $this->referencia Atributo de este objeto correspondiente a la referencia (Folio, RFC, etc.)
* @param $this->fcondensada Atributo de este objeto correspondiente a la fecha condensada
* @param $this->dv_imp Atributo de este objeto correspondiente al dígito validador del importe
* @param $this->periodo Atributo de este objeto correspondiente al periodo de pago (Predial)
*
* @return string $lineacaptura Cadena de Linea de captura
*
*/
private function formaDigitoVer(){
if($this->cve_funcob != '0'){
$linea=$this->clave . $this->referencia . $this->fcondensada . $this->cve_funcob . $this->periodo;
$this->mi_lineacaptura->setLinea($linea);
$dv_lc = $this->mi_lineacaptura->getDigitoVerificadorLC($linea);
$ud_lc = $this->aotrabase($dv_lc,"0123456789","0123456789ABCDEFHJKMNPQRTUVWXY");
if($dv_lc < 30) {
$ud_lc = "0".$ud_lc;
if($dv_lc== 0){ $ud_lc="00";}
}
$this->linea_base=$linea.$ud_lc;
}
else { $this->linea_base=''; }
}
private function formaDigitoVerImp(){
$dvi = $this->mi_lineacaptura->getDigVerImp($this->importe);
return $dvi;
}
function new_linea(){
//Para obtener la l�nea de captura base.
$this->formaFecha();
$this->formaDigitoVer();
//comienza el proceso de generaci�n de la nueva ldc
//echo "LINEA BASE ".$this->linea_base."
";
$corte = substr($this->linea_base,13,5);
$corte_decimal = $this->aotrabase($corte,"0123456789ABCDEFHJKMNPQRTUVWXY","0123456789");
$corte_decimal=$this->cerosizquiera($corte_decimal);
$suma_corte= ($corte_decimal+$this->importe+$this->llave)%24300000;
$corte_base30=$this->aotrabase($suma_corte,"0123456789","0123456789ABCDEFHJKMNPQRTUVWXY");
$corte_base30=$this->cerosizquiera($corte_base30);
$linea_final=strtoupper(substr($this->linea_base,0,13).$corte_base30.substr($this->linea_base,18,2));
$this->ldc = trim($linea_final);
//echo "LINEA FINAL ".$this->ldc;
//exit();
$this->valida_ldc();
return $this->ldc;
}
private function valida_ldc(){
try{
if(!isset($this->ldc) || strlen($this->ldc) != 20){
array_push($this->mensajes_e,self::ERROR_FORMATO_LDC);
throw new Exception("Longitud menor de 20 caracteres", self::ERROR_FORMATO_LDC);
}
}catch (Exception $e){
$this->ldc="";
echo "Error LDC en: ".$e->getCode()." - ".$e->getMessage(), "\n";
}
try{
$checa = count($this->obtenerMensajeError());
if($checa > 0){
/*echo "ENTRE AQUI ";
print_r($this->obtenerMensajeError());*/
//array_push($this->mensajes_e,self::ERROR_FORMATO_LDC);
throw new Exception("", self::ERROR_FORMATO_LDC);
}
}catch (Exception $e){
$this->ldc="";
}
}
private function aotrabase($numero,$base_original,$base_destino) {
$numero = trim($numero);
if(substr($numero,0,1) == "-"){
$numero = substr($numero,1);
$negativo = true;
}
else {
$negativo = false;
}
$arreglo_numero = preg_split('//', $numero, -1, PREG_SPLIT_NO_EMPTY);
$entero = 0;
foreach ($arreglo_numero as $digito) {
$entero = $entero * strlen($base_original) + (strpos($base_original,$digito));
if(strpos($base_original,$digito) === false) {
echo "Error: ".strpos($base_original,$digito)."\n";
echo "Caracter invalido: $digito\n";
return false;
}
}
$resultado = "";
while ($entero > 0){
$digito = $entero % strlen($base_destino);
$resultado = substr($base_destino,$digito,1).$resultado;
$entero = floor($entero / strlen($base_destino));
}
if($negativo) "-".$resultado;
return $resultado;
}
private function cerosizquiera($cadena){
$long= strlen($cadena);
switch ($long) {
case 1:
$cadena='0000'.$cadena;
break;
case 2:
$cadena='000'.$cadena;
break;
case 3:
$cadena='00'.$cadena;
break;
case 4:
$cadena='0'.$cadena;
break;
default:
$cadena=$cadena;
break;
}
return $cadena;
}
/**
* Funcion extra relacionada con el digitoverificador del codigo de barras
* @experimental
*/
function formaDigitoVerCB($mi_importe = "default" ){
$linea = $this->clave.$this->referencia.$this->fcondensada.$this->dv_imp.$this->periodo;
$this->mi_lineacaptura->setLinea($linea);
$dv_lc = $this->mi_lineacaptura->getDigitoVerificadorLC($linea);
$anio_fin = substr($this->vigencia,0,4);
$ud_lc = ($dv_lc + $anio_fin) % 100;
$ludlc = strlen($ud_lc);
if($ludlc == 1) {
$ud_lc= '0'.$ud_lc;
}
$lineacaptura = $linea.$ud_lc;
//Extension para obtener el validador de la linea de captura
if ($mi_importe == "default") {
$this->mi_lineacaptura->set_primBC(
$lineacaptura . str_pad(intval($this->importe),9, "0", STR_PAD_LEFT));
} else {
$this->mi_lineacaptura->set_primBC(
$lineacaptura . str_pad(intval($this->importe),9, "0", STR_PAD_LEFT));
}
$formaDigitoVerCB = $this->mi_lineacaptura->getDigitoVerificadorBC();
return $formaDigitoVerCB;
}
function formaDigitoVerCBsololinea($importe = "default",$linea ){
// $linea = $this->clave.$this->referencia.$this->fcondensada.$this->dv_imp.$this->periodo;
$this->mi_lineacaptura->setLinea($linea);
$this->mi_lineacaptura->set_primBC(
$lineacaptura . str_pad(intval($importe),9, "0", STR_PAD_LEFT));
$formaDigitoVerCB = $this->mi_lineacaptura->getDigitoVerificadorBC();
return $formaDigitoVerCB;
}
}
?>