<?php //VERSIÓN 23ENE2024 //exit; //01260925120016600080000022540101000045 $ofuscar = '1G$F80AP0j00E]1100úc'; //echo "$ofuscar\n"; $frase= $ofuscar;//"4up152nr+t3aaa37m+8ncm9c5b+du2l"; //echo defuscar_v2($frase); $referencia ="0000005245";//la que consultan $infoventa = defuscar_v2($frase, $referencia); //transacción de consulta $infoventa['nota'] = $referencia; print_r($infoventa); //Función para obtener el checksum y comprobar si es valida o no una cadena function getChecksum ($ptr, $sz) { $chk = 0; $i=0; while ($sz-- != 0){ $chk = $chk+$ptr[$i]; //printf ("chk:%2d\n", chk); printf ("chk:%d, ptr[%d]: * %d\n", $chk, $i, $ptr[$i]); $i++; } return $chk; } function defuscar_v2($frase, $referencia){ $CodigoDes = array('00' => '0','01' => '1','02' => '2','03' => '!','04' => 'K','05' => '3','06' => '4','07' => '5','08' => '#','09' => '$','10' => '6','11' => '7','12' => '8','13' => '%','14' => '&','15' => '9','16' => 'A','17' => 'B','18' => 'L','19' => '(','20' => 'C','21' => 'D','22' => 'E','23' => ')','24' => '*','25' => 'F','26' => 'G','27' => 'H','28' => '+','29' => ',','30' => 'I','31' => 'J','32' => '.','33' => '-','34' => '/','35' => ':','36' => 'Á','37' => 'É','38' => 'Í','39' => 'Ó','40' => 'Ú','41' => 'á','42' => 'é','43' => '?','44' => 'ó','45' => 'ú','46' => ';','47' => '<','48' => '=','49' => '>','50' => 'N','51' => '@','52' => '[','53' => '\\','54' => ']','55' => '{','56' => '}','57' => '_','58' => 'Ñ','59' => 'ñ','60' => 'P','61' => 'Q','62' => 'R','63' => 'S','64' => 'T','65' => 'U','66' => 'V','67' => 'W','68' => 'X','69' => 'Y','70' => 'Z','71' => 'a','72' => 'b','73' => 'c','74' => 'd','75' => 'e','76' => 'f','77' => 'g','78' => 'h','79' => '¿','80' => 'j','81' => 'k','82' => 'z','83' => 'm','84' => 'n','85' => 'o','86' => 'p','87' => 'q','88' => 'r','89' => 's','90' => 't','91' => 'u','92' => 'v','93' => 'w','94' => 'x','95' => 'y','96' => 'M','97' => 'i','98' => 'í','99' => 'O'); $infoventa = array('fecha'=>'0','producto'=>'0','formapago'=>'0','cantidad'=>'0','precio'=>'0','total'=>'0', 'monto_iva'=>'0', 'subtotal'=>'0', 'nota'=>'0', 'checksum'=>'false', 'ref_valida'=>'false'); $i=0; //mes(0) //dia(1) //horas(2) //minutos(3) //segundos(4) //monto_venta+precio+monto_iva(5) 9 codigos (5 al 13) //prod_pos(14) //forma de pago(15) //cuenta(16 y 17) //transacción(18) //checksum(19) //$frase = array('1', 'G', '$', 'F', '8', '0', 'A', 'P', '0', 'j', '0', '0', 'E', ']', '1', '1', '0', '0', 'ú', 'c'); $ofuscar = '1G$F80AP0j00E]1100úc'; for ($i=0;$i < strlen(utf8_decode($ofuscar));$i++){ echo "valor[$i]:". utf8_decode($ofuscar[$i])."\n"; if (utf8_decode($ofuscar[$i]) == utf8_decode('ú')) echo "iguales\n"; if (utf8_encode($ofuscar[$i]) == utf8_encode('ú')) echo "iguales\n"; if ($ofuscar[$i] == 'ú') echo "iguales\n"; } if (strlen ($frase) != 20){ $infoventa['ref_valida'] = 'false'; $infoventa['checksum'] = 'false'; $infoventa['producto'] = ''; $infoventa['formapago'] = ''; $infoventa['fecha'] = ''; $infoventa['cantidad'] = 0.000; $infoventa['precio'] = 0.00; $infoventa['total'] = 0.00; $infoventa['subtotal'] = 0.00; $infoventa['monto_iva'] = 0.00; return $infoventa; } return; //OBTENER MES $pos=0; $mes_code = $frase[$pos++];//0 $mes = array_search("$mes_code", $CodigoDes); echo "\nmes:$mes\n"; //OBTENER DÍA $dia_code = $frase[$pos++];//1 $dia = array_search("$dia_code", $CodigoDes); echo "dia:$dia\n"; //OBTENER HORAS $horas_code = $frase[$pos++];//2 $horas = array_search("$horas_code", $CodigoDes); echo "horas:$horas\n"; //OBTENER MINUTOS $minutos_code = $frase[$pos++];//3 $minutos = array_search("$minutos_code", $CodigoDes); echo "minutos:$minutos\n"; //OBTENER SEGUNDOS $segundos_code = $frase[$pos++];//4 $segundos = array_search("$segundos_code", $CodigoDes); echo "segundos:$segundos\n"; //OBTENER monto+precio+monto_iva $monto_precio_iva_code = array(); $monto_precio_iva_code[] = $frase[$pos++];//5, 9codigos en total (13) $monto_precio_iva_code[] = $frase[$pos++];//6, 9codigos en total (13) $monto_precio_iva_code[] = $frase[$pos++];//7, 9codigos en total (13) $monto_precio_iva_code[] = $frase[$pos++];//8, 9codigos en total (13) $monto_precio_iva_code[] = $frase[$pos++];//9, 9codigos en total (13) $monto_precio_iva_code[] = $frase[$pos++];//10, 9codigos en total (13) $monto_precio_iva_code[] = $frase[$pos++];//11, 9codigos en total (13) $monto_precio_iva_code[] = $frase[$pos++];//12, 9codigos en total (13) $monto_precio_iva_code[] = $frase[$pos++];//13, 9codigos en total (13) //$pos += 8;//ya se tomo una y se incremento a pos 6, por eso se toma +7, lo que dá 13. //$monto_precio_iva = array_search("$monto_precio_iva_code", $CodigoDes); $monto_precio_iva_decode=""; for ($i=0; $i< count($monto_precio_iva_code); $i++){ $dato_code = $monto_precio_iva_code[$i]; $dato = array_search("$dato_code", $CodigoDes); if ($monto_precio_iva_decode == "") $monto_precio_iva_decode = $dato; else $monto_precio_iva_decode .= $dato; } echo "monto_precio_iva_decode:$monto_precio_iva_decode\n"; //Monto //$monto = substr($monto_precio_iva_decode, 0, 5) . '.' . substr($monto_precio_iva_decode, 5, 2); $monto = substr($monto_precio_iva_decode, 0, 7); $monto = $monto / 100; $monto = sprintf("%1.2lf", doubleval($monto)); echo "monto:$monto\n"; //precio //$precio = substr($monto_precio_iva_decode, 7, 2) . '.' . substr($monto_precio_iva_decode, 9, 2); $precio = substr($monto_precio_iva_decode, 7, 4); $precio = $precio / 100; $precio = sprintf("%1.2lf", doubleval($precio)); echo "precio:$precio\n"; //monto iva //$monto_iva = substr($monto_precio_iva_decode, 11, 5) . '.' . substr($monto_precio_iva_decode, 16, 2); $monto_iva = substr($monto_precio_iva_decode, 11, 7); $monto_iva = $monto_iva / 100; $monto_iva = sprintf("%1.2lf", doubleval($monto_iva)); echo "monto_iva:$monto_iva\n"; //cantidad if ($precio == 0) $cantidad = 0.00; else $cantidad = $monto / $precio; $cantidad = sprintf("%1.3lf", doubleval($cantidad)); //subtotal $subtotal = $monto - $monto_iva; $subtotal = sprintf("%1.2lf", doubleval($subtotal)); //Producto y posición de carga //OBTENER PRODUCTO Y POSICIÓN DE CARGA $prod_pos_code = $frase[$pos++];//14 $prod_pos = array_search("$prod_pos_code", $CodigoDes); echo "prod_pos:$prod_pos, $pos, $prod_pos_code\n"; $tipo_producto = "PRODUCTO1"; $prod_sel = 0; $posicion_carga = 0; if (intval($prod_pos) >=1 and intval($prod_pos) <=32){ $tipo_producto = "PRODUCTO1"; $prod_sel = 0; }else if (intval($prod_pos) >=33 and intval($prod_pos) <=64){ $tipo_producto = "PRODUCTO2"; $prod_sel = 32; }else if (intval($prod_pos) >=65 and intval($prod_pos) <=96){ $tipo_producto = "PRODUCTO3"; $prod_sel = 64; } //Posición de carga $posicion_carga = $posicion_carga - $prod_sel; //Obtenerlo del catalogo de productos (BD) $producto=""; $fp_desc=""; switch ($tipo_producto) { case 'PRODUCTO1': $producto = 'REGULAR';//getProductoBD($tipo_producto); // code... break; case 'PRODUCTO2': $producto = 'PREMUM';//getProductoBD($tipo_producto); // code... break; case 'PRODUCTO3': $producto = 'DIESEL';//getProductoBD($tipo_producto); // code... break; case 'PRODUCTO4': $producto = '';//getProductoBD($tipo_producto); // code... break; default: $producto = 'NO IDENTIFICADO';//getProductoBD($tipo_producto); // code... break; } //forma de pago //OBTENER FORMA DE PAGO $tipo_formapago_code = $frase[$pos++];//15 $tipo_formapago = array_search("$tipo_formapago_code", $CodigoDes);; //Forma de pago /* 01: Efectivo 02: Cheque nominativo 03: Transferencia electrónica de fondos 04: Tarjeta de crédito 05: Monedero electrónico 06: Dinero electrónico 08: Vales de despensa 12: Dación en pago 13: Pago por subrogación 14: Pago por consignación 15: Condonación 17: Compensación 23: Novación 24: Confusión 25: Remisión de deuda 26: Prescripción o caducidad 27: A satisfacción del acreedor 28: Tarjeta de débito 29: Tarjeta de servicios 30: Aplicación de anticipos 99: Por definir */ echo "tipo_formapago:$tipo_formapago\n"; //Obtenerlo del catalogo de productos (BD). Listar todas las opciones (consultar catalago de formas de pago) switch ($tipo_formapago) { case '01': $fp_desc = '01 Efectivo';//getFP($tipo_formapago); break; case '02': $fp_desc = '02 Cheque nominativo';//getFP($tipo_formapago); break; case '03': $fp_desc = '03 Transferencia electrónica de fondos';//getFP($tipo_formapago); break; case '03': $fp_desc = '03 Transferencia electrónica de fondos';//getFP($tipo_formapago); break; case '04': $fp_desc = '04 Tarjeta de crédito';//getFP($tipo_formapago); break; case '05': $fp_desc = '05 Monedero electrónico';//getFP($tipo_formapago); break; case '06': $fp_desc = '06 Dinero electrónico';//getFP($tipo_formapago); break; case '08': $fp_desc = '08 Vales de despensa';//getFP($tipo_formapago); break; case '12': $fp_desc = '12 Dación en pago';//getFP($tipo_formapago); break; case '13': $fp_desc = '13 Pago por subrogación';//getFP($tipo_formapago); break; case '14': $fp_desc = '14 Pago por consignación';//getFP($tipo_formapago); break; case '15': $fp_desc = '15 Condonación';//getFP($tipo_formapago); break; case '17': $fp_desc = '17 Compensación';//getFP($tipo_formapago); break; case '23': $fp_desc = '23 Novación';//getFP($tipo_formapago); break; case '24': $fp_desc = '24 Confusión';//getFP($tipo_formapago); break; case '25': $fp_desc = '25: Remisión de deuda';//getFP($tipo_formapago); break; case '26': $fp_desc = '26 Prescripción o caducidad';//getFP($tipo_formapago); break; case '27': $fp_desc = '27 A satisfacción del acreedor';//getFP($tipo_formapago); break; case '28': $fp_desc = '28 Tarjeta de débito';//getFP($tipo_formapago); break; case '29': $fp_desc = '29 Tarjeta de servicios';//getFP($tipo_formapago); break; case '30': $fp_desc = '30 Aplicación de anticipos';//getFP($tipo_formapago); break; case '99': $fp_desc = ' 99: Por definir';//getFP($tipo_formapago); break; default: $fp_desc = 'NO DENTIFICADO';//getFP($tipo_formapago); break; } //cuenta //OBTENER DOS CODIGOS DE CUENTA $cuenta_code = $frase[$pos++];//16 $cuenta = array_search("$cuenta_code", $CodigoDes); $cuenta_code = $frase[$pos++];//17 $cuenta = $cuenta . array_search("$cuenta_code", $CodigoDes); //echo "cuenta:$cuenta\n"; //transacción //OBTENER 1 CODIGO PARA DOS DIGITOS DE TRANSACCIÓN $idtransac_code = $frase[$pos++];//18 $idtransac_value = array_search("$idtransac_code", $CodigoDes); //echo $frase[18].", pos:$pos\n"; //echo "idtransac_code:$idtransac_code, idtransac_code:$idtransac_code\n"; //Este es cuando se obtiene toda la cadena //OBTENER CHECKSUM $checksum_code = $frase[$pos++];//19 $checksum_value = array_search("$checksum_code", $CodigoDes); //echo "checksum_value:$checksum_value\n"; $cadena = $mes . $dia . $horas . $minutos . $segundos . $monto_precio_iva_decode .$prod_pos . $tipo_formapago . $cuenta . $idtransac_value; //echo "cadena:$cadena\n"; $long_ck = 38; //$cadena = "01241700030000027080000000040101000080"; $checksum = getChecksum ($cadena, $long_ck); $checksum = $checksum % 100; $status_checksum = 'false'; if (intval($checksum_value) == intval($checksum)){//Verifica si es o no válida la cadena. $status_checksum = 'true'; } //Valida si es o no valida la referencia solicitada con la existente en el WebId $status_ref = 'false'; if (substr($referencia, strlen($referencia)-2, 2) == $idtransac_value){//ES o no valida la terminación de la referencia $status_ref = 'true'; } $infoventa['ref_valida'] = $status_ref;//true los dos digitos de referencia son identicos al WebId, false no son correctos. $infoventa['checksum'] = $status_checksum;//true es correcto el checksum, false es invalido $infoventa['producto'] = $producto; $infoventa['formapago'] = $fp_desc; $infoventa['fecha'] = date('Y') . $mes . $dia . $horas . $minutos . $segundos; //Formateo a 3 decimales $infoventa['cantidad'] = $cantidad; //Formateo a dos decimales $infoventa['precio'] = $precio; //Formateo a dos decimales $infoventa['total'] = $monto; //Formateo a dos decimales $infoventa['subtotal'] = $subtotal; //Formateo a dos decimales $infoventa['monto_iva'] = $monto_iva; return $infoventa; } ?>
Write, Run & Share PHP code online using OneCompiler's PHP online compiler for free. It's one of the robust, feature-rich online compilers for PHP language, running on the latest version 7. Getting started with the OneCompiler's PHP compiler is simple and pretty fast. The editor shows sample boilerplate code when you choose language as PHP
and start coding.
OneCompiler's PHP online editor supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample PHP program which takes name as input and prints hello message with your name.
<?php
fscanf(STDIN, "%s\n", $name);
echo "Hello ".$name.".\n";
?>
PHP(Hypertext Preprocessor) is widely used server sripting language by Rasmus Lerdorf in the year 1994.
In PHP, there is no need to explicitly declare variables to reserve memory space. When you assign a value to a variable, declaration happens automatically. Variables are case-sensitive in PHP.
$variable_name = value;
If, If-else, Nested-Ifs are used when you want to perform a certain set of operations based on conditional expressions.
if(conditional-expression){
//code
}
if(conditional-expression){
//code if condition is true
} else {
//code if condition is false
}
if(condition-expression1) {
//code if above condition is true
} elseif(condition-expression2){
//code if above condition is true
}
elseif(condition-expression3) {
//code if above condition is true
}
...
else {
//code if all the conditions are false
}
Switch is used to execute one set of statement from multiple conditions.
switch(conditional-expression) {
case value1:
// code if the above value is matched
break; // optional
case value2:
// code if the above value is matched
break; // optional
...
default:
// code to be executed when all the above cases are not matched;
}
For loop is used to iterate a set of statements based on a condition.
for(Initialization; Condition; Increment/decrement){
// code
}
// you can use any of the below syntax
foreach ($array as $element-value) {
//code
}
foreach ($array as $key => $element-value) {
//code
}
While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.
while(condition) {
// code
}
Do-while is also used to iterate a set of statements based on a condition. It is mostly used when you need to execute the statements atleast once.
do {
// code
} while (condition);
Function is a sub-routine which contains set of statements. Usually functions are written when multiple calls are required to same set of statements which increases re-usuability and modularity.
function function_name(parameters) {
//code
}
function_name (parameters)