taiwan-id-checklisted
Install: claude install-skill tahodev/baodao-skill
# taiwan-id-check
> 實測日:2026-09-19(最近一次端對端實測;數值基準日各自標於內文)
用財政部公布的檢核邏輯驗證統一編號(統編)與身分證字號。**純計算**,不連網、不需金鑰、不查任何資料庫——只能回答「這串號碼的檢核碼對不對」,不能回答「這家公司是否存在」。
## 1. 統一編號(8 碼)
財政部檢核邏輯:各碼乘上權重 `1,2,1,2,1,2,4,1`,乘積的十位數與個位數相加後總和,能被 5 整除即為合法。**特例:第 7 碼是 7 時**,該位乘積(7×4=28)的「各位數和」可視為 0 或 1 計算,任一成立即合法(財政部營利事業統一編號檢查邏輯的明文規定)。
```bash
python3 - <<'PY'
def ubn_ok(n: str) -> bool:
if len(n) != 8 or not n.isdigit():
return False
w = [1, 2, 1, 2, 1, 2, 4, 1]
ds = lambda p: p // 10 + p % 10 # 乘積的各位數和
base = sum(ds(int(d) * k) for d, k in zip(n, w))
if base % 5 == 0:
return True
if n[6] == '7': # 第 7 碼 7 的特例
c = ds(7 * 4)
return (base - c + 0) % 5 == 0 or (base - c + 1) % 5 == 0
return False
for n in ['22099131', '97176270']:
print(n, ubn_ok(n))
PY
```
2026-09-19 實測(公開公司統編):台積電 `22099131`、中華電信 `96979933` 合法;台灣大哥大 `97176270`(第 7 碼 7)只在特例路徑下合法,可驗證特例實作有無;把任一碼改動(如 `22099132`)即判非法。
## 2. 國民身分證統一編號(1 英文字母 + 9 碼數字)
檢核邏輯(內政部):首字母依對照表轉成兩位數(A=10、B=11 … I=34、O=35、W=32、X=30、Y=31、Z=33,跳過容易混淆的順序),十位數乘 1、個位數乘 9;之後 8 碼數字依序乘 8,7,6,5,4,3,2,1,最後一碼檢核碼乘 1。全部相加能被 10 整除即合法。
```bash
python3 - <<'PY'
def pid_ok(s: str) -> bool:
s = s.strip().upper()
if len(s) != 10 or not s[0].isalpha() or not s[1:].isdigit():
return False
L = {'A':10,'B':11,'C':12,'D':13,'E':14,'F':15,'G':16,'H':17,'I':34,
'J':18,'K':19,'L':20,'M':21,'N':22,'O':35,'P':23,'Q':24,'R':25,
'S':26,'T':27,'U':28,'V':29,'W':32