{"id":"a3156044-d23f-4048-a486-8d41b90f15d6","shortId":"s9MQkb","kind":"skill","title":"thai-id-validate","tagline":"Use this skill for any task involving Thai national ID, tax ID, phone number, or PromptPay QR code validation, normalization, or generation. Trigger whenever the user asks to: validate a Thai citizen ID, check a tax ID checksum, normalize Thai phone numbers between +66 and 0X for","description":"# Thai ID / Phone / PromptPay (ตรวจเลขบัตร เบอร์ พร้อมเพย์)\n\n## Overview\nตรวจสอบ checksum ของเลขบัตรประชาชนไทย / เลขประจำตัวผู้เสียภาษี (13 หลัก), แปลงเบอร์โทรระหว่างรูป `+66` กับ `0X`, และสร้าง payload สำหรับ PromptPay QR (รูปแบบ EMVCo TLV). Algorithm and TLV layout follow the official Thai Revenue Department and ITMX PromptPay specifications.\n\n## When to use\n- ตรวจ checksum เลขบัตรประชาชน 13 หลัก (citizen ID / individual tax ID share the same algorithm)\n- Normalize เบอร์โทร: ผู้ใช้ป้อน `+66 81 234 5678` แต่ระบบเก็บ `0812345678`\n- สร้าง QR สำหรับรับเงิน PromptPay จากเบอร์มือถือหรือเลขบัตรประชาชน\n- DO NOT use for company tax IDs that follow non-standard formats, or for verifying that an ID belongs to a real person (checksum only proves format, not existence).\n\n## Example prompts\n- \"ตรวจเลขบัตร 1-1017-00230-70-X ให้หน่อย\"\n- \"เบอร์ 081-234-5678 แปลงเป็น E.164 ให้ที\"\n- \"สร้าง PromptPay QR เบอร์ 0812345678 จำนวน 250 บาท\"\n\n## Quick reference\n\n| Function | ภาษาไทย | Returns |\n|---|---|---|\n| `is_valid_thai_id(s)` | ตรวจ checksum | `bool` |\n| `normalize_phone(s)` | แปลงเป็น `+66XXXXXXXXX` | `str` |\n| `format_phone_thai(s)` | แปลงเป็น `0XX-XXX-XXXX` | `str` |\n| `build_promptpay_payload(target, amount?)` | สร้าง QR payload | `str` |\n\n### Thai ID checksum algorithm\nให้ตัวเลข 12 หลักแรก คูณด้วยน้ำหนัก `[13,12,11,10,9,8,7,6,5,4,3,2]` แล้วรวมกัน. นำผลรวม mod 11, เอา 11 ลบ, แล้ว mod 10 อีกครั้ง = check digit (หลักที่ 13).\n\n### Phone format rules\n- หลังจาก strip เครื่องหมายเว้นวรรค `-` `()` แล้ว\n- ขึ้นต้น `+66`, `66`, หรือ `0` ถือว่าเทียบเท่ากัน\n- มือถือ: 10 หลักรวม 0 (06, 08, 09 หลังจาก 0)\n- บ้าน Bangkok: 9 หลักรวม 0 (เช่น 02-880-1234)\n\n### PromptPay TLV (key tags)\n- `00` Payload Format Indicator `01`\n- `01` POI Method: `11` static / `12` dynamic (with amount)\n- `29` Merchant Account Info → sub-tag `00` AID `A000000677010111`, sub-tag `01` phone (`0066` + เบอร์, pad to 13 chars) **or** `02` national ID (13 digits)\n- `53` Currency `764` (THB)\n- `54` Amount (optional)\n- `58` Country `TH`\n- `63` CRC-16/CCITT-FALSE (uppercase 4-hex) over the entire payload **including** the `6304` tag/length prefix\n\n## Implementation\n- Python: [`validate.py`](validate.py) — `python validate.py` runs all self-tests\n- TypeScript: [`validate.ts`](validate.ts) — `npx tsx validate.ts` runs all self-tests\n\n## เลขหลักแรกของบัตรประชาชน (First-digit prefix)\nหลักแรกของเลข 13 หลักบอก *ประเภท* ของผู้ถือบัตรตามที่กรมการปกครอง (DOPA) กำหนด มี 8 ประเภทหลัก:\n\n| หลักแรก | ความหมาย (TH) | Meaning (EN) |\n|---|---|---|\n| **1** | สัญชาติไทย เกิดและแจ้งเกิดตามกำหนด ตั้งแต่ 1 ม.ค. 2527 | Thai citizen born ≥ 1 Jan 1984 with timely birth registration |\n| **2** | สัญชาติไทย เกิดและแจ้งเกิดเกินกำหนด ตั้งแต่ 1 ม.ค. 2527 | Thai citizen born ≥ 1984 with late birth registration |\n| **3** | สัญชาติไทย มีชื่อในทะเบียนบ้านก่อน 1 ม.ค. 2527 | Thai citizen already in household registry before 1984 |\n| **4** | สัญชาติไทย ไม่มีชื่อในทะเบียนบ้านก่อน 1 ม.ค. 2527 (เพิ่มชื่อช่วงสำรวจ) | Thai citizen not in the initial pre-1984 registry |\n| **5** | สัญชาติไทย เพิ่มชื่อเข้าทะเบียนบ้านภายหลัง (รวมแจ้งเกิดเกินกำหนดและกรณีกลับคืนสัญชาติ) | Thai citizen added to registry later (incl. late birth & re-recognition) |\n| **6** | บุคคลที่เข้าเมืองโดยชอบด้วยกฎหมายชั่วคราว / ผู้พลัดถิ่น / ชนกลุ่มน้อย | Lawful temporary resident, displaced person, or ethnic minority awaiting status |\n| **7** | บุตรของบุคคลประเภท 6 ที่เกิดในประเทศไทย | Children of category-6 persons, born in Thailand |\n| **8** | บุคคลต่างด้าวที่ได้รับสัญชาติไทย / มีถิ่นที่อยู่ถาวร | Naturalized Thai citizen or permanent-residence holder |\n\nหมายเหตุ: หลักแรก `0` เคยใช้กับกรณีพิเศษบางอย่างในอดีต แต่พบได้น้อยมากในระบบปัจจุบัน. ใช้สำหรับงาน HR/KYC เพื่อเข้าใจ background ของผู้สมัคร — **ห้าม** ใช้หลักแรกเพียงอย่างเดียวเป็นเกณฑ์เลือกปฏิบัติ (เช่น ปฏิเสธรับสมัครงานเพราะหลักแรกไม่ใช่ 1–5) เพราะผิดทั้งกฎหมายแรงงานและไม่ตรงเจตนาของระบบเลขประจำตัว.\n\n## Slip QR (QR บนสลิปโอนเงิน)\nแอปธนาคารไทยยุคใหม่ฝัง QR code ไว้บนสลิปโอนเงินทุกใบ เพื่อให้ผู้รับเงิน *ยืนยันสลิปได้จริง* แทนที่จะเชื่อภาพ JPG ที่อาจถูกตัดต่อ.\n\n**โครงสร้าง payload.** เป็น EMVCo TLV (รูปแบบเดียวกับ PromptPay payment QR) แต่เป็น *คนละ profile* — เก็บข้อมูลธุรกรรมแทนข้อมูลผู้รับเงิน. ฟิลด์ทั่วไปที่อยู่ใน TLV ของสลิป:\n- Payload format indicator + POI method (เช่นเดียวกับ PromptPay)\n- รหัสธนาคารผู้ส่ง (sending bank ID, 3 หลักตามรหัส BOT)\n- รหัสธนาคารผู้รับ (receiving bank ID)\n- เลขอ้างอิงธุรกรรม (transaction reference ID — รหัสเฉพาะที่ธนาคารผู้ส่งออกให้)\n- จำนวนเงิน, สกุลเงิน (`764`), country (`TH`)\n- timestamp ของการโอน\n- CRC-16/CCITT-FALSE ปิดท้าย\n\n**การยืนยัน.** เมื่อสแกน QR บนสลิป แอปธนาคารจะดึง `(sending_bank_id, transaction_ref_id)` ออกจาก payload แล้วยิง API ของธนาคารผู้ออกสลิป (เช่น KBank Slip Verification API, SCB Slip Verify) เพื่อขอข้อมูลธุรกรรมจริงกลับมาเทียบ. ถ้าธนาคารตอบกลับว่า \"ไม่พบธุรกรรม\" หรือจำนวนเงินไม่ตรง = สลิปปลอม.\n\n**เหตุผลที่มี.** กันการปลอมสลิปด้วยการแก้ภาพ — ภาพสลิปปลอมทำได้ง่ายมาก (แค่ Photoshop) แต่ QR ปลอมไม่ได้เพราะข้อมูลถูก **validate ที่ฝั่ง server** ของธนาคารผู้ออกสลิป ไม่ใช่ในตัว QR เอง. ผู้ค้ารายย่อยที่รับโอน PromptPay ควรสแกน QR บนสลิปลูกค้าก่อนปล่อยของ ไม่ใช่ดูแค่ภาพ.\n\n**Known gap.** `validate.py` / `validate.ts` ในสกิลนี้ **ไม่** parse slip QR — รองรับเฉพาะการ *สร้าง* PromptPay payment payload เท่านั้น. ถ้าต้องการ parse/verify สลิปจริง ใช้ไลบรารีเฉพาะทาง (เช่น `slipverify`, `thanakan`) ที่เรียก API ธนาคารผู้ออกสลิปได้.\n\n## Common mistakes\n- **Hardcoded fake fixtures.** Don't paste a random 13-digit string and assume it passes. Build fixtures by computing the check digit from a 12-digit prefix.\n- **Forgetting the `% 10` step.** When `total % 11 == 0`, `11 - 0 = 11`. Mod 10 yields `1`, not `11`.\n- **PromptPay CRC scope.** The CRC is computed over the **entire** payload up to and including the literal `\"6304\"` tag+length, **not** just the body before tag 63.\n- **Phone digit count.** Bangkok landlines are 9 digits (incl. leading 0); mobiles are 10. If you assume 10 always you'll mis-validate landlines.\n- **Tax ID vs corporate ID.** Individual tax ID == citizen ID checksum. Juristic-person (company) tax IDs are a different 13-digit allocation but use the **same** checksum, so the same function validates both.\n- **Trusting the first digit as proof of nationality.** หลักแรก = 1–5 บ่งบอกว่า *ระบบทะเบียน* จัดเป็นสัญชาติไทย ณ เวลาออกเลข — ไม่ใช่หลักฐานสัญชาติปัจจุบัน. ตรวจกับเอกสารจริง (บัตรประชาชน, ทะเบียนบ้าน) เสมอ. และอย่าใช้หลักแรกเป็นเงื่อนไขกรองผู้สมัคร — ผิดเจตนาและอาจเข้าข่ายเลือกปฏิบัติ.\n- **Accepting a slip JPG as payment proof without QR verification.** ภาพสลิปปลอมง่ายมาก. ถ้ารับโอนเงินจริงจัง ต้องสแกน QR บนสลิปแล้วให้แอปธนาคาร verify กับ server ของธนาคารผู้ออก — อย่าเชื่อแค่ตัวเลขในรูป.","tags":["thai","validate","claude","skills","boom-vitt","agent-skills","agentskills","claude-code","claude-skills","i18n","line-oa","localization"],"capabilities":["skill","source-boom-vitt","skill-thai-id-validate","topic-agent-skills","topic-agentskills","topic-claude-code","topic-claude-skills","topic-i18n","topic-line-oa","topic-localization","topic-pdpa","topic-promptpay","topic-thai","topic-thai-language","topic-thai-nlp"],"categories":["claude-thai-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/Boom-Vitt/claude-thai-skills/thai-id-validate","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add Boom-Vitt/claude-thai-skills","source_repo":"https://github.com/Boom-Vitt/claude-thai-skills","install_from":"skills.sh"}},"qualityScore":"0.458","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 17 github stars · SKILL.md body (6,674 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:06:00.990Z","embedding":null,"createdAt":"2026-05-18T07:06:32.772Z","updatedAt":"2026-05-18T19:06:00.990Z","lastSeenAt":"2026-05-18T19:06:00.990Z","tsv":"'+66':48,67,112,194,259 '-00230':158 '-1017':157 '-1234':281 '-16':339,591 '-1984':459 '-234':164 '-5678':165 '-6':498 '-70':159 '-880':280 '/ccitt-false':340,592 '0':262,267,272,277,516,705,707,752 '00':286,307 '0066':315 '01':290,291,313 '02':279,322 '06':268 '08':269 '081':163 '0812345678':117,173 '09':270 '0x':50,69 '0xx':203 '0xx-xxx-xxxx':202 '1':156,395,399,406,417,432,447,528,712,810 '10':227,245,265,700,710,755,759 '11':226,239,241,294,704,706,708,714 '12':221,225,296,695 '13':64,98,224,250,319,325,381,679,787 '1984':408,424,443 '2':235,413 '234':114 '250':175 '2527':402,420,435,450 '29':300 '3':234,429,571 '4':233,342,444 '5':232,461,529,811 '53':327 '54':331 '5678':115 '58':334 '6':231,477,493 '63':337,741 '6304':350,732 '66':260 '7':230,491 '764':329,585 '8':229,388,503 '81':113 '9':228,275,748 'a000000677010111':309 'accept':824 'account':302 'ad':467 'aid':308 'algorithm':78,108,219 'alloc':789 'alreadi':438 'alway':760 'amount':211,299,332 'api':608,614,667 'ask':31 'assum':683,758 'await':489 'background':522 'bangkok':274,745 'bank':569,576,600 'belong':142 'birth':411,427,473 'bodi':738 'bool':189 'born':405,423,500 'bot':573 'build':207,686 'categori':497 'char':320 'check':38,247,691 'checksum':42,61,96,147,188,218,777,794 'children':495 'citizen':36,100,404,422,437,453,466,508,775 'code':22,537 'common':669 'compani':127,781 'comput':689,721 'corpor':770 'count':744 'countri':335,586 'crc':338,590,716,719 'currenc':328 'depart':87 'differ':786 'digit':248,326,378,680,692,696,743,749,788,804 'displac':484 'dopa':385 'dynam':297 'e.164':167 'emvco':76,547 'en':394 'entir':346,724 'ethnic':487 'exampl':153 'exist':152 'fake':672 'first':377,803 'first-digit':376 'fixtur':673,687 'follow':82,131 'forget':698 'format':135,150,197,252,288,561 'function':179,798 'gap':645 'generat':26 'hardcod':671 'hex':343 'holder':513 'household':440 'hr/kyc':520 'id':3,14,16,37,41,53,101,104,129,141,185,217,324,570,577,581,601,604,768,771,774,776,783 'implement':353 'incl':471,750 'includ':348,729 'indic':289,562 'individu':102,772 'info':303 'initi':457 'involv':11 'itmx':89 'jan':407 'jpg':542,827 'jurist':779 'juristic-person':778 'kbank':611 'key':284 'known':644 'landlin':746,766 'late':426,472 'later':470 'law':481 'layout':81 'lead':751 'length':734 'liter':731 'll':762 'mean':393 'merchant':301 'method':293,564 'minor':488 'mis':764 'mis-valid':763 'mistak':670 'mobil':753 'mod':238,244,709 'nation':13,323,808 'natur':506 'non':133 'non-standard':132 'normal':24,43,109,190 'npx':367 'number':18,46 'offici':84 'option':333 'overview':59 'pad':317 'pars':650 'parse/verify':660 'pass':685 'past':676 'payload':71,209,214,287,347,545,560,606,657,725 'payment':551,656,829 'perman':511 'permanent-resid':510 'person':146,485,499,780 'phone':17,45,54,191,198,251,314,742 'photoshop':627 'poi':292,563 'pre':458 'prefix':352,379,697 'profil':555 'prompt':154 'promptpay':20,55,73,90,121,170,208,282,550,566,639,655,715 'proof':806,830 'prove':149 'python':354,357 'qr':21,74,119,171,213,532,533,536,552,596,629,636,641,652,832,837 'quick':177 'random':678 're':475 're-recognit':474 'real':145 'receiv':575 'recognit':476 'ref':603 'refer':178,580 'registr':412,428 'registri':441,460,469 'resid':483,512 'return':181 'revenu':86 'rule':253 'run':359,370 'scb':615 'scope':717 'self':362,373 'self-test':361,372 'send':568,599 'server':633,841 'share':105 'skill':7 'skill-thai-id-validate' 'slip':531,612,616,651,826 'slipverifi':664 'source-boom-vitt' 'specif':91 'standard':134 'static':295 'status':490 'step':701 'str':196,206,215 'string':681 'strip':255 'sub':305,311 'sub-tag':304,310 'tag':285,306,312,733,740 'tag/length':351 'target':210 'task':10 'tax':15,40,103,128,767,773,782 'temporari':482 'test':363,374 'th':336,392,587 'thai':2,12,35,44,52,85,184,199,216,403,421,436,452,465,507 'thai-id-valid':1 'thailand':502 'thanakan':665 'thb':330 'time':410 'timestamp':588 'tlv':77,80,283,548,558 'topic-agent-skills' 'topic-agentskills' 'topic-claude-code' 'topic-claude-skills' 'topic-i18n' 'topic-line-oa' 'topic-localization' 'topic-pdpa' 'topic-promptpay' 'topic-thai' 'topic-thai-language' 'topic-thai-nlp' 'total':703 'transact':579,602 'trigger':27 'trust':801 'tsx':368 'typescript':364 'uppercas':341 'use':5,94,125,791 'user':30 'valid':4,23,33,183,631,765,799 'validate.py':355,356,358,646 'validate.ts':365,366,369,647 'verif':613,833 'verifi':138,617,839 'vs':769 'whenev':28 'without':831 'x':160 'xxx':204 'xxxx':205 'xxxxxxxxx':195 'yield':711 'กันการปลอมสลิปด้วยการแก้ภาพ':624 'กับ':68,840 'การยืนยัน':594 'กำหนด':386 'ของการโอน':589 'ของธนาคารผู้ออก':842 'ของธนาคารผู้ออกสลิป':609,634 'ของผู้ถือบัตรตามที่กรมการปกครอง':384 'ของผู้สมัคร':523 'ของสลิป':559 'ของเลขบัตรประชาชนไทย':62 'ขึ้นต้น':258 'ค':401,419,434,449 'คนละ':554 'ควรสแกน':640 'ความหมาย':391 'คูณด้วยน้ำหนัก':223 'จัดเป็นสัญชาติไทย':814 'จากเบอร์มือถือหรือเลขบัตรประชาชน':122 'จำนวน':174 'จำนวนเงิน':583 'ชนกลุ่มน้อย':480 'ณ':815 'ตรวจ':95,187 'ตรวจกับเอกสารจริง':818 'ตรวจสอบ':60 'ตรวจเลขบัตร':56,155 'ตั้งแต่':398,416 'ต้องสแกน':836 'ถือว่าเทียบเท่ากัน':263 'ถ้าต้องการ':659 'ถ้าธนาคารตอบกลับว่า':619 'ถ้ารับโอนเงินจริงจัง':835 'ทะเบียนบ้าน':820 'ที่ฝั่ง':632 'ที่อาจถูกตัดต่อ':543 'ที่เกิดในประเทศไทย':494 'ที่เรียก':666 'ธนาคารผู้ออกสลิปได้':668 'นำผลรวม':237 'บนสลิป':597 'บนสลิปลูกค้าก่อนปล่อยของ':642 'บนสลิปแล้วให้แอปธนาคาร':838 'บนสลิปโอนเงิน':534 'บัตรประชาชน':819 'บาท':176 'บุคคลต่างด้าวที่ได้รับสัญชาติไทย':504 'บุคคลที่เข้าเมืองโดยชอบด้วยกฎหมายชั่วคราว':478 'บุตรของบุคคลประเภท':492 'บ่งบอกว่า':812 'บ้าน':273 'ปฏิเสธรับสมัครงานเพราะหลักแรกไม่ใช่':527 'ประเภท':383 'ประเภทหลัก':389 'ปลอมไม่ได้เพราะข้อมูลถูก':630 'ปิดท้าย':593 'ผิดเจตนาและอาจเข้าข่ายเลือกปฏิบัติ':823 'ผู้ค้ารายย่อยที่รับโอน':638 'ผู้พลัดถิ่น':479 'ผู้ใช้ป้อน':111 'พร้อมเพย์':58 'ฟิลด์ทั่วไปที่อยู่ใน':557 'ภาพสลิปปลอมง่ายมาก':834 'ภาพสลิปปลอมทำได้ง่ายมาก':625 'ภาษาไทย':180 'ม':400,418,433,448 'มี':387 'มีชื่อในทะเบียนบ้านก่อน':431 'มีถิ่นที่อยู่ถาวร':505 'มือถือ':264 'ยืนยันสลิปได้จริง':540 'รวมแจ้งเกิดเกินกำหนดและกรณีกลับคืนสัญชาติ':464 'รหัสธนาคารผู้รับ':574 'รหัสธนาคารผู้ส่ง':567 'รหัสเฉพาะที่ธนาคารผู้ส่งออกให้':582 'รองรับเฉพาะการ':653 'ระบบทะเบียน':813 'รูปแบบ':75 'รูปแบบเดียวกับ':549 'ลบ':242 'สกุลเงิน':584 'สร้าง':118,169,212,654 'สลิปจริง':661 'สลิปปลอม':622 'สัญชาติไทย':396,414,430,445,462 'สำหรับ':72 'สำหรับรับเงิน':120 'หมายเหตุ':514 'หรือ':261 'หรือจำนวนเงินไม่ตรง':621 'หลัก':65,99 'หลักตามรหัส':572 'หลักที่':249 'หลักบอก':382 'หลักรวม':266,276 'หลักแรก':222,390,515,809 'หลักแรกของเลข':380 'หลังจาก':254,271 'ห้าม':524 'อย่าเชื่อแค่ตัวเลขในรูป':843 'ออกจาก':605 'อีกครั้ง':246 'เกิดและแจ้งเกิดตามกำหนด':397 'เกิดและแจ้งเกิดเกินกำหนด':415 'เก็บข้อมูลธุรกรรมแทนข้อมูลผู้รับเงิน':556 'เคยใช้กับกรณีพิเศษบางอย่างในอดีต':517 'เครื่องหมายเว้นวรรค':256 'เช่น':278,526,610,663 'เช่นเดียวกับ':565 'เท่านั้น':658 'เบอร์':57,162,172,316 'เบอร์โทร':110 'เป็น':546 'เพราะผิดทั้งกฎหมายแรงงานและไม่ตรงเจตนาของระบบเลขประจำตัว':530 'เพิ่มชื่อช่วงสำรวจ':451 'เพิ่มชื่อเข้าทะเบียนบ้านภายหลัง':463 'เพื่อขอข้อมูลธุรกรรมจริงกลับมาเทียบ':618 'เพื่อเข้าใจ':521 'เพื่อให้ผู้รับเงิน':539 'เมื่อสแกน':595 'เลขบัตรประชาชน':97 'เลขประจำตัวผู้เสียภาษี':63 'เลขหลักแรกของบัตรประชาชน':375 'เลขอ้างอิงธุรกรรม':578 'เวลาออกเลข':816 'เสมอ':821 'เหตุผลที่มี':623 'เอง':637 'เอา':240 'แค่':626 'แต่':628 'แต่พบได้น้อยมากในระบบปัจจุบัน':518 'แต่ระบบเก็บ':116 'แต่เป็น':553 'แทนที่จะเชื่อภาพ':541 'แปลงเบอร์โทรระหว่างรูป':66 'แปลงเป็น':166,193,201 'และสร้าง':70 'และอย่าใช้หลักแรกเป็นเงื่อนไขกรองผู้สมัคร':822 'แล้ว':243,257 'แล้วยิง':607 'แล้วรวมกัน':236 'แอปธนาคารจะดึง':598 'แอปธนาคารไทยยุคใหม่ฝัง':535 'โครงสร้าง':544 'ใช้สำหรับงาน':519 'ใช้หลักแรกเพียงอย่างเดียวเป็นเกณฑ์เลือกปฏิบัติ':525 'ใช้ไลบรารีเฉพาะทาง':662 'ในสกิลนี้':648 'ให้ตัวเลข':220 'ให้ที':168 'ให้หน่อย':161 'ไม่':649 'ไม่พบธุรกรรม':620 'ไม่มีชื่อในทะเบียนบ้านก่อน':446 'ไม่ใช่ดูแค่ภาพ':643 'ไม่ใช่หลักฐานสัญชาติปัจจุบัน':817 'ไม่ใช่ในตัว':635 'ไว้บนสลิปโอนเงินทุกใบ':538","prices":[{"id":"e82346f1-0c61-45e1-894b-8d9008ad7692","listingId":"a3156044-d23f-4048-a486-8d41b90f15d6","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"Boom-Vitt","category":"claude-thai-skills","install_from":"skills.sh"},"createdAt":"2026-05-18T07:06:32.772Z"}],"sources":[{"listingId":"a3156044-d23f-4048-a486-8d41b90f15d6","source":"github","sourceId":"Boom-Vitt/claude-thai-skills/thai-id-validate","sourceUrl":"https://github.com/Boom-Vitt/claude-thai-skills/tree/main/skills/thai-id-validate","isPrimary":false,"firstSeenAt":"2026-05-18T07:06:32.772Z","lastSeenAt":"2026-05-18T19:06:00.990Z"}],"details":{"listingId":"a3156044-d23f-4048-a486-8d41b90f15d6","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"Boom-Vitt","slug":"thai-id-validate","github":{"repo":"Boom-Vitt/claude-thai-skills","stars":17,"topics":["agent-skills","agentskills","claude-code","claude-skills","i18n","line-oa","localization","pdpa","promptpay","thai","thai-language","thai-nlp","thailand"],"license":"mit","html_url":"https://github.com/Boom-Vitt/claude-thai-skills","pushed_at":"2026-05-17T01:16:53Z","description":"ทักษะ Claude Code สำหรับคนไทย — แปล, แคปชั่น, เรซูเม่, จดหมายราชการ, PDPA, ใบกำกับภาษี, PromptPay, เลขบัตร ปชช., วันที่ พ.ศ. — 12 skills","skill_md_sha":"895225f8b47f4cf063d76b25a8944f8144c8a039","skill_md_path":"skills/thai-id-validate/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/Boom-Vitt/claude-thai-skills/tree/main/skills/thai-id-validate"},"layout":"multi","source":"github","category":"claude-thai-skills","frontmatter":{"name":"thai-id-validate","description":"Use this skill for any task involving Thai national ID, tax ID, phone number, or PromptPay QR code validation, normalization, or generation. Trigger whenever the user asks to: validate a Thai citizen ID, check a tax ID checksum, normalize Thai phone numbers between +66 and 0X formats, or build a PromptPay QR payload. Also trigger for requests like \"ตรวจเลขบัตรประชาชน\", \"เช็คเลขผู้เสียภาษี\", \"แปลงเบอร์โทร +66\", \"สร้าง PromptPay QR\", \"ทำคิวอาร์พร้อมเพย์\", or any variation involving 13-digit Thai IDs or Thai phone formats."},"skills_sh_url":"https://skills.sh/Boom-Vitt/claude-thai-skills/thai-id-validate"},"updatedAt":"2026-05-18T19:06:00.990Z"}}