# 泰国政府 L6 彩票：规则与实现边界

核对日期：2026-09-30。本工具面向泰国政府六位数彩票（L6），不是 N3、地下彩票或其他衍生玩法。

## 官方来源

1. [泰国政府彩票局 GLO 首页](https://www.glo.or.th/home-page)：分别展示六位数彩票和 N3 的开奖结果；六位彩票的一等奖为 6,000,000 泰铢、前三位及后三位各 4,000 泰铢、末两位 2,000 泰铢。
2. [GLO 官方查询与兑奖说明](https://www.glo.or.th/mission/reward-payment/check-reward)：规则表列出 `รางวัลเลขหน้า 3 ตัว เสี่ยง 2 ครั้ง`（前三位摇两次）、`รางวัลเลขท้าย 3 ตัว เสี่ยง 2 ครั้ง`（后三位摇两次）和 `รางวัลเลขท้าย 2 ตัว เสี่ยง 1 ครั้ง`（末两位摇一次）。本次读取官方 HTML 核对这些条目及奖金数额。

官方首页静态 HTML 中实际开奖号码为占位符。后续已根据官网公开脚本定位并验证 JSON 接口；自动导入使用以下接口，不解析占位符。

## 数据模型

- 六位号码是字符串，范围 `000000`–`999999`；允许前导零、重复数字，不采用双色球式不放回选数。
- 一等奖、前三位、后三位、末两位分别记录，不从一等奖切片构造其他奖项结果。
- 每期保存两个前三位、两个后三位、一个末两位。官方三位奖“摇两次”不能直接等同于 2,000 个独立三位号码；规则表中奖数量还包括六位票号的其余位置组合。
- 未核实同奖项两次三位结果重合时的现场重摇细则，因此导入不拒绝相同三位结果，票号对照只展示命中奖项，不按重复记录累计奖金。
- 只接收公历 2016–2100 年的数据，避免把早期不同规则下的数据混入当前结构。这是工具导入范围，不是对 L6 品牌起始年份的声明。
- 用户明确选择佛历时，年份减 543。日期严格校验，重复期日拒绝，自动按日期由新到旧排序。
- 不强制开奖日为 1 日或 16 日，以免拒绝官方调整后的开奖日期；不生成“下期开奖时间”承诺。

CSV 使用七列，号码字段不加引号，使用 ASCII 数字，号码列在表格软件中应保持文本格式：

```csv
date,first,front3a,front3b,last3a,last3b,last2
```

程序内置 60 期确定性虚构数据用于演示；注释带 `SYNTHETIC_DEMO`，页面和候选导出均保留虚构来源标识。普通导入一律标注“未经官方核验”。不要将删掉演示注释的文件当作真实数据。

## 算法

### 历史统计

各位置分别统计 0–9 数字频次。三位奖每期两个结果均计入频次；遗漏以开奖期为单位，最新一期出现为 0，整个窗口未出现显示“≥窗口期数”。窗口内高频完整号码仅反映过去。

### 参考号码生成

- 随机基线：在满足位置模板、和值与重复数字设置的号码中抽取不重复候选。种子是可复现的伪随机种子，不是安全随机数，不用于真实开奖。
- 历史频率：每个位置的计数加 1 平滑；按各位置对数频率之和排序。该模型作位置独立近似，不展示虚构中奖概率或置信度，至少需要当前窗口 10 期数据。
- 两位、三位枚举完整空间；六位在不超过四个自由位置时完整枚举，其余情况为有限抽样（历史模式 5,000 次，随机模式最多 10,000 次）。不宣称抽样排序是完整空间最优。
- 相同数据、参数和种子产生相同候选；不足指定数量时明确展示实际数量，不补入违反约束的号码。
- 冷热、遗漏或排除重复数字不改变公平独立开奖下任一固定号码的理论概率。一等奖固定六位号为 1/1,000,000，末两位固定号为 1/100；三位每次匹配为 1/1,000，不将两次抽取简单等同于两个独立奖项奖金相加。

### 回测

只实现末两位回测。数据先按日期从旧到新排序，每期只使用其之前的训练窗口，不能看到当期或未来结果。历史排序前 K 个与随机 K 个使用相同数量，不使用选号区域额外结构条件。

每期命中是候选集合包含实际末两位；理论随机覆盖率是 K/100，测试 T 期理论期望为 T×K/100。实际随机基线为一次固定种子的模拟。小样本领先不证明预测优势；未提供显著性、投注收益或盈利承诺。

### 票号对照

支持一等奖、前三位、后三位、末两位四类。未录入一等奖相邻奖及二至五等奖，因此不提供“完全未中奖”结论。兑奖、奖金、税费、票据真伪与有效性均应向官方核实。

## 工程与验证

- 零远程脚本、无前端构建依赖；手动导入可直接打开 `thai.html`。官方导入需运行 `server.py`，见下方说明。
- 数据在浏览器会话中处理，不上传，不自动保存；刷新清空。
- CSV 最多 2 MB / 3,000 期；候选最多 50 个；票号对照最多 100 个。
- `node --test tests/thai-lottery.test.cjs` 验证格式/历法、奖项独立、前导零、重复数字、频次与遗漏、约束和有限抽样、种子复现、回测无未来数据、部分奖项匹配。

## GLO 官方自动导入（2026-09-30 新增）

从 GLO 官网当前公开脚本 `/_nuxt/fd6d8e9.js` 中发现以下接口及参数，并实际验证返回：

- `POST https://www.glo.or.th/api/lottery/getPeriodsByYear`，参数 `{"year":"2026","type":"CHECKED"}`。返回 `response.result` 中的日期列表；同一天存在多个期号，按日期去重。2026 年列表包括 `2026-01-02`、`2026-01-17` 和 `2026-05-02` 等调整日期，不假设固定 1 日／16 日开奖。
- `POST https://www.glo.or.th/api/checking/getLotteryResult`，参数 `{"date":"16","month":"09","year":"2026"}`。须核对 `response.result.date` 与请求一致、`status=1`，然后读取 L6 的 `data.first`、`data.last3f`、`data.last3b` 和 `data.last2`。不读取并列的 `n3`。
- 本次实查 `2026-09-16`：一等奖 `730640`，前三位 `060 / 521`，后三位 `041 / 266`，末两位 `64`。保留原始字符串位宽；这个实例仅证明接口字段映射，不作为硬编码“最新一期”。精简原始响应位于 `tests/fixtures/glo-2026-09-16.json`，仅用于测试。

接口响应未提供跨域许可，浏览器通过同源 `api/glo/` 服务读取，不使用第三方公共代理。只发送开奖年份／日期，不发送用户历史 CSV 或票号。服务固定请求 GLO 两个路径，不接受用户提供的上游 URL。

页面支持近 30／60／120 期，按北京时间不同的泰国 UTC+7 日期确定当前年，向前获取官方实际公布期日，剔除未来日期。最多同时获取两期；任何一期请求失败、缺字段、位宽错误或日期不一致都会终止本次导入，原有页面数据不被部分覆盖。取消后停止后续查询，已发出的上游请求可能仍会完成并写入服务缓存。

日期列表缓存 15 分钟，开奖数据缓存 24 小时；缓存命中保留原获取时间。页面标注官方来源、最新开奖日和本次导入时间，候选 JSON 导出记录包含逐期获取时间及是否命中缓存。缓存仅在服务内存中，重启清空；官方更正最迟在缓存过期后重新获取。手动编辑导入数据后撤销“官方”来源标识。

这些是官网目前使用的公开接口，不是保证长期稳定的 API 合约。官网维护、503、超时或字段改变时显示错误，不能宣称已更新，不替换为虚构数据。
