-
-
Save giansalex/7f98a378265902672324469ccbc67b46 to your computer and use it in GitHub Desktop.
<?php | |
// Descargar padron reducido: https://www.sunat.gob.pe/descargaPRR/mrc137_padron_reducido.html | |
// Resultado al descomprimir: padron_reducido_ruc.txt | |
set_time_limit(0); | |
function queryRucPadron($txtPath, $ruc) | |
{ | |
$handle = fopen($txtPath, "r") or die("No se puede abrir el txt"); | |
$lines = 0; | |
$isFirst = true; | |
while (!feof($handle)) { | |
$line = fgets($handle, 1024); | |
if ($isFirst) { | |
$isFirst = false; | |
$lines++; | |
continue; | |
} | |
if (substr( $line, 0, 11) === $ruc) { | |
// position: $lines | |
return utf8_encode($line); | |
} | |
$lines++; | |
} | |
fclose($handle); | |
return 'NO ENCONTRADO'; | |
} | |
// Este proceso toma unos cuantos segundos. | |
$ruc = '20100070970'; | |
echo 'search: '.$ruc.PHP_EOL; | |
$resultado = queryRucPadron('padron_reducido_ruc.txt', $ruc); | |
echo $resultado.PHP_EOL; | |
// php query-ruc-padron.php | |
// search: 20100070970 | |
// 20100070970|SUPERMERCADOS PERUANOS SOCIEDAD ANONIMA 'O ' S.P.S.A.|ACTIVO|HABIDO|150130|CAL.|MORELLI|-|-|181|P-2|-|-|-|-| |
<?php | |
$line = 9623416; | |
$spl = new SplFileObject('padron_reducido_ruc.txt'); | |
$spl->seek($line); | |
echo $spl->current().PHP_EOL; |
Mi Bro, el codigo esta OK, pero demora demasiado
Claro que va a demorar, es un TXT con muchos registros.
En aquel momento, también exporte a una base de datos de un solo archivo https://www.php.net/manual/es/dba.example.php para evitar la dependencia de base de datos externa, los tiempos eran aceptables.
Yo estoy partiendo el txt en partes mas pequeñas para que la lectura sea mas rapida, aqui les paso el bash que uso:
#!/bin/bash
wget http://www2.sunat.gob.pe/padron_reducido_ruc.zip
unzip padron_reducido_ruc.zip
for i in {100..299}; do
echo "Cortando: ruc_$i \n\r"
grep "^$i" padron_reducido_ruc.txt > "txt/ruc_$i.txt"
done
chmod -R 777 txt/ruc_* -f
luego para leer
codigo PHP
set_time_limit(0);
function buscarBase($ruc){
$nro = substr($ruc, 0, 3);
$base = getcwd()."/base/txt/ruc_{$nro}.txt";
if (file_exists($base)) {
return $base;
}
return false;
}
function queryRucPadron($ruc)
{
$data=["resp"=>false,"data"=>""];
$base = buscarBase($ruc);
if (!$base)
return $data;
$file = new SplFileObject($base);
$file->seek(0);
foreach ($file as $line) {
if (substr($line, 0, 11) === $ruc) {
$data["resp"]=true;
$data["data"]=explode("|",utf8_encode($line));
return $data;
}
}
return $data;
}
$XUR = "10203040500";
echo json_encode(queryRucPadron($XUR));
Mi Bro, el codigo esta OK, pero demora demasiado