| name | thai-address |
| description | Use this skill for any task involving Thai postal address parsing, validation, formatting, or province/postcode lookup. Trigger whenever the user asks to: parse a Thai address into fields, validate a 5-digit Thai postcode, look up a province from its postcode, or format an address for a shipping label. Also trigger for requests like "āđāļĒāļāļāļĩāđāļāļĒāļđāđāđāļāļĒ", "āļāļĢāļ§āļāļĢāļŦāļąāļŠāđāļāļĢāļĐāļāļĩāļĒāđ", "āđāļāļĨāļāļĩāđāļāļĒāļđāđāđāļāđāļāļ āļēāļĐāļēāļāļąāļāļāļĪāļĐ", "āļāļĩāđāļāļĒāļđāđāļāļąāļāļŠāđāļ", or any variation involving Thai addresses with āļāļģāļāļĨ/āđāļāļ§āļ/āļāļģāđāļ āļ/āđāļāļ/āļāļąāļāļŦāļ§āļąāļ. |
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.py runs self-tests
- TypeScript:
parse.ts â npx tsx parse.ts runs 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/4 and 123/04 may differ; preserve as the user wrote them.
- Soi naming. Soi names are often the same as the parent road (
āļāļāļĒāļŠāļļāļāļļāļĄāļ§āļīāļ 21 is off āļāļāļāļŠāļļāļāļļāļĄāļ§āļīāļ). Don't merge them or you'll lose the sub-numbering.