PHP - API consulta rif seniat Venezuela

 
Vista:
sin imagen de perfil

API consulta rif seniat Venezuela

Publicado por Jose (3 intervenciones) el 15/04/2023 21:32:05
Existe alguna api para consultar el rif del seniat en Venezuela?
Necesito mediante alguna api, poder extraer la informacion fiscal del contribuyente.

Este link http://contribuyente.seniat.gob.ve/BuscaRif/BuscaRif.jsp es un formulario
y aparte hay que ingresar un captcha

Este link http://contribuyente.seniat.gob.ve/getContribuyente/getrif?rif=J003360392
dejo de funcionar

Este otro link http://www.elrif.com/?rif=J003360392 tambien dejo de funcionar

Al parecer el unico que funciona es el sitio oficial, pero como un formulario captcha

¡Necesito ayuda por favor!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 393
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

API consulta rif seniat Venezuela

Publicado por Jefferson (203 intervenciones) el 16/04/2023 01:59:28
Hola José

Ya haz intentado hacerlo por curl?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

API consulta rif seniat Venezuela

Publicado por Jose (3 intervenciones) el 16/04/2023 02:04:05
Si claro que lo intente fijate:

Esto no funciona
1
2
3
4
5
6
7
8
9
10
11
$url = "http://contribuyente.seniat.gob.ve/getContribuyente/getrif?rif=J003360392";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_REFERER,'http://seniat.gob.ve');
        curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (X11; Linux i686; rv:32.0) Gecko/20100101 Firefox/32.0');
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
        curl_setopt($ch,CURLOPT_FRESH_CONNECT,TRUE);
        curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,5);
        curl_setopt($ch,CURLOPT_TIMEOUT,30);
        $html=curl_exec($ch);
        echo $html;

Esto tampoco funciona
1
2
3
4
5
6
7
8
9
10
11
$url = "http://www.elrif.com/?rif=J003360392";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_REFERER,'http://seniat.gob.ve');
        curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (X11; Linux i686; rv:32.0) Gecko/20100101 Firefox/32.0');
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
        curl_setopt($ch,CURLOPT_FRESH_CONNECT,TRUE);
        curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,5);
        curl_setopt($ch,CURLOPT_TIMEOUT,30);
        $html=curl_exec($ch);
        echo $html;

La pagina oficial si entrega los datos, pero hay que hacerlo a mano y escribir el bendito captcha.

Por ejemplo si abro la pagina http://contribuyente.seniat.gob.ve/BuscaRif/BuscaRif.jsp sale la imagen captcha y tomo su valor ejemplo: 196cyt y en otra pestaña abro http://contribuyente.seniat.gob.ve/BuscaRif/BuscaRif.jsp?p_rif=JJ003360392&codigo=196cyt si que me da los resultados

Pero si intento hacerlo por curl
1
2
3
4
5
6
7
8
9
$url = "http://contribuyente.seniat.gob.ve/BuscaRif/BuscaRif.jsp?p_rif=JJ003360392&codigo=196cyt";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
        curl_setopt($ch,CURLOPT_FRESH_CONNECT,TRUE);
        curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,5);
        curl_setopt($ch,CURLOPT_TIMEOUT,30);
        $html=curl_exec($ch);
        echo $html;

Imprime la pagina y dice EL código no coincide con la imagen

Lo que pretendo es crear un código o una api, para poder implementarlo en una pagina de punto de venta, donde el operador solo tipee el numero de cedula o rif y traer de vuelta la información fiscal del contribuyente.

Gracias por preguntar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 393
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

API consulta rif seniat Venezuela

Publicado por Jefferson (203 intervenciones) el 16/04/2023 23:45:00
Vaya, el tema es un poco complejo.

Se me ocurre usar OCR para leer ese captcha, pero también es complicado porque la imagen aparte de ser muy pequeña, una linea horizontal la atraviesa.

Tambien hay APIs para lectura de imagenes como Google Cloud Vision entre otras tantas
...Pero, todas son de pago (creo te dejan 1000 consultas al mes)

Déjame ver si se me ocurre algo o quizás algún otro compañero del foro tenga alguna API debajo de la manga u otra forma mejor de hacer es consulta.!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 393
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

API consulta rif seniat Venezuela

Publicado por Jefferson (203 intervenciones) el 18/04/2023 02:42:48
Vamos a leer ese captcha, el proceso es un poco complejo, mas no imposible.. ahi te va.

--- La configuracion ----



Primero que todo, si estas en local y usas XAMPP o WAMP

1) Debes instalar IMAGICK
Para XAMPP lee esto Imagick xampp
Para WAMP lee esto Imagick wamp

2) Si estas en un hosting, no te preocupes que ya viene instalado por defecto.

3) Para leer la imagen captcha necesitamos de Tesseract-OCR
Para instalarlo en local lee esto tesseract windows
Para instalarlo en tu hosting lee esto tesseract ubuntu

4) Por ultimo necesitamos de la libreria php tesseract-ocr-for-php
que la puedes descargar desde aqui libreria tesseract github

---- La practica ----



Atacaremos a la pagina oficial http://contribuyente.seniat.gob.ve/BuscaRif/BuscaRif.jsp
que es la unica que esta funcionando.

¿Que es lo que haremos?

Mediante curl vamos a descargar en una carpeta que la llamaras tmp, la imagen captcha y crearemos un txt
con un archivo que nos guardara las cookies, de este curl. ¿Para que guardamos las cookies?, mas adelante te lo explico.

Una vez que descargamos la imagen, mediante IMAGICK le elimino la linea horizontal que le atraviesa, mejoro, centralizo, aumento y aplico filtros a la imagen, para luego guardarla en la misma carpeta donde ya he guardado la imagen original y las cookies.

Ya teniendo la imagen legible, le indico a Tesseract-OCR que la lea y recupero lo leido.

Ahora, nuevamente y por medio de curl vuelvo a atacar la pagina oficial y envió los datos como si fueran los input, pero mediante POST o GET y también le agrego las cookies, para hacerle entender a la pagina oficial que se trata de la consulta anterior.
¡Por eso es que necesito crear las cookies!

Si todo sale bien, simplemente obtengo los datos del curl y armo un array que me devuelva los datos del contribuyente, no sin antes crear varias condicionales para su mejor estructura.

Te dejo todo el código en un archivo para que lo descargues, ahí esta todo lo que arriba te describí, pero ya en PHP (igual lo comente para que puedas entenderlo)

Para hacer tus pruebas sigue las siguientes recomendaciones.
1) Crea una carpeta y llamala Ejemplo consulta-rif y dentro de esta
2) Descargas la librería tesseract-ocr-for-php, tambien debe estar en esa carpeta como vendor
3) Crea una nueva carpeta y llámala tmp (déjala vacía)
4) Incluye también el archivo que te dejo para descargar que se llama index.php
5) Para probarlo http://localhost/consulta-rif/?cod=J000063729

Ya le he hecho mil pruebas al codigo y todo ha salido OK, la precision de OCR es del 96%
Puedes hacerle cambios al codigo de IMAGICK para limpiar mejor la imagen y asi lograr que la lectura sea 99-100%

Bueno amigo, espero le saques provecho.
Saludos desde Venezuela
Jefferson Jimenez
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

API consulta rif seniat Venezuela

Publicado por Jose (3 intervenciones) el 18/04/2023 23:56:28
Amigo eres un CRACK

Simplemente perfecto, ejecute todos los pasos como lo indicas, luego ejecute el index.php y una joyita todo

El detalle para la cedula de identidad te quedo brutal, porque no todos los venezolanos estamos inscritos en
el CNE, mas sin embargo todos si estamos en el SENIAT y tu codigo calcula el ultimo digito verificador (GENIAL)

Ejecuto http://localhost/consulta-rif/?cod=j070339047 y devuelve (lo que le ponga lo devuelve)

1
2
3
4
5
6
7
8
9
10
11
12
{
  "res": "ok",
  "data": {
    "nombre": "SERVICIOS GAUNA, C.A",
    "siglas": "(SERGAUCA)",
    "rif": "J070339047",
    "cedula": "",
    "actividad_economica": "OTRAS ACTIVIDADES DE SERVICIOS",
    "condicion": "CONTRIBUYENTE ORDINARIO DEL IVA",
    "retencion": "REQUIERE LA RETENCION DEL 75% DEL IMPUESTO CAUSADO, SALVO QUE INCURRA EN LOS SUPUESTOS ESTABLECIDOS PARA LA RETENCION DEL 100%."
  }
}

Mis mas sinceras felicitaciones
Muchas muchas gracias, pensé que no se podía hacer eso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

API consulta rif seniat Venezuela

Publicado por yunis ochoa (1 intervención) el 18/12/2023 01:50:13
buenas, agradecido por su valiosa colaboracion, pero actualmente, realize todos los pasos segun sus instrucciones y dice que la imagen no coincide en la pagina web, se queda en un loop infinito hasta que se rompe el programa, agradesco su colaboracion, muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 393
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

API consulta rif seniat Venezuela

Publicado por Jefferson (203 intervenciones) el 21/12/2023 16:35:39
Hola, si se queda en bucle infinito es porque la lectura del OCR no la lleva a cabo, revisa en detalle la instalación de la libreria TesseractOCR.

Otra forma de hacerlo es usando una API externa para leer la imagen. Esta API aunque gratuita solo permite 25000 lectura al mes OCRSpace.

Para que sea mas rapido olvida Curl PHP y en su lugar utiliza Guzzle

el codigo seria

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
set_time_limit(600);
require 'Guzzle/vendor/autoload.php';
 
use GuzzleHttp\Client;
use GuzzleHttp\Cookie\CookieJar;
use GuzzleHttp\Exception\RequestException;
 
$method = $_SERVER['REQUEST_METHOD'];
if ($method == "OPTIONS") {
    die();
}
$doc = null;
if (isset($_GET) || isset($_POST)) {
    if (isset($_GET)) {
        foreach ($_GET as $key => $val) {
            $doc = $val;
        }
    }
    if (isset($_POST)) {
        foreach ($_POST as $key => $val) {
            $doc = $val;
        }
    }
}
 
function VerificaDoc($doc)
{
    $doc = preg_replace('/\s+/', '', $doc);
    if (empty($doc)) {
        echo json_encode(['res' => 'error', 'data' => 'Debe ingresar la cedula o rif']);
        exit();
    }
 
    $doc = strtoupper($doc);
    $firstChar = substr($doc, 0, 1);
 
    if (preg_match('/^[JGPVE]/', $doc)) {
        if (strpbrk($firstChar, 'VE') !== false) {
            $pattern = '/^[VE][0-9]{7,8}$/';
            $errorMessage = 'La cedula debe contener 7 u 8 digitos numericos';
        } else {
            $pattern = '/^[JGP][0-9]{9}$/';
            $errorMessage = 'El rif debe contener 9 digitos numericos';
        }
 
        if (!preg_match($pattern, $doc)) {
            echo json_encode(['res' => 'error', 'data' => $errorMessage]);
            exit();
        }
    } else {
        echo json_encode(['res' => 'error', 'data' => 'Formato no valido, la primera letra debe ser [J,G,P,V,E]']);
        exit();
    }
}
function CalculaDigitoCedula($c)
{
    $l = strtoupper(substr($c, 0, 1));
    $n = strlen(substr($c, 1)) == 8 ? substr($c, 1) : '0' . substr($c, 1);
    $val = $l . $n . '1';
    $digitos = str_split($val);
    $digitos[8] *= 2;
    $digitos[7] *= 3;
    $digitos[6] *= 4;
    $digitos[5] *= 5;
    $digitos[4] *= 6;
    $digitos[3] *= 7;
    $digitos[2] *= 2;
    $digitos[1] *= 3;
    $digitoEspecial = ($digitos[0] == 'V') ? 1 : (($digitos[0] == 'E') ? 2 : null);
    $suma = (array_sum($digitos) - $digitos[9]) + ($digitoEspecial * 4);
    $residuo = $suma % 11;
    $resta = 11 - $residuo;
    $digitoVerificador = ($resta >= 10) ? 0 : $resta;
    return $l . $n . $digitoVerificador;
}
function LeeOCRSpace($image_path)
{
    $image_data = base64_encode(file_get_contents($image_path));
    $client = new Client();
    try {
        $response = $client->post('https://api.ocr.space/parse/image', [
            'headers' => ['apikey' => 'K83523935688957'],
            'form_params' => [
                'base64Image' => 'data:image/jpeg;base64,' . $image_data,
                'language' => 'eng',
                'isOverlayRequired' => 'false',
                'OCREngine' => '3',
            ],
        ]);
        if ($response->getStatusCode() === 200) {
            $data = json_decode($response->getBody(), true);
            $text = preg_replace('/[^a-zA-Z0-9]/', '', $data['ParsedResults'][0]['TextOverlay']['Lines'][0]['LineText']);
            $text = substr_replace($text, str_replace(['l', 'L', 'I'], '1', substr($text, 0, 1)), 0, 1);
            return $text;
        } else {
            echo json_encode(['res' => 'error', 'data' => 'No se ejecutar el OCR: ' . $response->getStatusCode()]);
            exit();
        }
    } catch (RequestException $e) {
        echo json_encode(['res' => 'error', 'data' => 'Error: ' . $e->getMessage()]);
        exit();
    }
}
 
function SENIAT($doc)
{
    ## DESCARGAMOS LA IMAGEN Y CREAMOS LA COOKIE ##
    $client = new Client(['verify' => false]);
    $cookieJar = new CookieJar();
    try {
        $response = $client->request('GET', 'http://contribuyente.seniat.gob.ve/BuscaRif/Captcha.jpg', [
            'cookies' => $cookieJar
        ]);
 
        if ($response->getStatusCode() === 200) {
            $imageData = $response->getBody()->getContents();
            file_put_contents('captcha.jpg', $imageData);
            $cookieData = '';
            foreach ($cookieJar as $cookie) {
                $cookieData .= $cookie->getName() . '=' . $cookie->getValue() . '; ';
            }
 
            ## MEJORAMOS LA IMAGEN PARA PODER LEERLA CON OCRAPI ##
            $per = 1.3;
            $thr = 0.5;
            $ancho = 300;
            $alto = 90;
            $blurIzq = 3;
            $blurDer = 2;
            $image = new Imagick(dirname(__FILE__) . '/captcha.jpg');
            $width = $image->getImageWidth();
            $height = $image->getImageHeight();
            $tam = 4;
            $newWidth = $width * $tam;
            $newHeight = $height * $tam;
            $image->resizeImage($newWidth, $newHeight, Imagick::FILTER_LANCZOS, 1);
            $image->resizeImage($newWidth, $newHeight, Imagick::FILTER_QUADRATIC, 1);
            $threshold = 0.5 * $image->getQuantumRange()['quantumRangeLong'];
            $image->thresholdImage($threshold);
            $image->gaussianBlurImage(5, 5);
            $dimensions = $image->getImageGeometry();
            $width = $dimensions['width'];
            $height = $dimensions['height'];
            $canvas = new Imagick();
            $canvas->newImage($width * $per, $height * $per, 'none');
            $x = ($width * $per - $width) / $per;
            $y = ($height * $per - $height) / $per;
            $canvas->compositeImage($image, Imagick::COMPOSITE_OVER, $x, $y);
            $canvas->blurImage($blurIzq, $blurDer);
            $threshold = $thr * $canvas->getQuantumRange()['quantumRangeLong'];
            $canvas->thresholdImage($threshold);
            $canvas->scaleImage($ancho, $alto);
            $canvas->writeImage(dirname(__FILE__) . '/lee.jpg');
            $image->clear();
            $image->destroy();
            $canvas->clear();
            $canvas->destroy();
            $codigo = LeeOCRSpace('lee.jpg');
            try {
                $response = $client->post('http://contribuyente.seniat.gob.ve/BuscaRif/BuscaRif.jsp', [
                    'cookies' => $cookieJar,
                    'form_params' => [
                        'codigo' => $codigo,
                        'p_rif' => $doc
                    ],
                    'headers' => [
                        'Cookie' => $cookieData
                    ]
                ]);
 
                if ($response->getStatusCode() === 200) {
                    $responseBody = $response->getBody()->getContents();
                    $responseBody = mb_convert_encoding($responseBody, 'UTF-8', 'auto');
                    $dom = new DOMDocument();
                    @$dom->loadHTML($responseBody);
                    return $dom;
                } else {
                    echo json_encode(['res' => 'error', 'data' => 'No se pudieron recuperar los datos. Codigo: ' . $response->getStatusCode()]);
                    exit();
                }
            } catch (RequestException $e) {
                echo json_encode(['res' => 'error', 'data' => 'Error: ' . $e->getMessage()]);
                exit();
            }
        } else {
            echo json_encode(['res' => 'error', 'data' => 'No se pudo descargar la imagen captcha. Codigo: ' . $response->getStatusCode()]);
            exit();
        }
    } catch (RequestException $e) {
        echo json_encode(['res' => 'error', 'data' => 'Error: ' . $e->getMessage()]);
        exit();
    }
}
 
if (empty(VerificaDoc($doc))) {
    $doc = strtoupper($doc);
    if (!preg_match('/^[JGP]/i', $doc)) $doc = CalculaDigitoCedula($doc);
    for ($i = 0;; $i++) {
        $dom = SENIAT($doc);
        $xpath = new DOMXPath($dom);
        $secondTable = $xpath->query('(//table)[2]')->item(0);
        if (trim($secondTable->textContent) != 'EL c?digo no coincide con la imagen.') break;
    }
    $head = $xpath->query('(//table)[2]')->item(0)->textContent;
    $head = htmlentities($head, ENT_SUBSTITUTE, 'utf-8');
    $head = trim(str_replace(array(' ', '_'), ' ', $head));
    if (strpos($head, 'REGISTRO VENCIDO') !== false) {
        $registro = 'VENCIDO';
        $head = str_replace('REGISTRO VENCIDO', '', $head);
        $head = trim(htmlentities($head, ENT_SUBSTITUTE, 'utf-8'));
    } else {
        $registro = 'ACTIVO';
    }
    $rif = strstr($head, ' ', true);
    $nombre = strstr($head, ' ');
    $nombre = substr($head, strpos($head, ' ') + 1);
    $nombre = preg_replace('/\([^)]+\)/', '', $nombre);
    preg_match('/\((.*?)\)/', $head, $matches);
    $siglas =  count($matches) > 0 ? preg_replace('/\s{2,}/', '', $matches[0]) : '';
    $data = trim($xpath->query('(//table)[3]')->item(0)->textContent);
    $a = explode(':', $data);
    $registro = ($registro != 'VENCIDO') ? ($nombre != 'No existe el contribuyente solicitado' ? 'ACTIVO' : 'NO APLICA') : $registro;
    if (file_exists(dirname(__FILE__) . '/captcha.jpg')) unlink(dirname(__FILE__) . '/captcha.jpg');
    if (file_exists(dirname(__FILE__) . '/lee.jpg')) unlink(dirname(__FILE__) . '/lee.jpg');
    $out = array(
        'registro' => $registro,
        'rif' => $rif,
        'nombre' => preg_replace('/[^A-Za-z0-9áéíóúü\s.]/', '', $nombre),
        'siglas' =>  $siglas,
        'actividad' => count($a) > 1 ? trim(str_replace('Condici?n', '', $a[1])) : '',
        'condicion' => count($a) > 1 ? trim(str_replace('?', 'o', $a[2])) : '',
    );
    echo json_encode($out, true);
}

Y para obtener el json http://localhost/index?doc=J0000000000

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

API consulta rif seniat Venezuela

Publicado por Luis Valero (4 intervenciones) el 11/03/2024 14:19:52
Hola amigo, ejecute el primero el que habias pasado y se quedaba en un loop infinito, luego el ultimo que pasaste y me sirvio pero no duro mucho ya que me trajo la informacion unas 5 veces y despues de eso tambien se quedo en un loop infinito, sera que los programadores del seniat se dieron cuenta e hicieron algo, gracias por su aporte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 393
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

API consulta rif seniat Venezuela

Publicado por Jefferson (203 intervenciones) el 12/03/2024 20:54:13
Hola Luis

No, la pagina seniat no ha hecho nada.

Pero si debes tener en cuenta ciertos factores

1) La pagina a la cual se le hace el scraping es gubernamental y a lo largo de los años son muchos los programadores
que han alterado/modificado su estructura (nada escalable) y por ende se ha llenado de código basura, que obviamente
pasa factura volviéndola lenta.

2) Otro punto a considerar es la lectura de la imagen captcha, donde recomiendo instalar Tesseract-OCR
Para instalarlo en local lee esto tesseract windows
Para instalarlo en tu hosting lee esto tesseract ubuntu

3) Otra forma (menos practica) es usar librerías de terceros (donde ellos tienen el control) y es usando una API externa para leer la imagen.
Esta API aunque gratuita solo permite 25000 lectura al mes OCRSpace.

Que en tu caso fue lo que sucedió, ya que ellos alteraron el "OCREngine" o le deben estar haciendo algún tipo de mantenimiento.
Para solucionar este error, reescribí la función LeeOCRSpace

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
function LeeOCRSpace($image_path,$OCREngine=3)
{
    $image_data = base64_encode(file_get_contents($image_path));
    $client = new Client();
    try {
        $response = $client->post('https://api.ocr.space/parse/image', [
            'headers' => ['apikey' => 'K85688402088957'],  //K85688402088957  //K83523935688957
            'form_params' => [
                'base64Image' => 'data:image/jpeg;base64,' . $image_data,
                'language' => 'eng',
                'isOverlayRequired' => 'false',
                'OCREngine' => $OCREngine,
            ],
        ]);
        if ($response->getStatusCode() === 200) {
            $data = json_decode($response->getBody(), true);
            if(!empty($data['ErrorMessage'])){
                echo json_encode(['res' => 'error', 'data' => 'Error OCR: '. $data['ErrorMessage'][0]]);
                exit();
            }
            if($OCREngine==3){
                $text = preg_replace('/[^a-zA-Z0-9]/', '', $data['ParsedResults'][0]['TextOverlay']['Lines'][0]['LineText']);
            }else{
                $text = preg_replace('/[^a-zA-Z0-9]/', '', $data['ParsedResults'][0]['ParsedText']);
            }
            $text = substr_replace($text, str_replace(['l', 'L', 'I'], '1', substr($text, 0, 1)), 0, 1);
            return $text;
        } else {
            echo json_encode(['res' => 'error', 'data' => 'No se ejecuta el OCR: '. $response->getStatusCode()]);
            exit();
        }
    } catch (RequestException $e) {
        echo json_encode(['res' => 'error', 'data' => 'Error: '. $e->getMessage()]);
        exit();
    }
}
// y para obtener el resultado
$codigo = LeeOCRSpace('lee.jpg',2);

Ejemplo funcionando Empresas Polar

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

API consulta rif seniat Venezuela

Publicado por Luis (4 intervenciones) el 13/03/2024 16:11:52
Listo amigo me funciono perfecto usando la API externa de terceros con ayuda de la modificacion que le hiciste al codigo, ahora tambien estoy intentando hacerlo con tesseractOCR y va generando la imagen lee.jpg pero la genera muchas veces y la elimina y asi se queda en un loop infinito y despues de un rato en el loop me lanza el siguiente error, me pregunto si es un error en la instalacion del tesseract o algo, por que me gustaria hacerlo con tesseract ya que es lo mas practico.. MUCHAS GRACIAS POR EL APOYO,

te copio el error


Fatal error: Uncaught thiagoalessio\TesseractOCR\UnsuccessfulCommandException: Error! The command did not produce any output. Generated command: "tesseract" "C:\xampp\htdocs\rif/tmp/lee.jpg" "C:\Users\USUARIO\AppData\Local\Temp\ocrD38C.tmp" Returned message: Estimating resolution as 431 Empty page!! Estimating resolution as 431 Empty page!! in C:\xampp\htdocs\rif\vendor\thiagoalessio\tesseract_ocr\src\FriendlyErrors.php:66 Stack trace: #0 C:\xampp\htdocs\rif\vendor\thiagoalessio\tesseract_ocr\src\TesseractOCR.php(39): thiagoalessio\TesseractOCR\FriendlyErrors::checkCommandExecution(Object(thiagoalessio\TesseractOCR\Command), '', 'Estimating reso...') #1 C:\xampp\htdocs\rif\index.php(152): thiagoalessio\TesseractOCR\TesseractOCR->run() #2 C:\xampp\htdocs\rif\index.php(342): GetRif('j070339047') #3 {main} thrown in C:\xampp\htdocs\rif\vendor\thiagoalessio\tesseract_ocr\src\FriendlyErrors.php on line 66
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 393
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

API consulta rif seniat Venezuela

Publicado por Jefferson (203 intervenciones) el 13/03/2024 16:31:47
Hola Luis.

Mil disculpas, el error que experimentas indica que el comando no arroja ninguna salida. ya que debes instalar la biblioteca que sirve de puente entre el servidor apache y windows.

La librería php tesseract-ocr-for-php
la puedes descargar desde AQUI

Otra cosa, no es lo mismo instalar tesseract en Windows, que en Ubuntu (linux)
la librería tesseract-ocr-for-php si que sirve para ambos escenarios.

Saludos y suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

API consulta rif seniat Venezuela

Publicado por Luis (4 intervenciones) el 13/03/2024 17:04:07
amigo yo ya tenia esa libreria instalada lo unico es que no le agregue el idioma español en la instalacion de tesseract-ocr-for-ph no lo veo necesario, me sigue quedando en un loop inifinito tal cual como te explique arriba,

tambien el metodo getElementsByTagName me lanza algun tipo de error cuando lo asigno a la variable $table2 al final te adjunto un capture

tal vez tenga algo mal que no logro identificar, respecto a la instalacion del tesseract, pues tengo tesseract en Windows.

ya despues de que queda cargando un rato me tira esto por el tiempo de espera :
Fatal error: Maximum execution time of 600 seconds exceeded in C:\xampp\htdocs\rif\index.php on line 136

te adjunto un capture de la estructura de como lo tengo y el error antes mencionado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

API consulta rif seniat Venezuela

Publicado por Luis (4 intervenciones) el 14/03/2024 14:47:08
Listo amigo perfecto me sirvio con TesseractOrc, agradecido
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar