# Toyota EPC 本地验证库说明

更新时间：2026-06-19

## 数据库位置

```text
C:\Users\26652\Documents\逆向工程\toyota_epc_output\toyota_epc_validation.sqlite
```

数据库类型：SQLite

用途：把 Toyota EPC 原始文件中的 VIN 解码规则抽取成结构化表，供本地验证和后续 API 服务使用。

本库只保存 EPC 原始字段，不使用外部网站字段。

## 生成脚本

```text
C:\Users\26652\Documents\逆向工程\toyota_epc_build_validation_db.py
```

重新生成数据库：

```powershell
& 'C:\Users\26652\.cache\codex-runtimes\codex-primary-runtime\dependencies\python\python.exe' 'C:\Users\26652\Documents\逆向工程\toyota_epc_build_validation_db.py'
```

## 查询脚本

```text
C:\Users\26652\Documents\逆向工程\toyota_epc_query_validation_db.py
```

查询示例：

```powershell
& 'C:\Users\26652\.cache\codex-runtimes\codex-primary-runtime\dependencies\python\python.exe' 'C:\Users\26652\Documents\逆向工程\toyota_epc_query_validation_db.py' JTEBN99J900077939 VZJ95L-GKPNKW
```

建议输入：`VIN + 铭牌 MODEL`。  
只输入 VIN 也能查，但同一个 VIN 前缀下可能返回多个 MODEL 候选。

## 表结构

| 表名 | 行数 | 来源文件 | 用途 |
|---|---:|---|---|
| `epc_vin_index` | 460,518 | `JOHOCL.ACD / JOHOVN.ACD` | VIN 前缀到目录/MODEL |
| `epc_vehicle_detail` | 341,466 | `JOHOJP.ACD / JOHOKT.ACD` | MODEL 到生产区间、底盘、发动机、规格 |
| `epc_vehicle_name` | 1,437 | `SHAMEI.ACD` | 目录到 EPC 内部车名 |
| `epc_frame_month_point` | 1,259,570 | `FRAMNO.DAT` | 底盘流水号到生产月份断点 |
| `epc_catalog_frame_range` | 210,045 | `KRK*.DAT` | 目录内部车架号适用范围 |

## VIN 解码链路

```mermaid
flowchart LR
  A["输入 VIN + MODEL"] --> B["取 VIN 前 8/9 位"]
  B --> C["epc_vin_index"]
  C --> D["epc_vehicle_detail"]
  D --> E["epc_vehicle_name"]
  A --> F["取 VIN 后 7 位流水号"]
  F --> G["epc_frame_month_point"]
  G --> H["推导 production_month_epc"]
  H --> I["过滤 production_start / production_end"]
```

## 用户铭牌样本查询结果

输入：

```text
VIN: JTEBN99J900077939
MODEL: VZJ95L-GKPNKW
```

数据库返回 EPC 原始字段：

```json
{
  "market": "EU",
  "catalog": "781540",
  "vehicle_name_epc": "LAND CRUISER 90",
  "model_family": "KDJ9#,KZJ9#,VZJ9#",
  "vin_key": "JTEBN99J",
  "model": "VZJ95L-GKPNKW",
  "production_start": "199906",
  "production_end": "200209",
  "production_month_epc": "200008",
  "frame_code": "VZJ95",
  "frame_serial": "0077939",
  "engine_epc": "VZFE",
  "spec_code": "161W0115",
  "body": "A",
  "transmission": "TM       L",
  "gear": "HD  5",
  "steering": "D"
}
```

## FRAMNO 月份判断

用户样本：

```text
frame_code: VZJ95
frame_serial: 0077939
```

库内 `epc_frame_month_point` 命中断点：

| 月份 | 起始流水号 |
|---|---|
| `200008` | `0077057` |
| `200009` | `0077989` |

因为：

```text
0077057 <= 0077939 < 0077989
```

所以：

```text
production_month_epc = 200008
```

## 当前边界

1. 这个库已经能做本地 VIN 规则验证。
2. 当前强输入建议是 `VIN + 铭牌 MODEL`。
3. 只输入 VIN 时，同一个 `vin_key` 可能有多个 MODEL 候选。
4. `steering / destination / grade` 的代码含义还没有完全翻译，只保留 EPC 原始值。
5. 后续 OE 查询、图片查询可以继续在这个库上加表。
