跳到主要内容

🪪 泰国国民身份证 OCR

1.25 IC每页(正面)/ 0.75 IC(背面)
✅ 活跃🪪 eKYC

欢迎使用泰国国民身份证 OCR API,版本 3.5,这是由艾艾普科技有限公司开发的 AI 产品。我们的 API 旨在以高精度和高速度从泰国国民身份证图像的正面和背面提取文本信息。我们的 API 支持 JPEG、JPG、PNG、HEIC、HEIF 和 PDF 文件格式,处理一张身份证图像仅需 1-2 秒。

试用演示

Example Images (Click to try)

Example 1

入门指南

  1. 前提条件

    • 来自艾艾普科技的 API 密钥
    • 泰国国民身份证图像(正面/背面)
    • 支持的文件格式:JPEG、JPG、PNG、HEIC、HEIF、PDF
    • 最大文件大小:10MB
  2. 快速入门

    • 快速处理(每张卡 1-2 秒)
    • 高精度文本提取(字符级别准确率 98.13%)
    • 支持多种文件格式
  3. 主要功能

    • 详细的字段提取,包括:
      • 身份证号码
      • 全名(泰语和英语)
      • 出生日期
      • 宗教
      • 地址
      • 签发日期和到期日期
    • 支持身份证的正面和背面
    • 可以选择返回原始 OCR 文本和处理后的图像
    • 灵活的 JSON 响应格式
  4. 安全与合规

    • 符合 GDPR 和 PDPA
    • 处理后不保留数据
如何获取 API 密钥?

请访问 API 密钥管理 页面查看您现有的 API 密钥或申请新密钥。

示例

正面

泰国国民身份证示例(正面)

请求:

curl -X POST https://api.iapp.co.th/v3/store/ekyc/thai-national-id-card/front
-H "apikey: YOUR_API_KEY"
-F "file=@/path/to/idcard.jpg"

响应:

{
"address": "XXXXXX XXXX X ต.หนองปรือ อ.บางละมุง จ.ชลบุรี",
"alley": "",
"detection_score": 0.981011797984441,
"district": "บางละมุง",
"en_dob": "XX Mar 1957",
"en_expire": "XX Mar 2025",
"en_fname": "XXXXXX",
"en_init": "Mrs.",
"en_issue": "26 Jul 2016",
"en_lname": "Lopez",
"en_name": "Mrs. XXXXXX Lopez",
"error_message": "",
"face": "/9j/4AAQ...UAFFFFAH/9k=", # 照片的 Base64 图像
"gender": "Female",
"home_address": "XXXXX XXX",
"house_no": "XXXXXX",
"id_number": "34117XXXXXX334",
"id_number_status": 1,
"lane": "",
"postal_code": "20150", # 自动从数据库检索
"process_time": 1.3018648624420166, # 秒
"province": "ชลบุรี",
"religion": "",
"request_id": null,
"road": "",
"sub_district": "หนองปรือ",
"th_dob": "XX มี.ค. 2500",
"th_expire": "XX มี.ค. 2568",
"th_fname": "XXXXX",
"th_init": "นาง",
"th_lname": "โลเปซ",
"th_name": "นาง XXXXX โลเปซ",
"village": "",
"village_no": "7"
}

背面

泰国国民身份证示例(背面)

请求:

curl --location --request POST 'https://api.iapp.co.th/v3/store/ekyc/thai-national-id-card/back' \
--header 'apikey: {Your API Key}' \
--form 'file=@"path/to/id-card-back.jpg"'

响应:

{
"back_number": "JT0-XXXXXXX-05",
"detection_score": 0.99846746524175,
"process_time": 1.370201416015625
}

功能与能力

核心功能

  • 高精度文本提取(字符级别准确率 98.13%)
  • 快速处理时间(每张卡 1-3 秒)
  • 支持多种文件格式(JPEG、JPG、PNG、HEIC、HEIF、PDF)
  • 自动裁剪和旋转卡片
  • 返回字段的边界框和分数
  • 返回卡片和字段的 base64 图像
  • 返回原始 OCR 文本
  • 支持无芯片的卡片背面

支持的字段

正面

字段类型描述
addressString身份证上的地址
detection_scorefloat相关字段的检测分数
districtString身份证上的区名
en_dobString出生日期,英文
en_expireString到期日期,英文
en_fnameString英文名
en_initString称谓,英文
en_issueString签发日期,泰文
en_lnameString英文姓
en_nameString英文名和姓
error_messageString错误消息
faceString从图像转换而来的 Base64 字符字符串
genderString性别
home_addressString身份证上的家庭住址
id_numberString国民身份证号码
postal_codeString邮政编码
process_timeString处理时间(秒)
provinceString身份证上的省名
religionString身份证上的宗教
sub_districtString身份证上的分区名
th_dobString出生日期,泰文
th_expireString到期日期,泰文
th_fnameString泰文名
th_initString称谓,英文
th_issueString签发日期
th_lnameString泰文姓
th_nameString泰文名和姓

背面

字段类型描述
back_numberString身份证背面的激光号码

通用响应字段

字段类型描述
detection_scoreFloat置信度分数 (0-1)
error_messageString请求失败时的错误消息
process_timeFloat处理时间(秒)

API 端点

端点方法描述费用
POST /v3/store/ekyc/thai-national-id-card/front
旧版: /thai-national-id-card/v3.5/front
POST从泰国身份证正面提取详细信息每次请求 1.25 IC
POST /v3/store/ekyc/thai-national-id-card/back
旧版: /thai-national-id-card/v3.5.1/back
POST从泰国身份证背面提取信息每次请求 0.75 IC

API 参考

泰国国民身份证端点

1. 泰国国民身份证 - 正面

POST /v3/store/ekyc/thai-national-id-card/front

从泰国国民身份证正面提取详细信息。

请求头
名称类型是否必填描述
apikeystring您的 API 密钥
请求体 (multipart/form-data)
参数类型是否必填描述
fileFile图像的二进制数据(正面)
fieldsString输出中选择字段的选项
optionsString选择处理工具和设置的选项

2. 泰国国民身份证 - 背面

POST /v3/store/ekyc/thai-national-id-card/back

从泰国国民身份证背面提取信息。

请求头
名称类型是否必填描述
apikeystring您的 API 密钥
请求体 (multipart/form-data)
参数类型是否必填描述
fileFile图像的二进制数据(背面)
optionsString选择处理工具和设置的选项

可用选项

  • not_crop_card - 跳过卡片裁剪
  • not_rotate_card - 跳过自动旋转
  • get_bbox - 返回边界框坐标
  • get_image - 返回处理后的图像
  • get_original - 返回原始 OCR 文本
可用选项的响应格式

使用可用选项时,响应 JSON 将根据所选选项包含额外的字段:

使用 get_bbox 选项的响应

[x1, y1, x2, y2] 格式返回每个检测到的字段的边界框坐标及置信度分数:

{
"bbox": {
"address": [
[[119, 292, 376, 334], 0.991],
[[75, 330, 255, 362], 0.999]
],
"card": [[[0, 0, 713, 462], 0.99]],
"en_dob": [[[370, 235, 526, 266], 0.999]],
"face": [[[544, 218, 708, 407], 0.999]]
// 其他字段坐标...
}
}
使用 get_image 选项的响应

为每个检测到的字段返回 base64 编码的裁剪图像:

{
"image": {
"address": ["/9j/4AAQSk...", "/9j/4AAQSk..."],
"card": ["/9j/4AAQSk..."],
"face": ["/9j/4AAQSk..."],
"id_number": ["/9j/4AAQSk..."]
// 其他字段图像...
}
}
使用 get_original 选项的响应

返回在后处理步骤中进行自动更正之前从卡片检测到的原始值:

{
"original": {
"address": "XXXXX XXXXX X ต.หนองปรือ อ.บางละมุง จ.ชลบุรี",
"en_dob": "XX Mar. 1957",
"en_expire": "XX Mar. 2025",
"th_name": "นาง XXXXXX โลเปซ"
// 其他原始字段值...
}
}

无论使用何种选项,响应始终包含 standard fields,如 detection_score、error_message 和 process_time。

错误代码

具体错误消息

泰国国民身份证正面

状态码状态消息描述
420NO_ID_CARD_FOUND图像文件不是身份证
421IMAGE_ERROR_UNSUPPORTED_FORMAT无法解析图像。文件格式可能不受支持或文件已损坏
422INVALID_IMAGE_SIZE上传图像的大小不符合要求
424PLEASE_VERIFY_ID_CARD_NUMBER国民身份证号码有 13 位但错误。当使用 id_check 选项时,响应代码 424 将显示
425CANNOT_READ_ID_CARD_NUMBER_CLEARLY国民身份证号码不足 13 位。当使用 id_check 选项时,响应代码 425 将显示
426IMAGE_ERROR_UNSUPPORTED_BLACK_WHITE_IMAGE使用 gray_check 选项检查黑白和灰度图像

泰国国民身份证背面

状态码状态消息描述
430NO_ID_CARD_FOUND图像文件不是身份证
431IMAGE_ERROR_UNSUPPORTED_FORMAT无法解析图像。文件格式可能不受支持或文件已损坏
432INVALID_IMAGE_SIZE上传图像的大小不符合要求
434LASER_NUMBER_NOT_FOUND无法在身份证背面检测到激光号码
435CANNOT_READ_LASER_NUMBER_CLEARLY激光号码不足 12 位。当使用 id_check 选项时,响应代码 435 将显示
436IMAGE_ERROR_UNSUPPORTED_BLACK_WHITE_IMAGE使用 gray_check 选项检查黑白和灰度图像

通用错误消息

状态码状态消息描述
404REQUESTED_URL_NOT_FOUND请求中找不到 API 路由
405METHOD_NOT_ALLOWEDURL 中的方法名称(GET、POST)不正确
413FILE_IS_TOO_LARGE: (more than 2 MB)文件大小过大
427LONG_TIME_TO_PROCESS服务器处理时间过长
428LONG_TIME_TO_REQUEST客户端在队列中等待时间过长
461NO_FILE_ATTACHED未附加文件
560SERVER_IS_BUSY: (Please try again in a few seconds.)服务器正在处理大量请求
563ID_CARD_API_NOT_SUPPORT_THIS_IMAGEAPI 在处理过程中出现错误

代码示例

Curl

curl -X POST https://api.iapp.co.th/v3/store/ekyc/thai-national-id-card/front \
-H "apikey: YOUR_API_KEY" \
-F "file=@/path/to/file.jpg"

Python

import requests

url = "https://api.iapp.co.th/v3/store/ekyc/thai-national-id-card/front"

payload = {
'options': 'get_bbox,get_image'
}

files = [
('file',('id-card.jpg',open('path/to/id-card.jpg','rb'),'image/jpeg'))
]

headers = {
'apikey': 'YOUR_API_KEY'
}

response = requests.request("POST", url, headers=headers, data=payload, files=files)
print(response.json())

JavaScript

const axios = require("axios")
const FormData = require("form-data")
const fs = require("fs")

const form = new FormData()
form.append("file", fs.createReadStream("path/to/id-card.jpg"))
form.append("options", "get_bbox,get_image")

const config = {
method: "post",
url: "https://api.iapp.co.th/v3/store/ekyc/thai-national-id-card/front",
headers: {
apikey: "YOUR_API_KEY",
...form.getHeaders(),
},
data: form,
}

axios(config)
.then((response) => console.log(JSON.stringify(response.data)))
.catch((error) => console.log(error))

PHP

<?php
$curl = curl_init();

$post_data = array(
'file'=> new CURLFile('path/to/id-card.jpg'),
'options' => 'get_bbox,get_image'
);

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.iapp.co.th/v3/store/ekyc/thai-national-id-card/front',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post_data,
CURLOPT_HTTPHEADER => array(
'apikey: YOUR_API_KEY'
),
));

$response = curl_exec($curl);
curl_close($curl);
echo $response;
?>

Swift

import Foundation

let headers = [
"apikey": "YOUR_API_KEY"
]

let parameters = [
[
"name": "file",
"fileName": "path/to/id-card.jpg"
],
[
"name": "options",
"value": "get_bbox,get_image"
]
]

let boundary = "Boundary-\(UUID().uuidString)"
var body = ""
var error: Error? = nil

for param in parameters {
if let fileName = param["fileName"] {
let fileContent = try? String(contentsOfFile: fileName, encoding: .utf8)
body += "--\(boundary)\r\n"
body += "Content-Disposition:form-data; name=\"\(param["name"] ?? "")\""
body += "; filename=\"\(fileName)\"\r\n"
body += "Content-Type: image/jpeg\r\n\r\n"
body += fileContent ?? ""
} else {
body += "--\(boundary)\r\n"
body += "Content-Disposition:form-data; name=\"\(param["name"] ?? "")\"\r\n\r\n"
body += param["value"] ?? ""
}
}

let postData = body.data(using: .utf8)

var request = URLRequest(url: URL(string: "https://api.iapp.co.th/v3/store/ekyc/thai-national-id-card/front")!,timeoutInterval: Double.infinity)
request.addValue("YOUR_API_KEY", forHTTPHeaderField: "apikey")
request.httpMethod = "POST"
request.httpBody = postData

let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {
print(String(describing: error))
return
}
print(String(data: data, encoding: .utf8)!)
}

task.resume()

Kotlin

import okhttp3.*
import java.io.File

val client = OkHttpClient()

val mediaType = MediaType.parse("image/jpeg")
val file = File("path/to/id-card.jpg")
val body = MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("file", file.name, RequestBody.create(mediaType, file))
.addFormDataPart("options", "get_bbox,get_image")
.build()

val request = Request.Builder()
.url("https://api.iapp.co.th/v3/store/ekyc/thai-national-id-card/front")
.addHeader("apikey", "YOUR_API_KEY")
.post(body)
.build()

client.newCall(request).execute().use { response ->
println(response.body()?.string())
}

Java

import java.io.File;
import okhttp3.*;

public class Main {
public static void main(String[] args) {
OkHttpClient client = new OkHttpClient().newBuilder().build();

MediaType mediaType = MediaType.parse("image/jpeg");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("file", "id-card.jpg",
RequestBody.create(mediaType, new File("path/to/id-card.jpg")))
.addFormDataPart("options", "get_bbox,get_image")
.build();

Request request = new Request.Builder()
.url("https://api.iapp.co.th/v3/store/ekyc/thai-national-id-card/front")
.method("POST", body)
.addHeader("apikey", "YOUR_API_KEY")
.build();

try {
Response response = client.newCall(request).execute();
System.out.println(response.body().string());
} catch(Exception e) {
e.printStackTrace();
}
}
}

Dart

import 'package:http/http.dart' as http;

void main() async {
var request = http.MultipartRequest('POST',
Uri.parse('https://api.iapp.co.th/v3/store/ekyc/thai-national-id-card/front'));

request.files.add(await http.MultipartFile.fromPath(
'file', 'path/to/id-card.jpg'));

request.fields['options'] = 'get_bbox,get_image';

request.headers.addAll({
'apikey': 'YOUR_API_KEY'
});

http.StreamedResponse response = await request.send();

if (response.statusCode == 200) {
print(await response.stream.bytesToString());
} else {
print(response.reasonPhrase);
}
}

限制与最佳实践

限制

  • 最大文件大小:10MB
  • 支持的格式:JPEG、JPG、PNG、HEIC、HEIF、PDF

最佳实践

  1. 确保图像质量良好
  2. 检查响应中的 detection_score
  3. 妥善处理错误消息
  4. 验证身份证号码格式
  5. 根据具体需求考虑使用 options 参数

准确性与性能

整体准确性

  • 检测分数通常高于 96%
  • 特定字段的准确性各不相同

处理速度

  • 平均:1-2 秒
  • 可能因图像大小和质量而异

影响准确性的因素

  1. 图像质量
    • 分辨率(最低 300 DPI)
    • 光照
    • 对焦
  2. 卡片状况
    • 物理损坏
    • 反光
    • 文字清晰度

历史记录

版本发布日期准确性主要改进
3.52022 年 11 月98.13%新的 OCR 引擎,更快的处理速度
3.42022 年 7 月93.25%添加了泰国军衔
3.1-3.32021 年 5 月 - 7 月92.75%内部 Beta 发布
3.02021 年 2 月91.75%主要准确性改进
2.02020 年 2 月85%添加了卡片背面支持
1.02019 年 11 月76%初始发布

定价

操作生产环境路径旧版路径IC 费用单位本地部署
泰国国民身份证 - 正面/v3/store/ekyc/thai-national-id-card/front/thai-national-id-card/v3.5/front1.25 IC每次请求 1 次联系我们
泰国国民身份证 - 背面/v3/store/ekyc/thai-national-id-card/back/thai-national-id-card/v3.5.1/back0.75 IC每次请求 1 次联系我们