Thai Address (แยก/ตรวจที่อยู่ไทย)
Overview
แยกที่อยู่ไทย (บ้านเลขที่ หมู่ ซอย ถนน ตำบล/แขวง อำเภอ/เขต จังหวัด รหัสไปรษณีย์) เป็น structured dict, ตรวจ postcode 5 หลัก, ดูจังหวัดจาก 2 หลักแรกของ postcode, และ map ระหว่างชื่อไทย/อังกฤษของ 77 จังหวัด. รองรับชื่อถนนหลายคำ (เช่น ถนนพระราม 9, ถนนเลียบทางด่วน) และฟิลด์คอนโด/อพาร์ตเมนต์ (อาคาร, ชั้น, ห้อง) ด้วย.
When to use
- Parse ที่อยู่จากฟอร์ม, e-commerce, PDF
- ตรวจรหัสไปรษณีย์ก่อน submit
- แปลที่อยู่ไทย → English transliteration สำหรับฉลากพัสดุระหว่างประเทศ
- DO NOT use as a delivery-routing source of truth — postcode prefixes are many-to-one (Bangkok metro area shares prefix 10). For exact sub-district resolution, use a Thailand Post sub-district database.
Example prompts
- "แยกที่อยู่นี้ให้หน่อย: 123/45 ซอยสุขุมวิท 21 ถนนสุขุมวิท แขวงคลองเตยเหนือ เขตวัฒนา กรุงเทพ 10110"
- "รหัส 50200 อยู่จังหวัดอะไร"
Field ordering (สำคัญ!)
Thai postal addresses go small-to-large — the reverse of English convention. Always order fields like this on a shipping label:
[อาคาร → ชั้น → ห้อง →] บ้านเลขที่ → หมู่ → ซอย → ถนน → ตำบล/แขวง → อำเภอ/เขต → จังหวัด → รหัสไปรษณีย์
Example (house):
123/45 ซอยสุขุมวิท 21 ถนนสุขุมวิท
แขวงคลองเตยเหนือ เขตวัฒนา
กรุงเทพมหานคร 10110
Example (condo / apartment):
อาคารชาญอิสสระ ชั้น 12 ห้อง 1203
99 ถนนพระราม 4
แขวงสีลม เขตบางรัก
กรุงเทพมหานคร 10500
Bangkok vs provincial vocabulary
| Concept | Bangkok | Province | English |
|---|---|---|---|
| Sub-district | แขวง | ตำบล (ต.) | Sub-district / Tambon / Khwaeng |
| District | เขต | อำเภอ (อ.) | District / Amphoe / Khet |
| Province | กรุงเทพมหานคร | จังหวัด (จ.) | Bangkok / Province / Changwat |
Never mix these. A Bangkok address must use แขวง/เขต; a provincial address must use ตำบล/อำเภอ. Mixing them is a strong "this address is wrong" signal.
Transliteration cheatsheet
| Thai | English / Roman |
|---|---|
| บ้านเลขที่ / เลขที่ | No. |
| หมู่ที่ / หมู่ / ม. | Moo / Mu |
| ซอย / ซ. | Soi |
| ถนน / ถ. | Road / Rd. |
| อาคาร / ตึก / คอนโด | Building / Block / Condo |
| ชั้น | Floor / Fl. |
| ห้อง | Unit / Room |
| ตำบล / ต. | Sub-district / Tambon |
| อำเภอ / อ. | District / Amphoe |
| แขวง | Sub-district / Khwaeng |
| เขต | District / Khet |
| จังหวัด / จ. | Province / Changwat |
| รหัสไปรษณีย์ | Postcode |
Quick reference
| Function | Returns |
|---|---|
parse_address(s) | dict with 11 keys (any may be None) |
validate_postcode(pc) | bool |
province_from_postcode(pc) | Thai province name or None |
parse_address return keys
house_no, moo, soi, road, building, floor, unit, subdistrict, district, province, postcode. Each is a str or None. building covers อาคาร / ตึก / คอนโด.
Multi-token road names are captured up to the next address keyword, so
ถนนพระราม 9 แขวงห้วยขวาง … yields road = "พระราม 9". Thai numerals
(๐-๙) and compound names (ถนนเลียบทางด่วน, ถนนสาทรเหนือ) are supported.
Postcode prefix map (selected)
| Prefix | Region |
|---|---|
| 10 | กรุงเทพมหานคร & ปริมณฑล (sub-districts of Samut Prakan also fall here) |
| 11 | นนทบุรี |
| 12 | ปทุมธานี |
| 20–27 | ภาคตะวันออก |
| 30–49 | ภาคอีสาน |
| 50–58 | ภาคเหนือ |
| 60–67 | ภาคเหนือตอนล่าง |
| 70–77 | ภาคกลาง/ตะวันตก |
| 80–86 | ภาคใต้ตอนบน |
| 90–96 | ภาคใต้ตอนล่าง |
Full 77-province table: provinces.json.
Implementation
- Python:
parse.py—python parse.pyruns self-tests - TypeScript:
parse.ts—npx tsx parse.tsruns self-tests
Common mistakes
- Field reversal. Writing
Bangkok 10110 Wattana Khwaeng…in English order on a Thai-side label confuses postmen. Always small-to-large in Thai. - Mixing แขวง with อำเภอ. Bangkok = แขวง/เขต. Everywhere else = ตำบล/อำเภอ. Never mix.
- Trusting postcode prefix alone. Prefix 10 spans Bangkok, Samut Prakan, parts of Nonthaburi and Pathum Thani. Use the full 5-digit code for routing.
- Dropping leading zeros from house numbers.
123/4and123/04may differ; preserve as the user wrote them. - Soi naming. Soi names are often the same as the parent road (
ซอยสุขุมวิท 21is offถนนสุขุมวิท). Don't merge them or you'll lose the sub-numbering.