國稅總局驗證碼識別發票查驗


先欣賞幾張美圖養養眼吧。

 

好了進入正題,國稅局的驗證碼長下面這樣,有0~9、26個英文字母與漢字組成,顏色有黑色、紅色、黃色和藍色。驗證碼識別常用的模型不外乎CNN和CRNN。


Python識別的代碼如下,請使用post請求,使用get請求將會返回網頁幫助:

with open('./tmp.jpg', 'rb') as f:
    img_bytes = f.read()

img_base64 = base64.b64encode(img_bytes)
# '00' 黑色 '01' 紅色 '02' 黃色 '03' 藍色
data = {'image': str(img_base64, 'utf-8'), 'key': '04'}
result = requests.post('http://47.99.174.98:8808/captcha', json=data)
print(result.json())

Java識別代碼如下:

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Base64;


public class CaptchaRecognize {
    static String captcha_url = "http://47.99.174.98:8808/captcha";

    public static String getBase64(String imgFile) {
        InputStream inputStream = null;
        byte[] data = null;
        try {
            inputStream = new FileInputStream(imgFile);
            data = new byte[inputStream.available()];
            inputStream.read(data);
            inputStream.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
        Base64.Encoder encoder = Base64.getEncoder();
        assert data != null;
        return encoder.encodeToString(data);
    }

    public static void captchaPost() throws IOException {
        String imgBase64 = getBase64("./imgs/img001.jpg");
        String data = "{" + "\"image\":" + "\"" + imgBase64 + "\"" + "," + "\"key\":" + "\"03\"" + "}";
        URL url = new URL(captcha_url);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setRequestProperty("Accept", "application/json");
        OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());
        out.write(data);
        out.flush();
        out.close();
        BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
        String line;
        while ((line = in.readLine()) != null) {
            System.out.println(line); // {"code": "Y2W"}
        }
    }
    public static void main(String[] args) throws IOException {
        captchaPost();
    }
}

當然也可以免去驗證碼直接查驗發票,查驗規則同國稅局官網,代碼如下,請使用post請求,秒回結果哦,使用get請求將會返回網頁幫助:

import requests
# fpdm 發票代碼 fphm 發票號碼 rq 開票日期 jym 校驗碼后六位
data = {'fpdm': '044001505121', 'fphm': '38507145', 'rq': '20180926', 'jym': '865375'}
result = requests.post('http://47.99.174.98:8808/fp', json=data)
print(result.json())

查驗結果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM