91精品久久人人妻人人爽人人,一本a道久遛,中文字幕在线精品视频入口一区,无码伊人久久大杳蕉中文无码

幫助與文檔 > 產(chǎn)品文檔 > 視覺智能服務(wù) > API文檔 > 自定義識別
自定義識別

自定義模板文字識別服務(wù)簡介

說明

Hi,您好,歡迎使用有道智云自定義模版文字識別 API 接口服務(wù)。

本文檔主要針對需要集成 API 的技術(shù)開發(fā)工程師,詳細(xì)描述自定義模版文字識別能力相關(guān)的技術(shù)內(nèi)容。

如果您有與我們商務(wù)合作的需求,可以通過以下方式聯(lián)系我們:

商務(wù)郵箱: AIcloud_Business@corp.youdao.com

如果您對文檔內(nèi)容有任何疑問,可以通過以下幾種方式聯(lián)系我們:

客服 QQ:1906538062

智云 OCR 技術(shù)交流 QQ 1 群: 654064748

智云 OCR 技術(shù)交流 QQ 2 群: 471638046

聯(lián)系郵箱: zhiyun@corp.youdao.com

溫馨提示:

本文檔主要針對開發(fā)人員,接入測試前需要獲取應(yīng)用ID應(yīng)用密鑰;如果您還沒有,請按照 新手指南 操作。

平臺向每個賬戶贈送 50 元的體驗(yàn)金,供用戶集成前測試所用,具體資費(fèi)規(guī)則詳見 自定義模版文字服務(wù)報(bào)價 。

接口說明

自定義模板文字識別 API HTTPS 地址:

https://openapi.youdao.com/iocr

協(xié)議須知

調(diào)用方在集成自定義模板文字識別 API 時,請遵循以下規(guī)則。

規(guī)則描述
傳輸方式HTTPS
請求方式POST
字符編碼統(tǒng)一使用 UTF-8 編碼
請求格式表單
響應(yīng)格式JSON

接口調(diào)用參數(shù)

調(diào)用 API 需要向接口發(fā)送以下字段來訪問服務(wù)。

字段名類型含義必填備注
qtext待識別圖像 Base64True必須是 Base64 編碼
templateIdtext模版 Idfalse模版 Id。當(dāng)generalOcr為true時,該字段可以為空
formattext圖片類型填寫'img',pdf填寫'pdf'False默認(rèn)img
appKeytext應(yīng)用 IDTrue可在 應(yīng)用管理 查看
salttextUUID,和 curtime 一起防請求重放Trueuuid,唯一通用識別碼
signTypetext簽名類型Truev3
curtimetext當(dāng)前 UTC 時間戳(秒)TrueTimeStamp
signtext簽名Truesha256(應(yīng)用 ID+input+salt+curtime+應(yīng)用密鑰)
generalOcrtext是否包含通用OCR結(jié)果false默認(rèn)false。如果為true,結(jié)果中會包含通用OCR結(jié)果

簽名生成方法如下:
signType=v3;
sign=sha256(應(yīng)用ID+input+salt+curtime+應(yīng)用密鑰)。
其中,input 的計(jì)算方式為:input=q前10個字符 + q長度 + q后10個字符(當(dāng) q 長度大于 20)或 input=q字符串(當(dāng) q 長度小于等于 20)。

  • 不同語言獲取時間戳,請參看此鏈接

如果對簽名有疑問,可以參看文檔末尾各語言 demo。

輸出結(jié)果

返回的結(jié)果是 json 格式,具體說明如下

字段名類型字段說明
errorCodetext錯誤碼,一定存在
Resulttext識別結(jié)果,查詢成功一定存在
+template_idtext模版Id
+itemsJSONObject字段名稱及識別結(jié)果
++識別區(qū)域信息text識別內(nèi)容,識別成功一定存在

示例

識別的返回結(jié)果:

{
  "errorCode": "0",
  "Result": {
    "template_id": "模版Id",
    "items": [
        {
          "key": "字段名稱",
          "value": "字段值",
          "locations": ["坐標(biāo)信息"] // 如果有多區(qū)域同名,坐標(biāo)會有多行,對應(yīng)多個區(qū)域的坐標(biāo)
        },
    ]
    "ocrResult": {
        // 通用OCR結(jié)果
    }
  }
}

支持語言

語言代碼語言
sq阿爾巴尼亞語
az阿塞拜疆語
eu巴斯克語
be白俄羅斯語
bs波斯尼亞文(拉丁文)
bg保加利亞文
ca加泰羅尼亞文(加泰隆語)
ceb宿務(wù)語
ny齊切瓦語
zh-CHS中文
zh-CHT中文(繁體)
co科西嘉語
hr克羅地亞文
cs捷克文
da丹麥文
nl荷蘭文
en英文
eo世界語
et愛沙尼亞文
fi芬蘭文
fr法文
gd蘇格蘭蓋爾語
gl加利西亞語
de德文
ht海地文
ha豪薩語
haw夏威夷語
hi印地文
hu匈牙利文
is冰島語
ig伊博語
id印度尼西亞文
ga愛爾蘭語
it意大利文
ja日文
jw印尼爪哇語
ko韓文
ku庫爾德語
la拉丁語
lv拉脫維亞文
lt立陶宛文
lb盧森堡語
mk馬其頓語
mg馬爾加什語
ms馬來文
mt馬耳他文
mi毛利語
mr馬拉地語
mn蒙古語
ne尼泊爾語
no挪威文
pl波蘭文
pt葡萄牙文
ro羅馬尼亞文
ru俄文
sm薩摩亞語
sr-Latn塞爾維亞文(拉丁文)
sn修納語
sk斯洛伐克文
sl斯洛文尼亞文
so索馬里語
st塞索托語
es西班牙文
su印尼巽他語
sw斯瓦希里文
sv瑞典文
tl菲律賓語
tg塔吉克語
tr土耳其文
uk烏克蘭文
uz烏茲別克語
vi越南文
cy威爾士文
fy弗里斯蘭語
yo約魯巴語
zu南非祖魯語
hmn苗族語
xh班圖
af南非荷蘭

服務(wù)配置

支持圖片格式圖片大小每小時最大查詢次數(shù)
jpg\png\bmp4M內(nèi)(編碼后)3600

錯誤代碼列表

錯誤碼含義
101缺少必填的參數(shù),首先確保必填參數(shù)齊全,然后,確認(rèn)參數(shù)書寫是否正確。
102不支持的語言類型
103翻譯文本過長
104不支持的 API 類型
105不支持的簽名類型
106不支持的響應(yīng)類型
107不支持的傳輸加密類型
108應(yīng)用 ID 無效,注冊賬號,登錄后臺創(chuàng)建應(yīng)用和實(shí)例并完成綁定,可獲得應(yīng)用 ID 和應(yīng)用密鑰等信息
109batchLog 格式不正確
110無相關(guān)服務(wù)的有效實(shí)例,應(yīng)用沒有綁定服務(wù)實(shí)例,可以新建服務(wù)實(shí)例,綁定服務(wù)實(shí)例。注:某些服務(wù)的結(jié)果發(fā)音需要 tts 實(shí)例,需要在控制臺創(chuàng)建語音合成實(shí)例綁定應(yīng)用后方能使用。
111開發(fā)者賬號無效
112請求服務(wù)無效
113img 不能為空
114不支持的圖片傳輸方式
201解密失敗,可能為 DES,BASE64,URLDecode 的錯誤
202簽名檢驗(yàn)失敗,如果確認(rèn)應(yīng)用 ID 和應(yīng)用密鑰的正確性,仍返回 202,一般是編碼問題。請確保翻譯文本 q 為 UTF-8 編碼.
203訪問 IP 地址不在可訪問 IP 列表
205請求的接口與應(yīng)用的平臺類型不一致,,確保接入方式(Android SDK、IOS SDK、API)與創(chuàng)建的應(yīng)用平臺類型一致。如有疑問請參考入門指南
206因?yàn)闀r間戳無效導(dǎo)致簽名校驗(yàn)失敗
207重放請求
301辭典查詢失敗
302翻譯查詢失敗
303服務(wù)端的其它異常
304會話閑置太久超時
401賬戶已經(jīng)欠費(fèi)停
402offlinesdk 不可用
411訪問頻率受限,請稍后訪問
412長請求過于頻繁,請稍后訪問
1001無效的 OCR 類型
1002不支持的 OCR image 類型
1003不支持的 OCR Language 類型
1004識別圖片過大
1201圖片 base64 解密失敗
1301OCR 段落識別失敗
1411訪問頻率受限
1412超過最大識別字節(jié)數(shù)
2003不支持的語言識別 Language 類型
2004合成字符過長
2005不支持的音頻文件類型
2006不支持的發(fā)音類型
2201解密失敗
2301服務(wù)的異常
2411訪問頻率受限,請稍后訪問
2412超過最大請求字符數(shù)
3001不支持的語音格式
3002不支持的語音采樣率
3003不支持的語音聲道
3004不支持的語音上傳類型
3005不支持的語言類型
3006不支持的識別類型
3007識別音頻文件過大
3008識別音頻時長過長
3009不支持的音頻文件類型
3010不支持的發(fā)音類型
3201解密失敗
3301語音識別失敗
3302語音翻譯失敗
3303服務(wù)的異常
3411訪問頻率受限,請稍后訪問
3412超過最大請求字符數(shù)
4001不支持的語音識別格式
4002不支持的語音識別采樣率
4003不支持的語音識別聲道
4004不支持的語音上傳類型
4005不支持的語言類型
4006識別音頻文件過大
4007識別音頻時長過長
4201解密失敗
4301語音識別失敗
4303服務(wù)的異常
4411訪問頻率受限,請稍后訪問
4412超過最大請求時長
5001無效的 OCR 類型
5002不支持的 OCR image 類型
5003不支持的語言類型
5004識別圖片過大
5005不支持的圖片類型
5006文件為空
5201解密錯誤,圖片 base64 解密失敗
5301OCR 段落識別失敗
5411訪問頻率受限
5412超過最大識別流量
9001不支持的語音格式
9002不支持的語音采樣率
9003不支持的語音聲道
9004不支持的語音上傳類型
9005不支持的語音識別 Language 類型
9301ASR 識別失敗
9303服務(wù)器內(nèi)部錯誤
9411訪問頻率受限(超過最大調(diào)用次數(shù))
9412超過最大處理語音長度
10001無效的 OCR 類型
10002不支持的 OCR image 類型
10004識別圖片過大
10201圖片 base64 解密失敗
10301OCR 段落識別失敗
10411訪問頻率受限
10412超過最大識別流量
11001不支持的語音識別格式
11002不支持的語音識別采樣率
11003不支持的語音識別聲道
11004不支持的語音上傳類型
11005不支持的語言類型
11006識別音頻文件過大
11007識別音頻時長過長,最大支持 30s
11201解密失敗
11301語音識別失敗
11303服務(wù)的異常
11411訪問頻率受限,請稍后訪問
11412超過最大請求時長
12001圖片尺寸過大
12002圖片 base64 解密失敗
12003引擎服務(wù)器返回錯誤
12004圖片為空
12005不支持的識別圖片類型
12006圖片無匹配結(jié)果
13001不支持的角度類型
13002不支持的文件類型
13003表格識別圖片過大
13004文件為空
13301表格識別失敗
15001需要圖片
15002圖片過大(1M)
15003服務(wù)調(diào)用失敗
17001需要圖片
17002圖片過大(3M)
17003識別類型未找到
17004不支持的識別類型
17005服務(wù)調(diào)用失敗
28102不支持的 image 類型
28104識別圖片過大, 圖片大小上限 4M
28200模版不存在, 請檢查模版 Id 是否正確
28201模版未發(fā)布, 請?jiān)谀0嬖斍轫撁姘l(fā)布模版
28202模版已失效
28203模版用戶不匹配
28204不支持的模板使用方式
28205模版創(chuàng)建失敗
28206文字識別失敗
28207不支持的generalOcr參數(shù)
28208模版Id不可為空
28301請求失敗
28302文件過大
28303無此流水號
28304不支持的后綴名
28400字段格式名稱已存在
28401字段格式操作失敗
28402無此字段格式編號
28403字段格式編號重復(fù)
28404字段用戶不匹配

常用語言 Demo

Java 示例

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.*;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;

public class IOcrV3Demo {

    private static Logger logger = LoggerFactory.getLogger(OcrV3Demo.class);

    private static final String YOUDAO_URL = "https://openapi.youdao.com/iocr";

    private static final String APP_KEY = "您的應(yīng)用ID";

    private static final String APP_SECRET = "您的應(yīng)用密鑰";

    public static void main(String[] args) throws IOException {

        Map<String,String> params = new HashMap<String,String>();
        String q = loadAsBase64("圖片的路徑");
        String salt = String.valueOf(System.currentTimeMillis());
        params.put("q", q);
        params.put("templateId", 模版Id);
        params.put("signType", "v3");
        String curtime = String.valueOf(System.currentTimeMillis() / 1000);
        params.put("curtime", curtime);
        String signStr = APP_KEY + truncate(q) + salt + curtime + APP_SECRET;
        String sign = getDigest(signStr);
        params.put("appKey", APP_KEY);
        params.put("salt", salt);
        params.put("sign", sign);
        String result = requestForHttp(YOUDAO_URL,params);
        /** 處理結(jié)果 */
        System.out.println(result);
    }

    public static String requestForHttp(String url,Map<String,String> params) throws IOException {
        String result = "";

        /** 創(chuàng)建HttpClient */
        CloseableHttpClient httpClient = HttpClients.createDefault();

        /** httpPost */
        HttpPost httpPost = new HttpPost(url);
        List<NameValuePair> paramsList = new ArrayList<NameValuePair>();
        Iterator<Map.Entry<String,String>> it = params.entrySet().iterator();
        while(it.hasNext()){
            Map.Entry<String,String> en = it.next();
            String key = en.getKey();
            String value = en.getValue();
            paramsList.add(new BasicNameValuePair(key,value));
        }
        httpPost.setEntity(new UrlEncodedFormEntity(paramsList,"UTF-8"));
        CloseableHttpResponse httpResponse = httpClient.execute(httpPost);
        try{
            HttpEntity httpEntity = httpResponse.getEntity();
            result = EntityUtils.toString(httpEntity,"UTF-8");
            EntityUtils.consume(httpEntity);
        }finally {
            try{
                if(httpResponse!=null){
                    httpResponse.close();
                }
            }catch(IOException e){
                logger.info("## release resouce error ##" + e);
            }
        }
        return result;
    }

    /**
     * 生成加密字段
     */
    public static String getDigest(String string) {
        if (string == null) {
            return null;
        }
        char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
        byte[] btInput = string.getBytes(StandardCharsets.UTF_8);
        try {
            MessageDigest mdInst = MessageDigest.getInstance("SHA-256");
            mdInst.update(btInput);
            byte[] md = mdInst.digest();
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (byte byte0 : md) {
                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(str);
        } catch (NoSuchAlgorithmException e) {
            return null;
        }
    }

    public static String loadAsBase64(String imgFile)
  {//將圖片文件轉(zhuǎn)化為字節(jié)數(shù)組字符串,并對其進(jìn)行Base64編碼處理

    File file = new File(imgFile);
    if(!file.exists()){
        logger.error("文件不存在");
        return null;
    }
    InputStream in = null;
    byte[] data = null;
      //讀取圖片字節(jié)數(shù)組
    try
    {
        in = new FileInputStream(imgFile);
        data = new byte[in.available()];
        in.read(data);
        in.close();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
      //對字節(jié)數(shù)組Base64編碼
    return Base64.getEncoder().encodeToString(data);//返回Base64編碼過的字節(jié)數(shù)組字符串
  }

  public static String truncate(String q) {
        if (q == null) {
            return null;
        }
        int len = q.length();
        String result;
        return len <= 20 ? q : (q.substring(0, 10) + len + q.substring(len - 10, len));
    }
}

Python 示例

# -*- coding: utf-8 -*-
import sys
import uuid
import requests
import base64
import hashlib
import time

reload(sys)
sys.setdefaultencoding('utf-8')

YOUDAO_URL = 'https://openapi.youdao.com/iocr'
APP_KEY = '您的應(yīng)用ID'
APP_SECRET = '您的應(yīng)用密鑰'


def truncate(q):
    if q is None:
        return None
    q_utf8 = q.decode("utf-8")
    size = len(q_utf8)
    return q_utf8 if size <= 20 else q_utf8[0:10] + str(size) + q_utf8[size - 10:size]


def encrypt(signStr):
    hash_algorithm = hashlib.sha256()
    hash_algorithm.update(signStr.encode('utf-8'))
    return hash_algorithm.hexdigest()


def do_request(data):
    headers = {'Content-Type': 'application/x-www-form-urlencoded'}
    return requests.post(YOUDAO_URL, data=data, headers=headers)


def connect():
    f = open(r'圖片的路徑', 'rb')  # 二進(jìn)制方式打開圖文件
    q = base64.b64encode(f.read())  # 讀取文件內(nèi)容,轉(zhuǎn)換為base64編碼
    f.close()

    data = {}
    data['q'] = q
    data['templateId'] = 模版id
    data['signType'] = 'v3'
    curtime = str(int(time.time()))
    data['curtime'] = curtime
    salt = str(uuid.uuid1())
    signStr = APP_KEY + truncate(q) + salt + curtime + APP_SECRET
    sign = encrypt(signStr)
    data['appKey'] = APP_KEY
    data['salt'] = salt
    data['sign'] = sign

    response = do_request(data)
    print response.content


if __name__ == '__main__':
    connect()

C# 示例

using System;
using System.IO;
using System.Net;
using System.Text;
using System.Collections.Generic;
using System.Security.Cryptography;

namespace zhiyun_csharp_demo
{
    class OcrV3Demo
    {
        public static void Main()
        {
            Dictionary dic = new Dictionary();
            string url = "https://openapi.youdao.com/iocr";
            string q = LoadAsBase64("圖片的路徑");
            string appKey = "您的應(yīng)用ID";
            string appSecret = "您的應(yīng)用密鑰";
            string salt = DateTime.Now.Millisecond.ToString();
            dic.Add("templateId", 模版Id);
            dic.Add("signType", "v3");
            dic.Add("q", System.Web.HttpUtility.UrlEncode(q));
            TimeSpan ts = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc));
            long millis = (long) ts.TotalMilliseconds;
            string curtime = Convert.ToString(millis / 1000);
            dic.Add("curtime", curtime);
            string signStr = appKey + Truncate(q) + salt + curtime + appSecret;;
            string sign = ComputeHash(signStr, new SHA256CryptoServiceProvider());
            dic.Add("appKey", appKey);
            dic.Add("salt", salt);
            dic.Add("sign", sign);
            string result = Post(url, dic);
            Console.WriteLine(result);
        }

        protected static string ComputeHash(string input, HashAlgorithm algorithm)
        {
          Byte[] inputBytes = Encoding.UTF8.GetBytes(input);
          Byte[] hashedBytes = algorithm.ComputeHash(inputBytes);
          return BitConverter.ToString(hashedBytes).Replace("-", "");
        }

        protected static string Truncate(string q)
        {
            if (q == null)
            {
               return null;
            }
            int len = q.Length;
            return len <= 20 ? q : (q.Substring(0, 10) + len + q.Substring(len - 10, 10));
        }

        protected static string LoadAsBase64(string filename)
        {
            try
            {
                FileStream filestream = new FileStream(filename, FileMode.Open);
                byte[] arr = new byte[filestream.Length];
                filestream.Position = 0;
                filestream.Read(arr, 0, (int)filestream.Length);
                filestream.Close();
                return Convert.ToBase64String(arr);
            }
            catch (Exception ex)
            {
                return null;
            }
        }

        protected static string Post(string url, Dictionary dic)
        {
            string result = "";
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "POST";
            req.ContentType = "application/x-www-form-urlencoded";
            StringBuilder builder = new StringBuilder();
            int i = 0;
            foreach (var item in dic)
            {
                if (i > 0)
                    builder.Append("&");
                builder.AppendFormat("{0}={1}", item.Key, item.Value);
                i++;
            }
            byte[] data = Encoding.UTF8.GetBytes(builder.ToString());
            req.ContentLength = data.Length;
            using (Stream reqStream = req.GetRequestStream())
            {
                reqStream.Write(data, 0, data.Length);
                reqStream.Close();
            }
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
            Stream stream = resp.GetResponseStream();
            using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
            {
                result = reader.ReadToEnd();
            }
            return result;
        }
    }
}

PHP 示例

<?php
define("CURL_TIMEOUT",   2000);
define("URL",            "https://openapi.youdao.com/iocr");
define("APP_KEY",        "您的應(yīng)用ID"); // 替換為您的應(yīng)用ID
define("SEC_KEY",        "您的應(yīng)用密鑰"); // 替換為您的密鑰

function do_request($q)
{
     $salt = create_guid();
     $args = array(
        'appKey' => APP_KEY,
        'salt' => $salt,
     );
     $args['q'] = $q;
     $args['templateId'] = 模版Id;
     $args['signType'] = 'v3';
     $curtime = strtotime("now");
     $args['curtime'] = $curtime;
     $signStr = APP_KEY . truncate($q) . $salt . $curtime . SEC_KEY;
     $args['sign'] = hash("sha256", $signStr);
     $ret = call(URL, $args);
     print_r($ret);
     $ret = json_decode($ret, true);
     return $ret;
}

// 發(fā)起網(wǎng)絡(luò)請求
function call($url, $args=null, $method="post", $testflag = 0, $timeout = CURL_TIMEOUT, $headers=array())
{
    $ret = false;
    $i = 0;
    while($ret === false)
    {
        if($i > 1)
            break;
        if($i > 0)
        {
            sleep(1);
        }
         $ret = callOnce($url, $args, $method, false, $timeout, $headers);
         $i++;
    }
    return $ret;
}

function callOnce($url, $args=null, $method="post", $withCookie = false, $timeout = CURL_TIMEOUT, $headers=array())
{
    $ch = curl_init();
    if($method == "post")
    {
        $data = convert($args);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_POST, 1);
    }
    else
    {
        $data = convert($args);
        if($data)
        {
            if(stripos($url, "?") > 0)
            {
                 $url .= "&$data";
            }
            else
            {
                 $url .= "?$data";
            }
        }
    }
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    if(!empty($headers))
    {
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    }
    if($withCookie)
    {
        curl_setopt($ch, CURLOPT_COOKIEJAR, $_COOKIE);
    }
    $r = curl_exec($ch);
    curl_close($ch);
    return $r;
}

function convert(&$args)
{
    $data = '';
    if (is_array($args))
    {
        foreach ($args as $key=>$val)
        {
            if (is_array($val))
            {
                foreach ($val as $k=>$v)
                {
                     $data .= $key.'['.$k.']='.rawurlencode($v).'&';
                }
            }
            else
            {
                     $data .="$key=".rawurlencode($val)."&";
            }
        }
        return trim($data, "&");
    }
    return $args;
}

// uuid generator
function create_guid(){
    $microTime = microtime();
    list($a_dec, $a_sec) = explode(" ", $microTime);
    $dec_hex = dechex($a_dec* 1000000);
    $sec_hex = dechex($a_sec);
    ensure_length($dec_hex, 5);
    ensure_length($sec_hex, 6);
    $guid = "";
    $guid .= $dec_hex;
    $guid .= create_guid_section(3);
    $guid .= '-';
    $guid .= create_guid_section(4);
    $guid .= '-';
    $guid .= create_guid_section(4);
    $guid .= '-';
    $guid .= create_guid_section(4);
    $guid .= '-';
    $guid .= $sec_hex;
    $guid .= create_guid_section(6);
    return $guid;
}

function truncate($q) {
    $len = abslength($q);
    return $len <= 20 ? $q : (mb_substr($q, 0, 10) . $len . mb_substr($q, $len - 10, $len));
}

function abslength($str)
{
    if(empty($str)){
        return 0;
    }
    if(function_exists('mb_strlen')){
        return mb_strlen($str,'utf-8');
    }
    else {
        preg_match_all("/./u", $str, $ar);
        return count($ar[0]);
    }
}

function ensure_length(&$string, $length){
    $strlen = strlen($string);
    if($strlen < $length)
    {
         $string = str_pad($string, $length, "0");
    }
    else if($strlen > $length)
    {
         $string = substr($string, 0, $length);
    }
}

function create_guid_section($characters){
    $return = "";
    for($i = 0; $i < $characters; $i++)
    {
         $return .= dechex(mt_rand(0,15));
    }
    return $return;
}
// 輸入
$file = "圖片的路徑";
$fp = fopen($file, "r") or die("Can't open file");
// base64編碼
$q = base64_encode(fread($fp, filesize($file)));
fclose($fp);
do_request($q);
?>

更新記錄

日期更新內(nèi)容
2020.04.10更新接口返回值,測試接口地址
天天综合色天天综合色hd| 国产亚洲色婷婷久久9| 日韩欧美主播| 国内精品久久久久久| 超碰大香蕉| 91在线精品| 欧美黄色真爱视频九九| 黑人管亚洲| 亚洲国产欧美一区二区三区久久| 丝袜美腿亚洲综合| 国产femdom调教| 午夜久久国| 青冈县| 涩涩视频免费观看| 99re热精品视频国产免费| 天堂网人妻a∨| 久久久久国产精品毛片| 欧美日韩一区二| 966a.com| 欧美,日韩,中文字幕| 久久婷婷国产综合精品女人AV| 一本久无码av| 无码网页| 久久一区二区无码| 麻豆av天堂一区二区香蕉| 久久久中文字幕| 欧美亚州二区一区| 色婷综合| 蜜桃视频一区二区三区在线观看| 国产伊人久久久Av| 亚洲欧美字幕| 欧美另类一区| 欧美综合一区二区三区在线观看| 人人妻人人爽人人澡人人| 日韩一q无吗| AV性动态gif| 日韩欧美中文在线| 婷婷五月天一区二区| 七月丁香久蜜| a一级黄色片| 国产一区二区精品久久久不卡蜜臀|