vehicles 0.4.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +164 -0
  3. data/CHANGELOG.md +321 -0
  4. data/README.md +88 -15
  5. data/data/PROVENANCE-vehicles.md +12 -0
  6. data/data/plates/PROVENANCE.md +10 -0
  7. data/data/plates/_decode/at-districts.yml +287 -0
  8. data/data/plates/_decode/ch-cantons.yml +110 -0
  9. data/data/plates/_decode/cn-issuing-offices.yml +463 -0
  10. data/data/plates/_decode/cn-provinces.yml +614 -0
  11. data/data/plates/_decode/cz-kraj.yml +159 -0
  12. data/data/plates/_decode/dk-serial-blocks.yml +327 -0
  13. data/data/plates/_decode/es-provinces.yml +116 -0
  14. data/data/plates/_decode/fr-departements.yml +191 -0
  15. data/data/plates/_decode/gb-age-identifiers.yml +170 -0
  16. data/data/plates/_decode/gb-memory-tags.yml +202 -0
  17. data/data/plates/_decode/gr-prefectures.yml +1408 -0
  18. data/data/plates/_decode/hr-cities.yml +315 -0
  19. data/data/plates/_decode/ie-counties.yml +227 -0
  20. data/data/plates/_decode/in-state-codes.yml +169 -0
  21. data/data/plates/_decode/is-districts-1938.yml +116 -0
  22. data/data/plates/_decode/it-provinces.yml +348 -0
  23. data/data/plates/_decode/jp-office-marks.yml +960 -0
  24. data/data/plates/_decode/jp-use-marks.yml +205 -0
  25. data/data/plates/_decode/kr-authority-marks.yml +146 -0
  26. data/data/plates/_decode/kr-use-syllables.yml +194 -0
  27. data/data/plates/_decode/lu-series-order.yml +638 -0
  28. data/data/plates/_decode/mx-entity-series.yml +380 -0
  29. data/data/plates/_decode/my-index-marks.yml +271 -0
  30. data/data/plates/_decode/no-counties-1913.yml +148 -0
  31. data/data/plates/_decode/no-districts.yml +901 -0
  32. data/data/plates/_decode/pl-powiats.yml +567 -0
  33. data/data/plates/_decode/pt-trailer-services.yml +96 -0
  34. data/data/plates/_decode/ro-counties.yml +213 -0
  35. data/data/plates/_decode/se-diplomatic.yml +220 -0
  36. data/data/plates/_decode/si-regions.yml +123 -0
  37. data/data/plates/_decode/sk-districts.yml +314 -0
  38. data/data/plates/_decode/th-registration-elements.yml +208 -0
  39. data/data/plates/_decode/ua-regions.yml +393 -0
  40. data/data/plates/_decode/za-licence-marks.yml +215 -0
  41. data/data/plates/_meta/classes.yml +26 -0
  42. data/data/plates/_meta/separators.yml +102 -0
  43. data/data/plates/ad.yml +961 -0
  44. data/data/plates/ar.yml +762 -0
  45. data/data/plates/at.yml +1424 -0
  46. data/data/plates/au-act.yml +472 -0
  47. data/data/plates/au-nsw.yml +282 -0
  48. data/data/plates/au-nt.yml +431 -0
  49. data/data/plates/au-qld.yml +272 -0
  50. data/data/plates/au-sa.yml +248 -0
  51. data/data/plates/au-tas.yml +302 -0
  52. data/data/plates/au-vic.yml +215 -0
  53. data/data/plates/au-wa.yml +309 -0
  54. data/data/plates/be.yml +1840 -0
  55. data/data/plates/br.yml +1152 -0
  56. data/data/plates/ca-ab.yml +430 -0
  57. data/data/plates/ca-bc.yml +697 -0
  58. data/data/plates/ca-mb.yml +499 -0
  59. data/data/plates/ca-nb.yml +537 -0
  60. data/data/plates/ca-nl.yml +743 -0
  61. data/data/plates/ca-ns.yml +808 -0
  62. data/data/plates/ca-nt.yml +610 -0
  63. data/data/plates/ca-nu.yml +280 -0
  64. data/data/plates/ca-on.yml +881 -0
  65. data/data/plates/ca-pe.yml +592 -0
  66. data/data/plates/ca-qc.yml +1036 -0
  67. data/data/plates/ca-sk.yml +256 -0
  68. data/data/plates/ca-yt.yml +656 -0
  69. data/data/plates/ch.yml +1273 -0
  70. data/data/plates/cn.yml +1431 -0
  71. data/data/plates/cy.yml +688 -0
  72. data/data/plates/cz.yml +1179 -0
  73. data/data/plates/de.yml +1107 -0
  74. data/data/plates/dk.yml +1647 -0
  75. data/data/plates/ee.yml +1275 -0
  76. data/data/plates/es.yml +888 -0
  77. data/data/plates/fi.yml +1271 -0
  78. data/data/plates/fr.yml +1265 -0
  79. data/data/plates/gb.yml +1188 -0
  80. data/data/plates/gr.yml +721 -0
  81. data/data/plates/hr.yml +860 -0
  82. data/data/plates/hu.yml +959 -0
  83. data/data/plates/ie.yml +775 -0
  84. data/data/plates/in.yml +1172 -0
  85. data/data/plates/is.yml +667 -0
  86. data/data/plates/it.yml +1317 -0
  87. data/data/plates/jp.yml +3650 -0
  88. data/data/plates/kr.yml +1375 -0
  89. data/data/plates/li.yml +1010 -0
  90. data/data/plates/lt.yml +879 -0
  91. data/data/plates/lu.yml +842 -0
  92. data/data/plates/lv.yml +924 -0
  93. data/data/plates/mc.yml +1024 -0
  94. data/data/plates/mt.yml +854 -0
  95. data/data/plates/mx.yml +1372 -0
  96. data/data/plates/my.yml +685 -0
  97. data/data/plates/nl.yml +1016 -0
  98. data/data/plates/no.yml +1018 -0
  99. data/data/plates/nz.yml +1699 -0
  100. data/data/plates/pl.yml +1296 -0
  101. data/data/plates/pt.yml +847 -0
  102. data/data/plates/ro.yml +785 -0
  103. data/data/plates/se.yml +1091 -0
  104. data/data/plates/si.yml +1105 -0
  105. data/data/plates/sk.yml +1439 -0
  106. data/data/plates/sm.yml +1119 -0
  107. data/data/plates/th.yml +1150 -0
  108. data/data/plates/ua.yml +1672 -0
  109. data/data/plates/us-ak.yml +763 -0
  110. data/data/plates/us-al.yml +457 -0
  111. data/data/plates/us-ar.yml +427 -0
  112. data/data/plates/us-as.yml +454 -0
  113. data/data/plates/us-az.yml +430 -0
  114. data/data/plates/us-ca.yml +892 -0
  115. data/data/plates/us-co.yml +452 -0
  116. data/data/plates/us-ct.yml +427 -0
  117. data/data/plates/us-dc.yml +614 -0
  118. data/data/plates/us-de.yml +551 -0
  119. data/data/plates/us-fl.yml +741 -0
  120. data/data/plates/us-ga.yml +644 -0
  121. data/data/plates/us-gu.yml +658 -0
  122. data/data/plates/us-hi.yml +585 -0
  123. data/data/plates/us-ia.yml +438 -0
  124. data/data/plates/us-id.yml +531 -0
  125. data/data/plates/us-il.yml +516 -0
  126. data/data/plates/us-in.yml +324 -0
  127. data/data/plates/us-ks.yml +351 -0
  128. data/data/plates/us-ky.yml +770 -0
  129. data/data/plates/us-la.yml +568 -0
  130. data/data/plates/us-ma.yml +379 -0
  131. data/data/plates/us-md.yml +536 -0
  132. data/data/plates/us-me.yml +445 -0
  133. data/data/plates/us-mi.yml +408 -0
  134. data/data/plates/us-mn.yml +411 -0
  135. data/data/plates/us-mo.yml +356 -0
  136. data/data/plates/us-mp.yml +402 -0
  137. data/data/plates/us-ms.yml +432 -0
  138. data/data/plates/us-mt.yml +619 -0
  139. data/data/plates/us-nc.yml +602 -0
  140. data/data/plates/us-nd.yml +419 -0
  141. data/data/plates/us-ne.yml +483 -0
  142. data/data/plates/us-nh.yml +394 -0
  143. data/data/plates/us-nj.yml +547 -0
  144. data/data/plates/us-nm.yml +574 -0
  145. data/data/plates/us-nv.yml +655 -0
  146. data/data/plates/us-ny.yml +592 -0
  147. data/data/plates/us-oh.yml +404 -0
  148. data/data/plates/us-ok.yml +513 -0
  149. data/data/plates/us-or.yml +392 -0
  150. data/data/plates/us-pa.yml +506 -0
  151. data/data/plates/us-pr.yml +507 -0
  152. data/data/plates/us-ri.yml +445 -0
  153. data/data/plates/us-sc.yml +605 -0
  154. data/data/plates/us-sd.yml +428 -0
  155. data/data/plates/us-tn.yml +471 -0
  156. data/data/plates/us-tx.yml +535 -0
  157. data/data/plates/us-ut.yml +384 -0
  158. data/data/plates/us-va.yml +567 -0
  159. data/data/plates/us-vi.yml +489 -0
  160. data/data/plates/us-vt.yml +458 -0
  161. data/data/plates/us-wa.yml +484 -0
  162. data/data/plates/us-wi.yml +509 -0
  163. data/data/plates/us-wv.yml +446 -0
  164. data/data/plates/us-wy.yml +523 -0
  165. data/data/plates/va.yml +604 -0
  166. data/data/plates/za.yml +1141 -0
  167. data/data/vehicles.json +160653 -105090
  168. data/lib/vehicles/configuration.rb +18 -2
  169. data/lib/vehicles/dataset.rb +73 -18
  170. data/lib/vehicles/fuzzy.rb +115 -0
  171. data/lib/vehicles/http.rb +48 -0
  172. data/lib/vehicles/make.rb +36 -6
  173. data/lib/vehicles/mcp_server.rb +5 -5
  174. data/lib/vehicles/model.rb +42 -6
  175. data/lib/vehicles/plates/jurisdiction.rb +32 -0
  176. data/lib/vehicles/plates/series.rb +291 -0
  177. data/lib/vehicles/plates/template_fill.rb +188 -0
  178. data/lib/vehicles/plates/templates.rb +162 -0
  179. data/lib/vehicles/plates.rb +122 -0
  180. data/lib/vehicles/providers/hosted_provider.rb +49 -58
  181. data/lib/vehicles/providers/local_provider.rb +4 -3
  182. data/lib/vehicles/validators/vehicle_make_validator.rb +3 -1
  183. data/lib/vehicles/validators/vehicle_model_validator.rb +1 -1
  184. data/lib/vehicles/version.rb +1 -1
  185. data/lib/vehicles.rb +53 -16
  186. data/rakelib/data_refresh.rake +109 -0
  187. data/rakelib/plates_refresh.rake +29 -0
  188. data/sig/vehicles.rbs +18 -0
  189. metadata +174 -2
@@ -0,0 +1,1150 @@
1
+ # plates/th.yml — Thailand (PRD-PLATES gate L3). DRAFT for verification.
2
+ #
3
+ # EVERY size, layout, colour and class claim about the MOTOR-VEHICLE-ACT plates
4
+ # in this file comes from one instrument, read verbatim from the Royal Gazette
5
+ # PDF: กฎกระทรวง กำหนดขนาด ลักษณะ และสีของแผ่นป้ายทะเบียนรถ และการแสดงแผ่นป้าย
6
+ # ทะเบียนรถและเครื่องหมายแสดงการเสียภาษีประจำปี พ.ศ. ๒๕๕๔ ("Ministerial
7
+ # Regulation prescribing the size, characteristics and colour of vehicle
8
+ # registration plates and the display of registration plates and the annual tax
9
+ # mark, B.E. 2554"), ราชกิจจานุเบกษา เล่ม ๑๒๘ ตอนที่ ๔๕ ก หน้า ๖ (Royal Gazette
10
+ # vol. 128, part 45 Kor, p. 6), 8 June 2011, given 30 May 2011 by the Deputy
11
+ # Minister of Transport acting for the Minister.
12
+ #
13
+ # EVERY claim about the COMMERCIAL (Land Transport Act) plates comes from
14
+ # ประกาศกรมการขนส่งทางบก เรื่อง กำหนดลักษณะ ขนาด สีของแผ่นป้ายเลขทะเบียนรถ
15
+ # และการแสดงแผ่นป้ายและเครื่องหมายแสดงการเสียภาษี พ.ศ. ๒๕๕๔ (DLT Announcement,
16
+ # made 10 March 2011), ราชกิจจานุเบกษา เล่ม ๑๒๘ ตอนพิเศษ ๔๔ ง หน้า ๕๒,
17
+ # 19 April 2011, made under s. 90 of the Land Transport Act B.E. 2522.
18
+ #
19
+ # ---------------------------------------------------------------------------
20
+ # SIX STRUCTURAL FACTS THAT SHAPE THIS FILE
21
+ # ---------------------------------------------------------------------------
22
+ #
23
+ # 1. THAILAND RUNS TWO PARALLEL REGISTRATION SYSTEMS UNDER TWO ACTS, AND THEY
24
+ # HAVE DIFFERENT PLATES. พระราชบัญญัติรถยนต์ พ.ศ. ๒๕๒๒ (Motor Vehicle Act
25
+ # B.E. 2522, given 8 May 1979) governs private cars, pickups, motorcycles,
26
+ # taxis, tuk-tuks and tractors; พระราชบัญญัติการขนส่งทางบก พ.ศ. ๒๕๒๒ (Land
27
+ # Transport Act B.E. 2522) governs licensed public and private TRANSPORT
28
+ # operators — buses and heavy trucks. The Motor-Vehicle-Act plate is a
29
+ # Thai-script plate (two category letters + up to four Arabic digits +
30
+ # the province name spelled out). The Land-Transport-Act plate is an
31
+ # ALL-NUMERIC plate reading "THAILAND" + a province code over a two-digit
32
+ # vehicle-type code, a dash and a four-digit serial. The two systems do not
33
+ # share a serial space, a colour scheme, a size or an authority page, and
34
+ # this file models them as two blocks of series.
35
+ #
36
+ # 2. THE SERIAL IS PARTLY IN THAI SCRIPT, WHICH IS A GENUINE COLLISION WITH
37
+ # PRD-PLATES §2.6. The separator contract fixes the dataset-wide serial
38
+ # alphabet at A-Z0-9 "and nothing else", and says in terms that a
39
+ # jurisdiction printing a glyph inside the serial "is a schema amendment,
40
+ # not a data entry". Thailand is that jurisdiction. The line taken here,
41
+ # and it is taken deliberately and identically on every affected series:
42
+ #
43
+ # * `format.pattern` and `format.regex` describe ONLY the Arabic-numeral
44
+ # block the plate prints — which is what §2.6 permits us to spell — and
45
+ # every such series therefore carries `matching: recall-only`, because a
46
+ # bare digit regex is deliberately wider than the mark it belongs to.
47
+ # * `format.fields` (the PRD §2.2 Japan extension point) carries the WHOLE
48
+ # composition, field by field, each with its script and its source.
49
+ # * `format.regex_native` carries the full Unicode-aware regex. It is NOT
50
+ # one of the three lint-checked regex keys (`regex`, `regex_strict`,
51
+ # `regex_statutory`), so the lint ignores it and nothing is lost while
52
+ # the schema amendment is pending. See the dossier §7 for the proposed
53
+ # amendment (a `scripts:` block in _meta/separators.yml).
54
+ # * The Land-Transport-Act series are UNAFFECTED — their serial really is
55
+ # all-Arabic — so they carry ordinary `matching: strict` regexes with
56
+ # sourced `regex_strict` twins. They are the two best-evidenced regexes
57
+ # in this file and the reason it is worth having at all.
58
+ #
59
+ # 3. THE CATEGORY-LETTER ALPHABET IS DELEGATED AND UNPINNED — the German
60
+ # Bundesanzeiger pattern, arriving in Thailand by a different route.
61
+ # ข้อ ๓ (๑) (ก) ๕) of the 2554 regulation, verbatim: "การใช้ตัวเลขนำหน้า
62
+ # ตัวอักษรประจำหมวด ตัวอักษรประจำหมวด และหมายเลขทะเบียน ให้เป็นไปตามที่
63
+ # อธิบดีประกาศกำหนด" — "the use of the numeral preceding the category
64
+ # letters, the category letters, and the registration number shall be as the
65
+ # Director-General publicly prescribes". WHICH Thai consonants may be a
66
+ # category letter is therefore an administrative allocation by the DLT
67
+ # Director-General and is in NO ministerial regulation. No such announcement
68
+ # was secured in this pass; the alphabet is a recorded GAP and no letter list
69
+ # is asserted anywhere in this file.
70
+ # What the regulation DOES give is a partial, primary letter list by a side
71
+ # door: ข้อ ๓ (๑) (ก) ๔) fixes minimum character heights and widths "เว้นแต่
72
+ # กรณีตัวอักษร ข ง ช ซ ฌ ญ ฎ ฏ ฐ ฒ ณ ป ฝ ฟ ศ ษ ส ฬ ฮ สระ วรรณยุกต์ และ
73
+ # หมายเลข ๑" — nineteen named consonants, plus vowels and tone marks, whose
74
+ # metrics the Director-General sets instead. Those nineteen letters
75
+ # demonstrably appear on plates; that is a fact of primary law and it is
76
+ # recorded in `charset_defaults`, but it is NOT the alphabet.
77
+ #
78
+ # 4. THE LEADING DIGIT IS A SOURCED EXHAUSTION RULE, NOT A SEPARATE FORMAT.
79
+ # ข้อ ๓ (๑) (ก) ๓), verbatim: "ในกรณีที่ใช้ตัวอักษรประจำหมวดตัวที่หนึ่งและ
80
+ # ตัวที่สองจนครบทุกตัวอักษรแล้ว ในบรรทัดที่หนึ่งให้เพิ่มตัวเลขอารบิคตั้งแต่
81
+ # ๑ ถึง ๙ ตามลำดับ ไว้ด้านหน้าของตัวอักษรประจำหมวดตัวที่หนึ่ง" — "where the
82
+ # first and second category letters have been used through every letter, an
83
+ # Arabic numeral from 1 to 9 shall be added in order, in the first line, in
84
+ # front of the first category letter." It is the same series continuing, so
85
+ # it is modelled as `format.fields` + `progression`, not as a second series.
86
+ # (For MOTORCYCLES the leading numeral is part of the base composition:
87
+ # ข้อ ๓ (๑) (ข) ๒) puts it in line 1 without an exhaustion condition.)
88
+ #
89
+ # 5. THE PROVINCE IS SPELLED OUT, NOT CODED — so Thailand has no province
90
+ # letter-code table to decode. ข้อ ๓ (๑) (ก) ๒): line two is "ตัวอักษรแสดง
91
+ # ชื่อกรุงเทพมหานครหรือจังหวัดที่จดทะเบียน เว้นแต่กรณีจดทะเบียนที่อำเภอเบตง
92
+ # จังหวัดยะลา ให้ใช้คำว่า เบตง" — the letters showing the name of Bangkok or
93
+ # of the province of registration, EXCEPT for registration at Betong
94
+ # District, Yala Province, where the word "เบตง" (Betong) is used. Betong is
95
+ # the only sub-provincial registration place in Thai plate law and it is in
96
+ # the regulation itself. The COMMERCIAL plate is the one that carries a
97
+ # numeric province code, and that code list is delegated (see
98
+ # plates/_decode/th-registration-elements.yml).
99
+ #
100
+ # 6. NO COLOUR IN THIS FILE IS NUMBERED BY THE AUTHORITY. The regulation names
101
+ # colours — สีขาวสะท้อนแสง (retroreflective white), สีเหลืองสะท้อนแสง
102
+ # (yellow), สีเขียวสะท้อนแสง (green), สีส้มสะท้อนแสง (orange),
103
+ # สีฟ้าสะท้อนแสง (light blue), สีเทาสะท้อนแสง (grey), and the character
104
+ # colours ดำ / แดง / เขียว / น้ำเงิน / ขาว — and never gives a chromaticity,
105
+ # a Pantone or a hex. Every hex here is therefore `hex_basis: observed`
106
+ # inside a statutorily NAMED colour, the same posture plates/gb.yml takes.
107
+ #
108
+ # TRANSLATION NOTE: Thai quotations are given in the original throughout;
109
+ # English renderings in comments and notes are this researcher's working
110
+ # translations and are not official.
111
+ jurisdiction: th
112
+ authority:
113
+ name: กรมการขนส่งทางบก (Department of Land Transport, DLT), Ministry of Transport
114
+ url: "https://www.dlt.go.th"
115
+ binding: vehicle
116
+ binding_note: >-
117
+ ข้อ ๓ of the 2554 regulation opens "แผ่นป้ายทะเบียนรถที่นายทะเบียนออกให้ซึ่งมี
118
+ หมายเลขตรงกับใบคู่มือจดทะเบียนรถ" — the plate the registrar issues bears the
119
+ number that MATCHES THE VEHICLE'S REGISTRATION HANDBOOK (ใบคู่มือจดทะเบียนรถ).
120
+ The mark is a property of the registered vehicle, not of the keeper. The one
121
+ qualification is the auction regime: a number bought at auction under
122
+ s. 10/1 is bought FOR a vehicle the successful bidder registers.
123
+
124
+ instrument:
125
+ motor_vehicle_act:
126
+ citation: "พระราชบัญญัติรถยนต์ พ.ศ. ๒๕๒๒ (Motor Vehicle Act B.E. 2522), given 8 May B.E. 2522 (1979), consolidated by the Office of the Council of State"
127
+ key_sections:
128
+ - "มาตรา ๕ (๔) — the rule-making power under which the plate regulation is made (as amended by the Motor Vehicle Act (No. 10) B.E. 2542)"
129
+ - "มาตรา ๑๑, verbatim: 'รถที่จดทะเบียนแล้ว ต้องมีและแสดงแผ่นป้ายและเครื่องหมายครบถ้วนถูกต้องตามที่กำหนดในกฎกระทรวง' — a registered vehicle must carry and display the plate and the mark completely and correctly as prescribed in the ministerial regulation"
130
+ - "มาตรา ๑๐/๑ — the Director-General must put desirable/popular registration numbers to general auction (inserted by the Motor Vehicle Act (No. 12) B.E. 2546)"
131
+ - "มาตรา ๒๗ — the dealer/repairer licence, and with it 'ให้นายทะเบียนออกเครื่องหมายพิเศษและสมุดคู่มือประจำรถให้ด้วย' (the registrar shall also issue a SPECIAL MARK and a vehicle handbook), driveable 'ระหว่างพระอาทิตย์ขึ้นถึงพระอาทิตย์ตก' (between sunrise and sunset) unless the registrar permits otherwise; the form of the special mark is left to a ministerial regulation"
132
+ - "มาตรา ๖/๑ วรรคสาม — test-vehicle permission and its mark (inserted by the Motor Vehicle Act (No. 17) B.E. 2557)"
133
+ - "มาตรา ๖๐ — the general penalty for the plate offences: a fine not exceeding two thousand baht"
134
+ source: "https://web.archive.org/web/20110203044221/http://web.krisdika.go.th/data/law/law2/%C301/%C301-20-9999-update.pdf # Office of the Council of State consolidation of the Motor Vehicle Act B.E. 2522; ss. 5, 6/1, 10/1, 11, 27, 60 read from the PDF text layer (the live krisdika host refused the connection on 2026-08-02; the Internet Archive copy was used)"
135
+ plate_regulation_2554:
136
+ citation: "กฎกระทรวง กำหนดขนาด ลักษณะ และสีของแผ่นป้ายทะเบียนรถ และการแสดงแผ่นป้ายทะเบียนรถและเครื่องหมายแสดงการเสียภาษีประจำปี พ.ศ. ๒๕๕๔"
137
+ given: "2011-05-30"
138
+ published: "2011-06-08" # ราชกิจจานุเบกษา เล่ม ๑๒๘ ตอนที่ ๔๕ ก หน้า ๖
139
+ entry_into_force: >-
140
+ ข้อ ๑, verbatim: "กฎกระทรวงนี้ให้ใช้บังคับเมื่อพ้นกำหนดหนึ่งร้อยแปดสิบวัน
141
+ นับแต่วันประกาศในราชกิจจานุเบกษาเป็นต้นไป" — in force on the expiry of
142
+ 180 days from publication in the Royal Gazette. Counted from 8 June 2011
143
+ that falls in the first week of DECEMBER 2011. The regulation states no
144
+ calendar date; the arithmetic is recorded, the day is not asserted.
145
+ revokes:
146
+ - "กฎกระทรวงกำหนดลักษณะ ขนาด และสีของแผ่นป้ายทะเบียนรถ พ.ศ. ๒๕๔๗"
147
+ - "กฎกระทรวงกำหนดลักษณะ ขนาด และสีของแผ่นป้ายทะเบียนรถ (ฉบับที่ ๒) พ.ศ. ๒๕๕๐"
148
+ reason: >-
149
+ หมายเหตุ, verbatim: "โดยที่แผ่นป้ายทะเบียนรถตามขนาด ลักษณะ และสีที่กำหนด
150
+ ในปัจจุบันไม่สามารถรองรับการจดทะเบียนรถยนต์ที่เพิ่มจำนวนมากขึ้นได้ และมี
151
+ ลักษณะที่ยากต่อการตรวจสอบ" — the existing size, characteristics and colour
152
+ cannot absorb the growing number of registrations and are hard to inspect.
153
+ This is the reason the leading numeral of ข้อ ๓ (๑) (ก) ๓) exists.
154
+ signed_by: "สุชาติ โชคชัยรัตนากร, รัฐมนตรีช่วยว่าการกระทรวงคมนาคม ปฏิบัติราชการแทนรัฐมนตรีว่าการกระทรวงคมนาคม"
155
+ source: "https://web.archive.org/web/20171113165614/http://www.ratchakitcha.soc.go.th/DATA/PDF/2554/A/045/6.PDF # the whole instrument: ข้อ ๑ entry into force, ข้อ ๒ revocations, ข้อ ๓ (๑) sizes and layouts (ก)-(ง), ข้อ ๓ (๒) colours (ก)-(ซ), ข้อ ๔ picture backgrounds, ข้อ ๕ front/rear display, ข้อ ๖-๑๑ transitionals, หมายเหตุ. The live ratchakitcha host returned HTTP 403 on 2026-08-02; the Internet Archive copy was used"
156
+ commercial_announcement_2554:
157
+ citation: "ประกาศกรมการขนส่งทางบก เรื่อง กำหนดลักษณะ ขนาด สีของแผ่นป้ายเลขทะเบียนรถ และการแสดงแผ่นป้ายและเครื่องหมายแสดงการเสียภาษี พ.ศ. ๒๕๕๔"
158
+ made: "2011-03-10"
159
+ published: "2011-04-19" # ราชกิจจานุเบกษา เล่ม ๑๒๘ ตอนพิเศษ ๔๔ ง หน้า ๕๒
160
+ enabling: "มาตรา ๙๐ แห่งพระราชบัญญัติการขนส่งทางบก พ.ศ. ๒๕๒๒ (s. 90 Land Transport Act B.E. 2522), and giving effect to the Greater Mekong Subregion Cross-Border Transport Agreement"
161
+ entry_into_force: 'ข้อ ๕: "ประกาศนี้ให้ใช้บังคับตั้งแต่บัดนี้เป็นต้นไป" — in force from now on'
162
+ revokes: "ประกาศกรมการขนส่งทางบก เรื่อง กำหนดลักษณะ ขนาด สีของแผ่นป้ายเลขทะเบียนสำหรับรถ และการแสดงแผ่นป้ายและเครื่องหมายแสดงการเสียภาษี ลงวันที่ ๑๓ กันยายน ๒๕๔๙ (13 September 2006)"
163
+ reason: >-
164
+ The preamble states the operative cause in one sentence: the vehicle-type
165
+ codes for NON-SCHEDULED TRUCK transport prescribed by the 2549 (2006)
166
+ announcement "ได้ใช้สำหรับจดทะเบียนรถใกล้จะหมดลง" — were nearly used up —
167
+ so a further code band had to be prescribed. That is why the
168
+ non-scheduled-truck band in ข้อ ๒ (๓) (จ) reads "๖๐ ถึง ๖๙ และ ๗๐ ถึง ๗๙".
169
+ signed_by: "เทียนโชติ จงพีร์เพียร, อธิบดีกรมการขนส่งทางบก (Director-General, DLT)"
170
+ source: "https://web.archive.org/web/20160304073451/http://www.ratchakitcha.soc.go.th/DATA/PDF/2554/E/044/52.PDF # ข้อ ๑ revocation, ข้อ ๒ (๑)-(๓) size/colour/lines/metrics and the six vehicle-type code bands, ข้อ ๓ display, ข้อ ๔ transitional from the 14 April B.E. 2530 announcement, ข้อ ๕ entry into force"
171
+ auction_regulation_2546:
172
+ citation: "กฎกระทรวง กำหนดหมายเลขทะเบียนซึ่งเป็นที่ต้องการหรือเป็นที่นิยม เพื่อนำออกเปิดประมูลเป็นการทั่วไป พ.ศ. ๒๕๔๖"
173
+ given: "2003-08-07"
174
+ published: "2003-08-08" # ราชกิจจานุเบกษา เล่ม ๑๒๐ ตอนที่ ๗๕ ก
175
+ enabling: "มาตรา ๕ (๑๘) และมาตรา ๑๐/๑ วรรคหนึ่ง แห่งพระราชบัญญัติรถยนต์ พ.ศ. ๒๕๒๒ (s. 10/1 inserted by the Motor Vehicle Act (No. 12) B.E. 2546)"
176
+ scope: >-
177
+ ข้อ ๑ applies the auction regime to the registration numbers of the
178
+ category letters issued to รถยนต์นั่งส่วนบุคคลไม่เกินเจ็ดคน (private cars
179
+ of not more than seven persons), รถยนต์นั่งส่วนบุคคลเกินเจ็ดคนแต่ไม่เกิน
180
+ สิบสองคน (more than seven but not more than twelve) and
181
+ รถยนต์บรรทุกส่วนบุคคล (private goods vehicles), and defines TEN closed
182
+ classes of "desirable or popular" number: single digits; two, three and
183
+ four identical digits; thousands; three and four ascending digits;
184
+ เลขคู่เหมือน, เลขคู่หาม and เลขคู่สลับ (mirrored, bracketed and
185
+ alternating pairs). ข้อ ๓: an unsold number is issued normally.
186
+ signed_by: "นิกร จำนง, รัฐมนตรีช่วยว่าการกระทรวงคมนาคม ปฏิบัติราชการแทนรัฐมนตรีว่าการกระทรวงคมนาคม"
187
+ source: "https://web.archive.org/web/20141019064112/http://www.ratchakitcha.soc.go.th/DATA/PDF/00126585.PDF # the whole instrument. NOTE: this Gazette PDF's text layer is in a legacy Thai font encoding and renders as mojibake under pdftotext; the structure, the ten number classes and the dates were read from it, the Thai wording was NOT quotable and is therefore not quoted anywhere in this file"
188
+ test_vehicle_announcement_2560:
189
+ citation: "ประกาศกรมการขนส่งทางบก เรื่อง กำหนดหลักเกณฑ์ วิธีการ และเงื่อนไขในการขออนุญาต การอนุญาต และระยะเวลาในการใช้รถ และเครื่องหมายแสดงการใช้รถที่ใช้เพื่อการทดสอบ พ.ศ. ๒๕๖๐"
190
+ made: "2017-02-03"
191
+ published: "2017-03-30" # ราชกิจจานุเบกษา เล่ม ๑๓๔ ตอนพิเศษ ๙๒ ง หน้า ๖
192
+ entry_into_force: 'ข้อ ๑: "ประกาศนี้ให้ใช้บังคับตั้งแต่วันที่ ๑ เมษายน พ.ศ. ๒๕๖๐ เป็นต้นไป" — 1 April 2017'
193
+ enabling: "มาตรา ๖/๑ วรรคสาม แห่งพระราชบัญญัติรถยนต์ พ.ศ. ๒๕๒๒ ซึ่งแก้ไขเพิ่มเติมโดยพระราชบัญญัติรถยนต์ (ฉบับที่ ๑๗) พ.ศ. ๒๕๕๗"
194
+ signed_by: "สนิท พรหมวงษ์, อธิบดีกรมการขนส่งทางบก"
195
+ source: "https://web.archive.org/web/2020id_/https://www.ratchakitcha.soc.go.th/DATA/PDF/2560/E/092/6.PDF # definitions of รถทดสอบก่อนผลิต (pre-production test vehicle) and รถทดสอบคุณภาพ (quality test vehicle), ข้อ ๗ 'เครื่องหมายแสดงการใช้รถ ... ให้เป็นไปตามแบบแนบท้ายประกาศนี้', ข้อ ๘ permit lives of 180 and 90 days, ข้อ ๙ (๑) (ข) front-and-rear display (rear only for motorcycles). The annexed FORMS are the permit documents; the mark itself is an image and its letters are not in the text layer"
196
+
197
+ # ---------------------------------------------------------------------------
198
+ # Jurisdiction-wide charset facts, cited once and referenced per series.
199
+ # ---------------------------------------------------------------------------
200
+ charset_defaults:
201
+ serial_scripts:
202
+ letters: "Thai consonants (Unicode Thai block U+0E01–U+0E2E) on every Motor-Vehicle-Act plate; Latin only on the Land-Transport-Act plates (the fixed word THAILAND) and on the international-use and test-vehicle marks"
203
+ digits: "Arabic (Western) numerals — ข้อ ๓ (๑) (ก) ๒): 'หมายเลขทะเบียนให้ใช้ตัวเลขอารบิค'. Thai numerals are NOT used for the registration number"
204
+ letters_with_delegated_metrics:
205
+ values: ["ข", "ง", "ช", "ซ", "ฌ", "ญ", "ฎ", "ฏ", "ฐ", "ฒ", "ณ", "ป", "ฝ", "ฟ", "ศ", "ษ", "ส", "ฬ", "ฮ"]
206
+ note: >-
207
+ ข้อ ๓ (๑) (ก) ๔) and ข้อ ๓ (๑) (ข) ๓) both set minimum letter heights and
208
+ widths and then except these nineteen consonants (plus สระ vowels,
209
+ วรรณยุกต์ tone marks and the numeral ๑), whose height and width the
210
+ Director-General fixes instead. These letters therefore demonstrably occur
211
+ on Thai plates as a matter of primary law. This is a PARTIAL list arrived
212
+ at by a side door: it is NOT the category-letter alphabet, which is
213
+ delegated (see the header, fact 3) and is a recorded gap.
214
+ source: "https://web.archive.org/web/20171113165614/http://www.ratchakitcha.soc.go.th/DATA/PDF/2554/A/045/6.PDF # ข้อ ๓ (๑) (ก) ๔) and (ข) ๓)"
215
+ alphabet_delegation:
216
+ note: >-
217
+ "การใช้ตัวเลขนำหน้าตัวอักษรประจำหมวด ตัวอักษรประจำหมวด และหมายเลขทะเบียน
218
+ ให้เป็นไปตามที่อธิบดีประกาศกำหนด" (ข้อ ๓ (๑) (ก) ๕), repeated verbatim at
219
+ (ข) ๔) for motorcycles). The alphabet, the order in which letter pairs are
220
+ opened, and the numbering are all Director-General announcements. NO such
221
+ announcement was retrieved in this pass. Consequently no series in this
222
+ file asserts a letter set, and every `regex_native` writes the letter
223
+ positions as the whole Thai consonant range with an explicit note.
224
+ source: "https://web.archive.org/web/20171113165614/http://www.ratchakitcha.soc.go.th/DATA/PDF/2554/A/045/6.PDF # ข้อ ๓ (๑) (ก) ๕) and (ข) ๔) — the delegation"
225
+
226
+ # The pattern/regex policy, stated once and referenced by every Thai-script
227
+ # series (PRD-PLATES §2.6 collision — see header fact 2).
228
+ regex_policy:
229
+ thai_script_series: >-
230
+ `format.pattern` is the ARABIC-NUMERAL BLOCK ONLY ("9999" = the registration
231
+ number of not more than four digits). `format.regex` is its round-trippable
232
+ twin. `matching: recall-only` on every such series: a match says the string
233
+ is a shape the Thai numbering issues, never that it is a valid Thai
234
+ registration, because the Thai category letters and the province name — the
235
+ parts that actually identify the plate — cannot be spelled in the dataset's
236
+ serial alphabet. The full mark is in `format.fields`; the full regex is in
237
+ the non-lint-checked `format.regex_native`.
238
+ regex_native_correction: >-
239
+ CORRECTION APPLIED 2026-08-03 by the assigned th researcher before hand-off,
240
+ and called out here rather than made silently. Every `regex_native` in this
241
+ file originally spelled the leading numeral as a class accepting THAI DIGITS
242
+ as well as Arabic ones. That is wrong on the instrument's own words: the
243
+ regulation requires the leading numeral to be an ARABIC numeral
244
+ ("ในบรรทัดที่หนึ่งให้เพิ่มตัวเลขอารบิคตั้งแต่ ๑ ถึง ๙ ตามลำดับ",
245
+ ข้อ ๓ (๑) (ก) ๓)), exactly as ข้อ ๓ (๑) (ก) ๒) requires the registration number
246
+ to be one ("หมายเลขทะเบียนให้ใช้ตัวเลขอารบิค"). The Thai digits ๑-๙ that appear
247
+ in that sentence are the GAZETTE'S typesetting of the numerals one to nine,
248
+ not a description of what the plate prints — Thai plates print Arabic
249
+ numerals and nothing else, and a consumer normalising Thai digits into a Thai
250
+ plate serial would be normalising a character that never occurs there. Every
251
+ `regex_native` now spells [1-9], consistently with each series' own `fields`
252
+ block, which already recorded the leading numeral as "Arabic numerals".
253
+ OCCURRENCES CHANGED: 14.
254
+ numeric_series: >-
255
+ The Land-Transport-Act series, the international-use mark and the
256
+ test-vehicle mark have all-Latin/Arabic serials and are modelled normally,
257
+ with `matching: strict` and sourced `regex_strict` twins.
258
+
259
+ # PHOTOGRAPHIC CROSS-CHECK (wave-3 render pass, 2026-08-03). Seven
260
+ # straight-on Commons photos (CC-BY-SA 4.0 / PD) read against the design
261
+ # blocks below; every colour/layout claim CONFIRMED, no contradiction:
262
+ # th-private-car-2011 (black/white, Phuket "กว 2283"), over7 (navy/white,
263
+ # Bangkok "อห 2502"), pickup (green/white, Bangkok "2ฒร 1387" — the
264
+ # leading-numeral exhaustion "2" IS observed in the wild), service-green
265
+ # (white/green, Phuket "ฒข 4052"), lta-public-yellow (Bangkok "THAILAND
266
+ # 01 / 31-4304 / กรุงเทพมหานคร" — type code 31 inside its declared 30-39
267
+ # band), lta-private-white (Chiang Mai "82-5304" — inside 80-99). The
268
+ # "01 = Bangkok" numeric province code is a SINGLE-witness lead for the
269
+ # delegated เลขรหัสจังหวัด table — recorded here, not asserted into the
270
+ # decode file (one photo is not two agreeing references). One motorcycle
271
+ # photo shows the PRE-2554 predecessor design (red stripe + 2-letter
272
+ # abbreviation) the notes already flag as an unsecured gap. Evidence:
273
+ # photographic-observed. Refs: Commons File:License_plate_of_Thailand_
274
+ # 001.jpg, Black_on_Yellow_plate_Thailand_01.jpg, Green_on_white_
275
+ # Thailand_license_plate_01.jpg, Blue_on_white_license_plate_Thailand_
276
+ # 01.jpg, White_on_green_license_plate_Thailand.jpg, Thai_truck_
277
+ # plate.jpg, Motorcycle_License_plate_of_Thailand.JPG.
278
+
279
+ series:
280
+
281
+ # =========================================================================
282
+ # BLOCK A — MOTOR VEHICLE ACT B.E. 2522 PLATES (กฎกระทรวง พ.ศ. ๒๕๕๔).
283
+ # All of these share ONE layout and ONE size and differ only in colour and
284
+ # in the legal vehicle class, which is exactly why the regulation writes the
285
+ # sizes once in ข้อ ๓ (๑) (ก) and the colours eight times in ข้อ ๓ (๒).
286
+ # Because DESIGN differs (background and character colour), each is its own
287
+ # SERIES under PRD-PLATES §2.3 and not a colour sub-entry.
288
+ # =========================================================================
289
+
290
+ - id: th-private-car-2011
291
+ class: standard
292
+ categories: [car]
293
+ period: { start: 2011 }
294
+ period_evidence: instrument-in-force
295
+ matching: recall-only
296
+ format:
297
+ pattern: "9999"
298
+ regex: '\A\d{1,4}\z'
299
+ pattern_note: >-
300
+ The pattern is the REGISTRATION NUMBER ONLY. The printed mark is two
301
+ lines: line 1 = [optional leading numeral 1-9] + category letter 1 +
302
+ category letter 2 + the registration number of not more than four
303
+ digits; line 2 = the province name in Thai. See `fields` and
304
+ `regex_native`, and the file header, fact 2.
305
+ regex_native: '\A[1-9]?[ก-ฮ]{2}\s?\d{1,4}\z'
306
+ regex_native_note: >-
307
+ Not lint-checked (PRD-PLATES §2.6 admits only A-Z0-9 in a serial). It
308
+ covers ONE LINE — the province name of line 2 is a separate field. The
309
+ letter positions are written as the whole Thai consonant range
310
+ U+0E01-U+0E2E because the category-letter alphabet is delegated and
311
+ unpinned; the true set is a strict subset of that range.
312
+ fields:
313
+ - name: leading_numeral
314
+ line: 1
315
+ script: "Arabic numerals"
316
+ values: "1-9"
317
+ presence: conditional
318
+ rule: >-
319
+ ข้อ ๓ (๑) (ก) ๓): added in front of the first category letter only
320
+ once every first/second category-letter combination has been used.
321
+ - name: category_letter_1
322
+ line: 1
323
+ script: Thai
324
+ values: delegated
325
+ rule: "ตัวอักษรประจำหมวดตัวที่หนึ่ง — set by Director-General announcement (ข้อ ๓ (๑) (ก) ๕))"
326
+ - name: category_letter_2
327
+ line: 1
328
+ script: Thai
329
+ values: delegated
330
+ rule: "ตัวอักษรประจำหมวดตัวที่สอง"
331
+ - name: registration_number
332
+ line: 1
333
+ script: "Arabic numerals"
334
+ values: "not more than four digits (หมายเลขทะเบียนไม่เกินสี่หลัก)"
335
+ - name: province
336
+ line: 2
337
+ script: Thai
338
+ values: "the name of Bangkok or of the province of registration, spelled out; the word เบตง where the vehicle is registered at Betong District, Yala Province"
339
+ rule: "ข้อ ๓ (๑) (ก) ๒)"
340
+ progression: >-
341
+ A letter pair runs 1..9999 and the registrar then moves to the next pair
342
+ the Director-General has opened; when the pairs are exhausted the
343
+ leading numeral 1-9 is prefixed and the pairs restart. The pair-opening
344
+ ORDER is not published in any instrument secured here, so no age
345
+ inference is offered — this is the single biggest gap for a parse API.
346
+ design:
347
+ plate: { w: 340, h: 150, unit: mm }
348
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
349
+ foreground: "#000000"
350
+ band: { side: none }
351
+ emblem:
352
+ present: true
353
+ rendered: placeholder
354
+ note: >-
355
+ "ในแผ่นป้ายมีเครื่องหมายเป็นตัวอักษร ขส อยู่ภายในวงกลมอัดเป็นรอยดุนที่
356
+ มุมล่างด้านขวาของแผ่นป้าย" — the letters ขส (the DLT's abbreviation)
357
+ inside an embossed circle at the LOWER RIGHT corner, at a size the
358
+ Director-General fixes. PRD-PLATES §3 placeholder rule applies.
359
+ border: { note: "ขอบแผ่นป้ายอัดเป็นรอยดุน — the plate edge is embossed; the border takes the character colour (ข้อ ๓ (๒) (ค))" }
360
+ characters:
361
+ line1_digit_min_h_mm: 58
362
+ line1_digit_min_w_mm: 31
363
+ line1_letter_min_h_mm: 58
364
+ line1_letter_min_w_mm: 38
365
+ line2_min_h_mm: 21
366
+ line2_min_w_mm: 18
367
+ note: "minima only; the nineteen named consonants, vowels, tone marks and the numeral ๑ are excepted and sized by the Director-General"
368
+ embossed: true
369
+ rear_differs: false
370
+ display: "ข้อ ๕: one plate at the front and one at the rear"
371
+ region_encoding: "plates/_decode/th-registration-elements.yml"
372
+ sources:
373
+ - "https://web.archive.org/web/20171113165614/http://www.ratchakitcha.soc.go.th/DATA/PDF/2554/A/045/6.PDF # ข้อ ๓ (๑) (ก) ๑)-๕) size 15 x 34 cm, ขส roundel lower right, two-line layout, leading numeral, character minima; ข้อ ๓ (๒) (ค) ๑) 'รถยนต์นั่งส่วนบุคคลไม่เกินเจ็ดคนใช้สีดำ' on a retroreflective white ground; ข้อ ๕ front and rear"
374
+ notes: >-
375
+ PRIVATE PASSENGER CAR of not more than seven persons (รถยนต์นั่งส่วนบุคคล
376
+ ไม่เกินเจ็ดคน) — the ordinary Thai car plate: black Thai characters on a
377
+ retroreflective white ground. period.start 2011 is the ministerial
378
+ regulation's own year and carries `instrument-in-force`, NOT a claim that
379
+ the two-letter composition began then: the 2554 regulation revokes and
380
+ replaces the B.E. 2547 (2004) regulation and its 2550 (2007) amendment, so
381
+ the composition is demonstrably older. What IS new in 2011 is the size
382
+ (the 2547 sizes are in the revoked instrument, not secured here) and the
383
+ leading-numeral exhaustion rule the หมายเหตุ explains. Thai press dates
384
+ the modern arrangement to 1997 and Bangkok's first leading-numeral series
385
+ to 2012; neither was pinned to an instrument and neither is asserted.
386
+
387
+ - id: th-private-car-over7-2011
388
+ class: standard
389
+ categories: [van, bus]
390
+ period: { start: 2011 }
391
+ period_evidence: instrument-in-force
392
+ matching: recall-only
393
+ format:
394
+ pattern: "9999"
395
+ regex: '\A\d{1,4}\z'
396
+ pattern_note: "registration-number block only — see th-private-car-2011 and the header, fact 2"
397
+ regex_native: '\A[1-9]?[ก-ฮ]{2}\s?\d{1,4}\z'
398
+ design:
399
+ plate: { w: 340, h: 150, unit: mm }
400
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
401
+ foreground: "#002F87"
402
+ foreground_note: "สีน้ำเงิน — the regulation names the colour 'navy/dark blue' and does not number it"
403
+ band: { side: none }
404
+ emblem: { present: true, rendered: placeholder, note: "ขส roundel, lower right" }
405
+ embossed: true
406
+ rear_differs: false
407
+ region_encoding: "plates/_decode/th-registration-elements.yml"
408
+ sources:
409
+ - "https://web.archive.org/web/20171113165614/http://www.ratchakitcha.soc.go.th/DATA/PDF/2554/A/045/6.PDF # ข้อ ๓ (๒) (ค) ๒) 'รถยนต์นั่งส่วนบุคคลเกินเจ็ดคนใช้สีน้ำเงิน' on retroreflective white; size and layout per ข้อ ๓ (๑) (ก)"
410
+ notes: >-
411
+ PRIVATE PASSENGER VEHICLE of MORE than seven persons (รถยนต์นั่งส่วนบุคคล
412
+ เกินเจ็ดคน) — vans and minibuses in private ownership. Identical format and
413
+ size to the ordinary car plate; only the character colour differs, which
414
+ under PRD-PLATES §2.3 would make it a sub-entry — except that the
415
+ regulation treats it as a distinct legal vehicle class with its own
416
+ colour rule, and the auction regulation of B.E. 2546 draws its own line at
417
+ "more than seven but not more than twelve", so it is carried as a series.
418
+
419
+ - id: th-private-pickup-2011
420
+ class: standard
421
+ categories: [truck]
422
+ period: { start: 2011 }
423
+ period_evidence: instrument-in-force
424
+ matching: recall-only
425
+ format:
426
+ pattern: "9999"
427
+ regex: '\A\d{1,4}\z'
428
+ pattern_note: "registration-number block only"
429
+ regex_native: '\A[1-9]?[ก-ฮ]{2}\s?\d{1,4}\z'
430
+ design:
431
+ plate: { w: 340, h: 150, unit: mm }
432
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
433
+ foreground: "#009A44"
434
+ foreground_note: "สีเขียว — named, not numbered"
435
+ band: { side: none }
436
+ emblem: { present: true, rendered: placeholder }
437
+ embossed: true
438
+ region_encoding: "plates/_decode/th-registration-elements.yml"
439
+ sources:
440
+ - "https://web.archive.org/web/20171113165614/http://www.ratchakitcha.soc.go.th/DATA/PDF/2554/A/045/6.PDF # ข้อ ๓ (๒) (ค) ๓) 'รถยนต์บรรทุกส่วนบุคคลใช้สีเขียว' on retroreflective white"
441
+ notes: >-
442
+ PRIVATE GOODS VEHICLE (รถยนต์บรรทุกส่วนบุคคล) — the pickup truck, the most
443
+ numerous body style in Thailand, on green characters over retroreflective
444
+ white. Distinguishing this from the black-charactered car plate is the
445
+ single most useful colour fact in Thai plate reading, and it is primary.
446
+
447
+ - id: th-private-threewheeler-2011
448
+ class: standard
449
+ categories: [tricycle]
450
+ period: { start: 2011 }
451
+ period_evidence: instrument-in-force
452
+ matching: recall-only
453
+ format:
454
+ pattern: "9999"
455
+ regex: '\A\d{1,4}\z'
456
+ pattern_note: "registration-number block only"
457
+ regex_native: '\A[1-9]?[ก-ฮ]{2}\s?\d{1,4}\z'
458
+ design:
459
+ plate: { w: 340, h: 150, unit: mm }
460
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
461
+ foreground: "#D0021B"
462
+ foreground_note: "สีแดง — named, not numbered"
463
+ band: { side: none }
464
+ emblem: { present: true, rendered: placeholder }
465
+ embossed: true
466
+ region_encoding: "plates/_decode/th-registration-elements.yml"
467
+ sources:
468
+ - "https://web.archive.org/web/20171113165614/http://www.ratchakitcha.soc.go.th/DATA/PDF/2554/A/045/6.PDF # ข้อ ๓ (๒) (ค) ๔) 'รถยนต์สามล้อส่วนบุคคลใช้สีแดง' on retroreflective white"
469
+ notes: >-
470
+ PRIVATE THREE-WHEELED CAR (รถยนต์สามล้อส่วนบุคคล) — red characters on
471
+ retroreflective white. Not to be confused with the FOR-HIRE three-wheeler
472
+ (th-tuktuk-2011), which is green on YELLOW. `categories: [tricycle]` uses
473
+ the kinds vocabulary already present in the dataset.
474
+
475
+ - id: th-taxi-2011
476
+ class: taxi
477
+ categories: [car]
478
+ period: { start: 2011 }
479
+ period_evidence: instrument-in-force
480
+ matching: recall-only
481
+ format:
482
+ pattern: "9999"
483
+ regex: '\A\d{1,4}\z'
484
+ pattern_note: "registration-number block only"
485
+ regex_native: '\A[1-9]?[ก-ฮ]{2}\s?\d{1,4}\z'
486
+ design:
487
+ plate: { w: 340, h: 150, unit: mm }
488
+ background: { color: "#FFD400", finish: retroreflective, hex_basis: observed }
489
+ foreground: "#000000"
490
+ band: { side: none }
491
+ emblem: { present: true, rendered: placeholder }
492
+ embossed: true
493
+ region_encoding: "plates/_decode/th-registration-elements.yml"
494
+ sources:
495
+ - "https://web.archive.org/web/20171113165614/http://www.ratchakitcha.soc.go.th/DATA/PDF/2554/A/045/6.PDF # ข้อ ๓ (๒) (ก) retroreflective yellow ground for the four hire classes; ๒) 'รถยนต์รับจ้างบรรทุกคนโดยสารไม่เกินเจ็ดคนใช้สีดำ'"
496
+ notes: >-
497
+ METERED TAXI (รถยนต์รับจ้างบรรทุกคนโดยสารไม่เกินเจ็ดคน — a car for hire
498
+ carrying not more than seven passengers): black characters on a
499
+ retroreflective YELLOW ground. Yellow is the statutory ground for all four
500
+ hire classes of ข้อ ๓ (๒) (ก); the CHARACTER colour is what separates them,
501
+ and that is the whole design logic of the Thai hire fleet.
502
+
503
+ - id: th-interprovincial-taxi-2011
504
+ class: taxi
505
+ categories: [car]
506
+ period: { start: 2011 }
507
+ period_evidence: instrument-in-force
508
+ matching: recall-only
509
+ format:
510
+ pattern: "9999"
511
+ regex: '\A\d{1,4}\z'
512
+ pattern_note: "registration-number block only"
513
+ regex_native: '\A[1-9]?[ก-ฮ]{2}\s?\d{1,4}\z'
514
+ design:
515
+ plate: { w: 340, h: 150, unit: mm }
516
+ background: { color: "#FFD400", finish: retroreflective, hex_basis: observed }
517
+ foreground: "#D0021B"
518
+ band: { side: none }
519
+ emblem: { present: true, rendered: placeholder }
520
+ embossed: true
521
+ region_encoding: "plates/_decode/th-registration-elements.yml"
522
+ sources:
523
+ - "https://web.archive.org/web/20171113165614/http://www.ratchakitcha.soc.go.th/DATA/PDF/2554/A/045/6.PDF # ข้อ ๓ (๒) (ก) ๑) 'รถยนต์รับจ้างระหว่างจังหวัดใช้สีแดง' on retroreflective yellow"
524
+ notes: >-
525
+ INTER-PROVINCIAL HIRE CAR (รถยนต์รับจ้างระหว่างจังหวัด) — red characters on
526
+ retroreflective yellow. First-named of the four yellow-ground hire classes.
527
+
528
+ - id: th-tuktuk-2011
529
+ class: taxi
530
+ categories: [tricycle]
531
+ period: { start: 2011 }
532
+ period_evidence: instrument-in-force
533
+ matching: recall-only
534
+ format:
535
+ pattern: "9999"
536
+ regex: '\A\d{1,4}\z'
537
+ pattern_note: "registration-number block only"
538
+ regex_native: '\A[1-9]?[ก-ฮ]{2}\s?\d{1,4}\z'
539
+ design:
540
+ plate: { w: 340, h: 150, unit: mm }
541
+ background: { color: "#FFD400", finish: retroreflective, hex_basis: observed }
542
+ foreground: "#009A44"
543
+ band: { side: none }
544
+ emblem: { present: true, rendered: placeholder }
545
+ embossed: true
546
+ region_encoding: "plates/_decode/th-registration-elements.yml"
547
+ sources:
548
+ - "https://web.archive.org/web/20171113165614/http://www.ratchakitcha.soc.go.th/DATA/PDF/2554/A/045/6.PDF # ข้อ ๓ (๒) (ก) ๓) 'รถยนต์รับจ้างสามล้อใช้สีเขียว' on retroreflective yellow"
549
+ notes: >-
550
+ THREE-WHEELED HIRE CAR (รถยนต์รับจ้างสามล้อ) — the tuk-tuk: green
551
+ characters on retroreflective yellow.
552
+
553
+ - id: th-smallfourwheel-hire-2011
554
+ class: taxi
555
+ categories: [car]
556
+ period: { start: 2011 }
557
+ period_evidence: instrument-in-force
558
+ matching: recall-only
559
+ format:
560
+ pattern: "9999"
561
+ regex: '\A\d{1,4}\z'
562
+ pattern_note: "registration-number block only"
563
+ regex_native: '\A[1-9]?[ก-ฮ]{2}\s?\d{1,4}\z'
564
+ design:
565
+ plate: { w: 340, h: 150, unit: mm }
566
+ background: { color: "#FFD400", finish: retroreflective, hex_basis: observed }
567
+ foreground: "#002F87"
568
+ band: { side: none }
569
+ emblem: { present: true, rendered: placeholder }
570
+ embossed: true
571
+ region_encoding: "plates/_decode/th-registration-elements.yml"
572
+ sources:
573
+ - "https://web.archive.org/web/20171113165614/http://www.ratchakitcha.soc.go.th/DATA/PDF/2554/A/045/6.PDF # ข้อ ๓ (๒) (ก) ๔) 'รถยนต์สี่ล้อเล็กรับจ้างใช้สีน้ำเงิน' on retroreflective yellow"
574
+ notes: >-
575
+ SMALL FOUR-WHEELED HIRE CAR (รถยนต์สี่ล้อเล็กรับจ้าง) — the small shared
576
+ pickup/songthaew class: navy characters on retroreflective yellow. Fourth
577
+ and last of the yellow-ground hire classes of ข้อ ๓ (๒) (ก).
578
+
579
+ - id: th-service-green-2011
580
+ class: taxi
581
+ categories: [car, van, bus]
582
+ period: { start: 2011 }
583
+ period_evidence: instrument-in-force
584
+ matching: recall-only
585
+ format:
586
+ pattern: "9999"
587
+ regex: '\A\d{1,4}\z'
588
+ pattern_note: "registration-number block only"
589
+ regex_native: '\A[1-9]?[ก-ฮ]{2}\s?\d{1,4}\z'
590
+ design:
591
+ plate: { w: 340, h: 150, unit: mm }
592
+ background: { color: "#009A44", finish: retroreflective, hex_basis: observed }
593
+ foreground: "#FFFFFF"
594
+ band: { side: none }
595
+ emblem: { present: true, rendered: placeholder }
596
+ embossed: true
597
+ region_encoding: "plates/_decode/th-registration-elements.yml"
598
+ sources:
599
+ - "https://web.archive.org/web/20171113165614/http://www.ratchakitcha.soc.go.th/DATA/PDF/2554/A/045/6.PDF # ข้อ ๓ (๒) (ข) 'รถยนต์บริการธุรกิจ รถยนต์บริการทัศนาจร และรถยนต์บริการให้เช่า ให้พื้นแผ่นป้ายใช้สีเขียวสะท้อนแสง ... และขอบแผ่นป้ายใช้สีขาว'"
600
+ notes: >-
601
+ SERVICE VEHICLES — the three classes of ข้อ ๓ (๒) (ข): รถยนต์บริการธุรกิจ
602
+ (business service), รถยนต์บริการทัศนาจร (tour service) and
603
+ รถยนต์บริการให้เช่า (rental service). White characters and white border on
604
+ a retroreflective GREEN ground. The green plate is the one a visitor sees
605
+ on hotel shuttles and rental cars. `class: taxi` is used because the
606
+ controlled vocabulary's taxi entry covers "for-hire vehicles where
607
+ separately serialized or colored" and these are hire-and-reward classes;
608
+ they are NOT metered taxis and the note says so.
609
+
610
+ - id: th-trailer-orange-2011
611
+ class: trailer
612
+ categories: [trailer]
613
+ period: { start: 2011 }
614
+ period_evidence: instrument-in-force
615
+ matching: recall-only
616
+ format:
617
+ pattern: "9999"
618
+ regex: '\A\d{1,4}\z'
619
+ pattern_note: "registration-number block only"
620
+ regex_native: '\A[1-9]?[ก-ฮ]{2}\s?\d{1,4}\z'
621
+ design:
622
+ plate: { w: 340, h: 150, unit: mm }
623
+ background: { color: "#F58220", finish: retroreflective, hex_basis: observed }
624
+ foreground: "#000000"
625
+ band: { side: none }
626
+ emblem: { present: true, rendered: placeholder }
627
+ embossed: true
628
+ display: "ข้อ ๕: a trailer carries ONE plate, at the rear"
629
+ region_encoding: "plates/_decode/th-registration-elements.yml"
630
+ sources:
631
+ - "https://web.archive.org/web/20171113165614/http://www.ratchakitcha.soc.go.th/DATA/PDF/2554/A/045/6.PDF # ข้อ ๓ (๒) (ง) retroreflective orange ground with black characters and border for รถพ่วง รถบดถนน รถแทรกเตอร์ และรถใช้งานเกษตรกรรม; ข้อ ๕ rear-only display for รถพ่วง"
632
+ notes: >-
633
+ TRAILER (รถพ่วง) on the orange ground of ข้อ ๓ (๒) (ง). The regulation puts
634
+ trailers, road rollers, tractors and agricultural vehicles in ONE colour
635
+ rule; they are split here into two series because the CLASS differs and a
636
+ consumer asking for Thailand's trailer class must not get an agricultural
637
+ answer. Format, size, colour and period are identical — this split is a
638
+ classification decision and is flagged for the verifier.
639
+
640
+ - id: th-agricultural-orange-2011
641
+ class: agricultural
642
+ categories: [tractor, machine]
643
+ period: { start: 2011 }
644
+ period_evidence: instrument-in-force
645
+ matching: recall-only
646
+ format:
647
+ pattern: "9999"
648
+ regex: '\A\d{1,4}\z'
649
+ pattern_note: "registration-number block only"
650
+ regex_native: '\A[1-9]?[ก-ฮ]{2}\s?\d{1,4}\z'
651
+ design:
652
+ plate: { w: 340, h: 150, unit: mm }
653
+ background: { color: "#F58220", finish: retroreflective, hex_basis: observed }
654
+ foreground: "#000000"
655
+ band: { side: none }
656
+ emblem: { present: true, rendered: placeholder }
657
+ embossed: true
658
+ region_encoding: "plates/_decode/th-registration-elements.yml"
659
+ sources:
660
+ - "https://web.archive.org/web/20171113165614/http://www.ratchakitcha.soc.go.th/DATA/PDF/2554/A/045/6.PDF # ข้อ ๓ (๒) (ง), and ข้อ ๓ (๑) (ก) which lists รถบดถนน รถแทรกเตอร์ และรถใช้งานเกษตรกรรม among the 15 x 34 cm classes"
661
+ notes: >-
662
+ ROAD ROLLER (รถบดถนน), TRACTOR (รถแทรกเตอร์) and AGRICULTURAL WORK VEHICLE
663
+ (รถใช้งานเกษตรกรรม) — black characters on retroreflective orange. Note that
664
+ the ANNUAL TAX MARK rule of ข้อ ๖ excepts this class along with
665
+ motorcycles and trailers: the sticker need not go on the windscreen.
666
+
667
+ - id: th-motorcycle-private-2011
668
+ class: motorcycle
669
+ categories: [motorcycle]
670
+ period: { start: 2011 }
671
+ period_evidence: instrument-in-force
672
+ matching: recall-only
673
+ format:
674
+ pattern: "9999"
675
+ regex: '\A\d{1,4}\z'
676
+ pattern_note: >-
677
+ The motorcycle plate is THREE lines, not two: line 1 = numeral 1-9 +
678
+ category letter 1 + category letter 2; line 2 = the province name;
679
+ line 3 = the registration number of not more than four digits. The
680
+ pattern is line 3.
681
+ regex_native: '\A[1-9][ก-ฮ]{2}\s?\d{1,4}\z'
682
+ fields:
683
+ - { name: leading_numeral, line: 1, script: "Arabic numerals", values: "1-9", presence: "part of the base composition for motorcycles — ข้อ ๓ (๑) (ข) ๒) states it without an exhaustion condition, unlike the car rule" }
684
+ - { name: category_letter_1, line: 1, script: Thai, values: delegated }
685
+ - { name: category_letter_2, line: 1, script: Thai, values: delegated }
686
+ - { name: province, line: 2, script: Thai, values: "Bangkok or the province of registration; เบตง for Betong District, Yala" }
687
+ - { name: registration_number, line: 3, script: "Arabic numerals", values: "not more than four digits" }
688
+ design:
689
+ plate: { w: 220, h: 172, unit: mm }
690
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
691
+ foreground: "#000000"
692
+ band: { side: none }
693
+ emblem:
694
+ present: true
695
+ rendered: placeholder
696
+ note: "ขส roundel embossed at the UPPER RIGHT on motorcycle plates (ข้อ ๓ (๑) (ข) ๑)) — the opposite corner from the car plate"
697
+ characters:
698
+ line1_and_line3_min_h_mm: 40
699
+ line1_and_line3_min_w_mm: 30
700
+ line2_min_h_mm: 20
701
+ line2_min_w_mm: 13
702
+ embossed: true
703
+ display: "ข้อ ๕: motorcycles carry ONE plate, at the rear"
704
+ region_encoding: "plates/_decode/th-registration-elements.yml"
705
+ sources:
706
+ - "https://web.archive.org/web/20171113165614/http://www.ratchakitcha.soc.go.th/DATA/PDF/2554/A/045/6.PDF # ข้อ ๓ (๑) (ข) ๑)-๔) 17.20 x 22 cm, ขส roundel upper right, three-line layout, character minima; ข้อ ๓ (๒) (จ) 'รถจักรยานยนต์ส่วนบุคคล ให้พื้นแผ่นป้ายใช้สีขาวสะท้อนแสง ... และขอบแผ่นป้ายใช้สีดำ'; ข้อ ๕ rear only"
707
+ notes: >-
708
+ PRIVATE MOTORCYCLE (รถจักรยานยนต์ส่วนบุคคล) — black on retroreflective
709
+ white, one plate at the rear. TRANSITIONAL TRAP the verifier should read:
710
+ ข้อ ๑๐ says that where a plate issued BEFORE this regulation is lost or
711
+ damaged, the replacement is issued under this regulation "เว้นแต่กรณี
712
+ แผ่นป้ายทะเบียนรถจักรยานยนต์" — EXCEPT for motorcycle plates, whose
713
+ replacements are still made under the revoked B.E. 2547 regulation and its
714
+ amendments. Thailand therefore still issues an older motorcycle plate
715
+ design today, by law, and its specification is in an instrument this pass
716
+ did not secure. That is a recorded gap and a real "one series back".
717
+
718
+ - id: th-motorcycle-public-2011
719
+ class: taxi
720
+ categories: [motorcycle]
721
+ period: { start: 2011 }
722
+ period_evidence: instrument-in-force
723
+ matching: recall-only
724
+ format:
725
+ pattern: "9999"
726
+ regex: '\A\d{1,4}\z'
727
+ pattern_note: "registration-number block only; three-line motorcycle layout as th-motorcycle-private-2011"
728
+ regex_native: '\A[1-9][ก-ฮ]{2}\s?\d{1,4}\z'
729
+ design:
730
+ plate: { w: 220, h: 172, unit: mm }
731
+ background: { color: "#FFD400", finish: retroreflective, hex_basis: observed }
732
+ foreground: "#000000"
733
+ band: { side: none }
734
+ emblem: { present: true, rendered: placeholder, note: "ขส roundel upper right" }
735
+ embossed: true
736
+ display: "rear only"
737
+ region_encoding: "plates/_decode/th-registration-elements.yml"
738
+ sources:
739
+ - "https://web.archive.org/web/20171113165614/http://www.ratchakitcha.soc.go.th/DATA/PDF/2554/A/045/6.PDF # ข้อ ๓ (๒) (ฉ) 'รถจักรยานยนต์สาธารณะ ให้พื้นแผ่นป้ายใช้สีเหลืองสะท้อนแสง ... และขอบแผ่นป้ายใช้สีดำ'; size and layout per ข้อ ๓ (๑) (ข)"
740
+ notes: >-
741
+ PUBLIC MOTORCYCLE (รถจักรยานยนต์สาธารณะ) — the motorcycle taxi: black on
742
+ retroreflective YELLOW. Classed `taxi` rather than `motorcycle` because
743
+ the distinguishing legal fact is that it is for hire; the category array
744
+ keeps the vehicle kind.
745
+
746
+ - id: th-diplomatic-2011
747
+ class: diplomatic
748
+ categories: [car, motorcycle]
749
+ period: { start: 2011 }
750
+ period_evidence: instrument-in-force
751
+ matching: recall-only
752
+ format:
753
+ pattern: "9999"
754
+ regex: '\A\d{1,4}\z'
755
+ pattern_note: >-
756
+ Three sections. LEFT, two lines: line 1 the Thai letter ท; line 2 the
757
+ Arabic country/organisation code. MIDDLE: a longitudinal dash 1.1 cm x
758
+ 4 cm with the ขส roundel above it. RIGHT: the registration number in
759
+ Arabic numerals, 7.2 cm high, running 1 to 9999. The pattern is the
760
+ registration number.
761
+ regex_native: '\Aท\s?\d{1,3}\s?-\s?\d{1,4}\z'
762
+ regex_native_note: "country-code digit count is not fixed by the regulation; 1-3 is an observation-shaped bound, not a sourced one"
763
+ fields:
764
+ - { name: corps_letter, section: left, line: 1, script: Thai, values: ["ท"], rule: "ข้อ ๓ (๑) (ค) ๓) ก): 'รถยนต์ของบุคคลในคณะผู้แทนทางการทูต ให้ใช้อักษร ท'" }
765
+ - { name: country_code, section: left, line: 2, script: "Arabic numerals", values: "a code standing for the country or the international organisation or UN specialised agency stationed in Thailand — the code list is not in the regulation" }
766
+ - { name: separator_bar, section: middle, note: "ขีดตามทางยาว, 1.1 cm wide x 4 cm long, embossed; a printed SEPARATOR, spelled '-' under PRD-PLATES §2.6" }
767
+ - { name: registration_number, section: right, script: "Arabic numerals", values: "1 to 9999 (หมายเลขทะเบียนให้เริ่มตั้งแต่ ๑ ถึง ๙๙๙๙)" }
768
+ design:
769
+ plate: { w: 387, h: 110, unit: mm }
770
+ plate_variants:
771
+ - { w: 270, h: 90, unit: mm, note: "motorcycles of the same persons — ข้อ ๓ (๑) (ง) ๑)" }
772
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
773
+ foreground: "#000000"
774
+ band: { side: none }
775
+ emblem: { present: true, rendered: placeholder, note: "ขส roundel above the middle bar" }
776
+ characters:
777
+ left_section_h_mm: 40
778
+ right_number_h_mm: 72
779
+ motorcycle_left_h_mm: 35
780
+ motorcycle_number_h_mm: 50
781
+ embossed: true
782
+ region_encoding: "plates/_decode/th-registration-elements.yml"
783
+ sources:
784
+ - "https://web.archive.org/web/20171113165614/http://www.ratchakitcha.soc.go.th/DATA/PDF/2554/A/045/6.PDF # ข้อ ๓ (๑) (ค) ๑)-๓) 11 x 38.7 cm, three sections, the bar, numbers 1-9999, and the four corps letters; ข้อ ๓ (๑) (ง) the 9 x 27 cm motorcycle variant; ข้อ ๓ (๒) (ช) 'รถยนต์และรถจักรยานยนต์ส่วนบุคคลของบุคคลในคณะผู้แทนทางการทูต ให้พื้นแผ่นป้ายใช้สีขาวสะท้อนแสง โดยให้ตัวอักษร ตัวเลข และขีดใช้สีดำ'"
785
+ notes: >-
786
+ DIPLOMATIC CORPS (คณะผู้แทนทางการทูต) — letter ท, black on retroreflective
787
+ WHITE. Thailand splits the privileged fleet by GROUND COLOUR, not by
788
+ letter: ท alone gets white (ข้อ ๓ (๒) (ช)); the other three letters get
789
+ light blue (see th-consular-2011). The corps letter is a Thai consonant,
790
+ so this series is Thai-script and recall-only like the rest of Block A,
791
+ even though its number block is otherwise clean.
792
+
793
+ - id: th-consular-2011
794
+ class: consular
795
+ categories: [car, motorcycle]
796
+ period: { start: 2011 }
797
+ period_evidence: instrument-in-force
798
+ matching: recall-only
799
+ format:
800
+ pattern: "9999"
801
+ regex: '\A\d{1,4}\z'
802
+ pattern_note: "as th-diplomatic-2011, with the corps letter พ, ก or อ"
803
+ regex_native: '\A[พกอ]\s?\d{1,3}\s?-\s?\d{1,4}\z'
804
+ fields:
805
+ - name: corps_letter
806
+ section: left
807
+ line: 1
808
+ script: Thai
809
+ values: ["พ", "ก", "อ"]
810
+ rule: >-
811
+ ข้อ ๓ (๑) (ค) ๓): ข) 'รถยนต์ของบุคคลในหน่วยงานพิเศษของสถานทูต ให้ใช้
812
+ อักษร พ' (special agency of an embassy); ค) 'รถยนต์ของบุคคลในคณะ
813
+ ผู้แทนทางกงสุล ให้ใช้อักษร ก' (consular corps); ง) 'รถยนต์ของบุคคลใน
814
+ องค์การระหว่างประเทศหรือทบวงการชำนัญพิเศษแห่งสหประชาชาติ ... ให้ใช้
815
+ อักษร อ' (international organisation / UN specialised agency).
816
+ - { name: country_code, section: left, line: 2, script: "Arabic numerals" }
817
+ - { name: registration_number, section: right, script: "Arabic numerals", values: "1 to 9999" }
818
+ design:
819
+ plate: { w: 387, h: 110, unit: mm }
820
+ plate_variants:
821
+ - { w: 270, h: 90, unit: mm, note: "motorcycles" }
822
+ background: { color: "#4FA8DC", finish: retroreflective, hex_basis: observed }
823
+ foreground: "#FFFFFF"
824
+ band: { side: none }
825
+ emblem: { present: true, rendered: placeholder }
826
+ embossed: true
827
+ variants:
828
+ - class: consular
829
+ design:
830
+ background: { color: "#9E9E9E", finish: retroreflective, hex_basis: observed }
831
+ foreground: "#000000"
832
+ note: >-
833
+ HONORARY CONSUL (เจ้าพนักงานกงสุลกิตติมศักดิ์) — ข้อ ๓ (๒) (ซ) carves
834
+ this one case out of the light-blue rule: "เว้นแต่แผ่นป้ายทะเบียนรถ
835
+ สำหรับรถยนต์ของเจ้าพนักงานกงสุลกิตติมศักดิ์ ให้พื้นแผ่นป้ายใช้สีเทา
836
+ สะท้อนแสง โดยให้ตัวอักษร ตัวเลข และขีดใช้สีดำ" — a retroreflective GREY
837
+ ground with black characters, digits and bar. Colour-only variant of
838
+ the same format and period, so a sub-entry per PRD-PLATES §2.3.
839
+ sources:
840
+ - "https://web.archive.org/web/20171113165614/http://www.ratchakitcha.soc.go.th/DATA/PDF/2554/A/045/6.PDF # ข้อ ๓ (๒) (ซ) proviso"
841
+ sources:
842
+ - "https://web.archive.org/web/20171113165614/http://www.ratchakitcha.soc.go.th/DATA/PDF/2554/A/045/6.PDF # ข้อ ๓ (๑) (ค) ๓) ข)-ง) the letters พ ก อ; ข้อ ๓ (๒) (ซ) 'ให้พื้นแผ่นป้ายใช้สีฟ้าสะท้อนแสง โดยให้ตัวอักษร ตัวเลข และขีดใช้สีขาว' with the honorary-consul grey proviso"
843
+ notes: >-
844
+ EMBASSY SPECIAL AGENCIES (พ), CONSULAR CORPS (ก) and INTERNATIONAL
845
+ ORGANISATIONS / UN SPECIALISED AGENCIES (อ) — white characters on a
846
+ retroreflective LIGHT BLUE ground, with a grey sub-variant for honorary
847
+ consuls. Three corps letters share one design and one series because the
848
+ regulation gives them one colour rule; the letter is carried in `fields`
849
+ so a parse API can still separate them. `class: consular` is the closest
850
+ vocabulary fit for a series that also covers embassy special agencies and
851
+ international organisations; the note records the imprecision rather than
852
+ inventing a class.
853
+
854
+ - id: th-auction-graphic-2003
855
+ class: personalized
856
+ categories: [car, truck, van]
857
+ period: { start: 2003 }
858
+ period_evidence: enabling-statute
859
+ matching: recall-only
860
+ format:
861
+ pattern: "9999"
862
+ regex: '\A\d{1,4}\z'
863
+ pattern_note: >-
864
+ An auctioned plate carries an ORDINARY registration: the same two
865
+ category letters, the same up-to-four-digit number and the same province
866
+ line. What is bought is WHICH number, and what changes is the plate's
867
+ ground, which may carry a picture. The pattern is the number block.
868
+ regex_native: '\A[1-9]?[ก-ฮ]{2}\s?\d{1,4}\z'
869
+ design:
870
+ plate: { w: 340, h: 150, unit: mm }
871
+ background:
872
+ color: "#FFFFFF"
873
+ finish: retroreflective
874
+ hex_basis: observed
875
+ note: >-
876
+ The colours are NOT fixed for this class. ข้อ ๓ closing paragraph: "ใน
877
+ กรณีแผ่นป้ายทะเบียนรถที่มีกฎกระทรวงกำหนดหมายเลขทะเบียนซึ่งเป็นที่
878
+ ต้องการหรือเป็นที่นิยม อธิบดีอาจประกาศกำหนดให้ใช้สีพื้นแผ่นป้าย ...
879
+ เป็นประการอื่นก็ได้" — for plates whose numbers a ministerial
880
+ regulation has declared desirable or popular, the Director-General MAY
881
+ announce a different ground colour, numeral colour, letter colour,
882
+ province-letter colour and border. The hex here is the ordinary
883
+ private-car ground and is a placeholder, not a claim.
884
+ graphic:
885
+ permitted: true
886
+ rule: >-
887
+ ข้อ ๔, verbatim: "พื้นแผ่นป้ายทะเบียนรถประเภทใดจะมีรูปภาพที่สามารถอธิบาย
888
+ หรือมองเห็นความหมายในภาพที่ปรากฏเสมือนจริงนั้นได้ ให้เป็นไปตามที่อธิบดี
889
+ ประกาศกำหนด" — whether a plate class's ground may bear a realistic
890
+ PICTURE is for the Director-General to announce. This is the primary
891
+ hook for Thailand's famous pictorial auction plates.
892
+ foreground: "#000000"
893
+ emblem: { present: true, rendered: placeholder }
894
+ embossed: true
895
+ region_encoding: "plates/_decode/th-registration-elements.yml"
896
+ sources:
897
+ - "https://web.archive.org/web/20141019064112/http://www.ratchakitcha.soc.go.th/DATA/PDF/00126585.PDF # กฎกระทรวง กำหนดหมายเลขทะเบียนซึ่งเป็นที่ต้องการหรือเป็นที่นิยม เพื่อนำออกเปิดประมูลเป็นการทั่วไป พ.ศ. ๒๕๔๖ — ข้อ ๑ the ten closed classes of auctionable number and the three vehicle classes they apply to; ข้อ ๒ auctions follow the DLT's published order of category letters; ข้อ ๓ unsold numbers are issued normally; ข้อ ๔ the first auction starts at the letter pair after the one then in issue"
898
+ - "https://web.archive.org/web/20171113165614/http://www.ratchakitcha.soc.go.th/DATA/PDF/2554/A/045/6.PDF # ข้อ ๓ closing paragraph (the Director-General may vary every colour on an auctioned plate) and ข้อ ๔ (pictorial grounds)"
899
+ notes: >-
900
+ AUCTIONED "DESIRABLE OR POPULAR" NUMBERS (หมายเลขทะเบียนซึ่งเป็นที่ต้องการ
901
+ หรือเป็นที่นิยม) — the Thai fancy-plate regime, and it is statutory, not a
902
+ programme. period.start 2003 carries `enabling-statute`: s. 10/1 of the
903
+ Motor Vehicle Act B.E. 2522, inserted by the Motor Vehicle Act (No. 12)
904
+ B.E. 2546, obliges the Director-General to put such numbers to general
905
+ auction, and the B.E. 2546 ministerial regulation given 7 August 2003
906
+ defines them. The ten classes are closed and primary (single digits; two,
907
+ three and four repeated digits; round thousands; three- and four-digit
908
+ ascending runs; and the mirrored, bracketed and alternating pair families)
909
+ — but the Gazette PDF's text layer is legacy-encoded, so they are
910
+ described here and not quoted. This is Thailand's `personalized` class in
911
+ the controlled vocabulary: the serial stays inside the official frame and
912
+ only its SELECTION is the owner's.
913
+
914
+ - id: th-trade-red
915
+ class: dealer
916
+ categories: [car, truck, van, motorcycle]
917
+ period: { start: 1979 }
918
+ period_evidence: enabling-statute
919
+ matching: recall-only
920
+ format:
921
+ pattern: "9999"
922
+ regex: '\A\d{1,4}\z'
923
+ pattern_note: >-
924
+ The registration-number block. The mark ("เครื่องหมายพิเศษ") is reported
925
+ to carry one or two Thai consonants and four digits on a red ground —
926
+ that grammar is CORROBORATION ONLY (see notes); the number block is the
927
+ only element modelled.
928
+ regex_native: '\A[ก-ฮ]{1,2}\s?\d{1,4}\z'
929
+ regex_native_note: "shape reported by secondary sources; no instrument secured"
930
+ design:
931
+ background: { color: "#D0021B", finish: painted, hex_basis: observed }
932
+ foreground: "#000000"
933
+ band: { side: none }
934
+ design_basis: corroboration-only
935
+ region_encoding: none
936
+ validity:
937
+ note: >-
938
+ มาตรา ๒๗ of the Motor Vehicle Act, verbatim: "ผู้ใดมีรถยนต์ไว้เพื่อขาย
939
+ หรือเพื่อซ่อม ถ้าจะขับเองหรือให้ผู้อื่นขับเพื่อการนั้น ต้องได้รับใบอนุญาต
940
+ จากนายทะเบียน และให้ขับได้ระหว่างพระอาทิตย์ขึ้นถึงพระอาทิตย์ตก เว้นแต่มี
941
+ ความจำเป็นและได้รับอนุญาตจากนายทะเบียน" — a person holding a car for sale
942
+ or repair needs a registrar's licence to drive it or have it driven, and
943
+ it may be driven only BETWEEN SUNRISE AND SUNSET unless the registrar
944
+ permits otherwise. The famous Thai "red plate" night-driving rule is in
945
+ the Act itself.
946
+ sources:
947
+ - "https://web.archive.org/web/20110203044221/http://web.krisdika.go.th/data/law/law2/%C301/%C301-20-9999-update.pdf # มาตรา ๒๗ — the dealer/repairer licence, the sunrise-to-sunset limit, and 'ในการออกใบอนุญาต ให้นายทะเบียนออกเครื่องหมายพิเศษและสมุดคู่มือประจำรถให้ด้วย' with 'เครื่องหมายพิเศษ ... ให้เป็นไปตามแบบที่กำหนดในกฎกระทรวง'; the fee schedule prices เครื่องหมายพิเศษตามมาตรา ๒๗ at 100 baht each"
948
+ - "https://www.bangkokpost.com/opinion/opinion/1336019/red-licence-plates-drive-us-to-distraction # Bangkok Post editorial, 4 October 2017 — the red ground, the province-of-purchase restriction, the expressway ban and the permission-to-travel paperwork. SECONDARY, used only for the colour and the practical restrictions"
949
+ notes: >-
950
+ TRADE / DEALER MARK (เครื่องหมายพิเศษ, universally "ป้ายแดง", the red
951
+ plate). period.start 1979 is `enabling-statute`: the mark is created by
952
+ มาตรา ๒๗ of the Motor Vehicle Act B.E. 2522, given 8 May B.E. 2522. THE
953
+ FORM IS NOT: มาตรา ๒๗ leaves it to a ministerial regulation
954
+ ("ให้เป็นไปตามแบบที่กำหนดในกฎกระทรวง"), and that regulation was NOT secured
955
+ in this pass. The red ground and the reported "one or two Thai consonants
956
+ plus four digits" grammar are therefore corroboration-only and are marked
957
+ as such on the design block and the pattern note. A verifier should either
958
+ pin the ministerial regulation or cut this series' design claims.
959
+ Live-issue caveat: DLT announced in 2015 an intention to abolish red
960
+ plates in B.E. 2560 (2017); Thai press since reports them still in use.
961
+ No instrument either way was secured, so the series is left OPEN.
962
+
963
+ - id: th-test-tcqc-2017
964
+ class: temporary
965
+ categories: [car, motorcycle]
966
+ period: { start: 2017 }
967
+ period_evidence: enabling-instrument
968
+ matching: strict
969
+ format:
970
+ pattern: "LL-9999"
971
+ regex: '\A[A-Z]{2}-\d{1,4}\z'
972
+ regex_strict: '\A(?:TC|QC)-\d{1,4}\z'
973
+ charset:
974
+ prefixes: ["TC", "QC"]
975
+ prefix_basis: corroboration-only
976
+ note: >-
977
+ The 2560 announcement prescribes the mark by an ANNEXED FORM
978
+ ("เครื่องหมายแสดงการใช้รถ ... ให้เป็นไปตามแบบแนบท้ายประกาศนี้", ข้อ ๗)
979
+ and the annex is an image: the letters are not in the Gazette PDF's
980
+ text layer. TC (รถทดสอบก่อนผลิต, pre-production test) and QC
981
+ (รถทดสอบคุณภาพ, quality test) are reported by the DLT Chanthaburi
982
+ provincial office and by encyclopaedic sources; the DLT page did not
983
+ respond on 2026-08-02. Treat the LETTERS as unverified and the
984
+ INSTRUMENT, the dates and the two vehicle definitions as primary.
985
+ design:
986
+ plate: { w: 340, h: 150, unit: mm }
987
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
988
+ foreground: "#000000"
989
+ band: { side: none }
990
+ emblem: { present: true, rendered: placeholder }
991
+ design_basis: corroboration-only
992
+ display: "ข้อ ๙ (๑) (ข): one at the front and one at the rear, 'เว้นแต่รถจักรยานยนต์ให้ติดที่ด้านท้ายรถเพียงด้านเดียว'"
993
+ validity:
994
+ pre_production_days: 180
995
+ quality_test_days: 90
996
+ note: "ข้อ ๘: the permit runs 180 days for a pre-production test vehicle and 90 days for a quality-test vehicle, from the day of permission"
997
+ region_encoding: none
998
+ sources:
999
+ - "https://web.archive.org/web/2020id_/https://www.ratchakitcha.soc.go.th/DATA/PDF/2560/E/092/6.PDF # ประกาศกรมการขนส่งทางบก ... รถที่ใช้เพื่อการทดสอบ พ.ศ. ๒๕๖๐ — ข้อ ๑ in force 1 April 2017; ข้อ ๒ the definitions of รถทดสอบก่อนผลิต and รถทดสอบคุณภาพ; ข้อ ๗ the annexed form and the rule that quality-test marks are interchangeable between vehicles; ข้อ ๘ permit lives; ข้อ ๙ display and conditions; made under มาตรา ๖/๑ วรรคสาม"
1000
+ notes: >-
1001
+ TEST-VEHICLE MARK (เครื่องหมายแสดงการใช้รถที่ใช้เพื่อการทดสอบ), in force
1002
+ 1 April 2017. The instrument is fully primary and unusually informative —
1003
+ it even provides that a QUALITY-TEST mark "ให้ใช้สับเปลี่ยนกันได้ไม่เฉพาะ
1004
+ คันรถ" (may be swapped between vehicles, unlike the pre-production mark,
1005
+ which is issued per vehicle). Only the two-letter prefixes are unverified.
1006
+ DATE DISAGREEMENT, recorded not averaged: the instrument says 1 April 2017;
1007
+ encyclopaedic sources say 3 April 2017. The instrument governs.
1008
+ `class: temporary` is used because the controlled vocabulary's temporary
1009
+ entry expressly covers transit and short-validity plates and this mark has
1010
+ a statutory 90/180-day life; it is NOT a dealer plate (that is
1011
+ th-trade-red, under a different section of the Act).
1012
+
1013
+ - id: th-international-english
1014
+ class: temporary
1015
+ categories: [car, truck, van, bus]
1016
+ period: { start: 2011 }
1017
+ period_evidence: instrument-in-force
1018
+ matching: recall-only
1019
+ format:
1020
+ pattern: "LL-999"
1021
+ regex: '\A[A-Z0-9]{2,3}\s?-\s?\d{1,4}\z'
1022
+ pattern_note: >-
1023
+ The DLT press release gives exactly two specimens and no grammar:
1024
+ "HA - 753 THAILAND" and "3K-201 THAILAND". The regex is the union of
1025
+ those two shapes generalised — two or three Latin/Arabic characters,
1026
+ a dash, and up to four digits — and it is deliberately wider than
1027
+ anything sourced, hence `matching: recall-only`.
1028
+ fields:
1029
+ - { name: transliterated_prefix, script: Latin, values: "a Latin transliteration of the Thai category letters; the code table is in ระเบียบกรมการขนส่งทางบกว่าด้วยการออกเอกสารและเครื่องหมายกำกับรถเพื่อนำรถไปใช้ระหว่างประเทศ พ.ศ. ๒๕๕๔, which was NOT secured — recorded gap" }
1030
+ - { name: number, script: "Arabic numerals" }
1031
+ - { name: country_word, script: Latin, values: ["THAILAND"], note: "printed below the mark" }
1032
+ design:
1033
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
1034
+ foreground: "#000000"
1035
+ band: { side: none }
1036
+ design_basis: corroboration-only
1037
+ region_encoding: none
1038
+ sources:
1039
+ - "https://web.archive.org/web/20141016101731/http://www.dlt.go.th/th/attachments/plan48-51/2532_75-03-54.pdf # DLT press release no. 75 of 18 March 2011, over the name of the Director-General นายเฉลิมไท ญาณภิรัต: the English-language plate is issued for vehicles permitted to be used temporarily in Laos, Myanmar, Cambodia, Vietnam and southern China (Yunnan and Guangxi); the specimens 'HA - 753 THAILAND' and '3K-201 THAILAND'; the duty to refit the Thai plate on return; the fine of not more than 2,000 baht for using it in Thailand; and the making of ระเบียบกรมการขนส่งทางบกว่าด้วยการออกเอกสารและเครื่องหมายกำกับรถเพื่อนำรถไปใช้ระหว่างประเทศ พ.ศ. ๒๕๕๔"
1040
+ notes: >-
1041
+ INTERNATIONAL-USE PLATE (แผ่นป้ายทะเบียนรถที่เป็นภาษาอังกฤษ) — the only
1042
+ routinely-issued Thai plate written in the Latin alphabet, and the only
1043
+ one that is ILLEGAL AT HOME: the DLT release states that keeping it fitted
1044
+ inside Thailand is an offence carrying a fine of up to 2,000 baht under
1045
+ the Motor Vehicle Act. period.start 2011 carries `instrument-in-force`
1046
+ because the 2011 DLT regulation named in the release IMPROVES an existing
1047
+ practice rather than creating it ("เพื่อเป็นการปรับปรุงระเบียบ..."), and
1048
+ the regulation itself was not retrieved. DISAGREEMENT RECORDED, NOT
1049
+ AVERAGED: an encyclopaedic secondary dates availability to 2008. The
1050
+ transliteration table that maps Thai consonants to Latin codes is the key
1051
+ missing artefact for a parse API and is the top follow-up for this
1052
+ jurisdiction.
1053
+
1054
+ # =========================================================================
1055
+ # BLOCK B — LAND TRANSPORT ACT B.E. 2522 PLATES (ประกาศกรมการขนส่งทางบก
1056
+ # พ.ศ. ๒๕๕๔). These are the ALL-NUMERIC commercial plates, and they are the
1057
+ # only Thai series whose serial fits the dataset's serial alphabet without
1058
+ # loss. Both carry sourced `regex_strict` twins built from the six
1059
+ # vehicle-type code bands of ข้อ ๒ (๓).
1060
+ # =========================================================================
1061
+
1062
+ - id: th-lta-public-yellow-2011
1063
+ class: standard
1064
+ categories: [bus, truck]
1065
+ period: { start: 2011 }
1066
+ period_evidence: instrument-in-force
1067
+ matching: strict
1068
+ format:
1069
+ pattern: "99-9999"
1070
+ regex: '\A\d{2}-\d{4}\z'
1071
+ regex_strict: '\A(?:1\d|2\d|3\d|6\d|7\d)-(?!0000)\d{4}\z'
1072
+ charset:
1073
+ type_code_bands:
1074
+ - { code_range: "10-19", thai: "รถโดยสารประจำทาง", en: "scheduled passenger transport" }
1075
+ - { code_range: "20-29", thai: "รถขนาดเล็ก", en: "small-vehicle transport" }
1076
+ - { code_range: "30-39", thai: "รถโดยสารไม่ประจำทาง", en: "non-scheduled passenger transport" }
1077
+ - { code_range: "60-69", thai: "รถบรรทุกไม่ประจำทาง", en: "non-scheduled goods transport" }
1078
+ - { code_range: "70-79", thai: "รถบรรทุกไม่ประจำทาง", en: "non-scheduled goods transport (the band added by this instrument because 60-69 was nearly exhausted)" }
1079
+ serial_rule: >-
1080
+ ข้อ ๒ (๓), verbatim: "หมายเลขทะเบียนรถใช้เลข ๔ หลัก ตั้งแต่ลำดับหมายเลข
1081
+ ๐๐๐๑ ถึงหมายเลข ๙๙๙๙ แล้วเริ่มต้นโดยใช้เลขรหัสแสดงประเภทรถเดิมลำดับ
1082
+ ถัดไป" — the registration number uses FOUR digits, 0001 to 9999, and
1083
+ then restarts on the next code in the same vehicle-type band. This is
1084
+ why `regex_strict` forbids 0000 and why leading zeros are REQUIRED
1085
+ rather than forbidden — the opposite of most jurisdictions.
1086
+ fields:
1087
+ - { name: country_word, line: 1, script: Latin, values: ["THAILAND"], min_h_mm: 24 }
1088
+ - { name: province_code, line: 1, script: "Arabic numerals", min_h_mm: 24, note: "เลขรหัสจังหวัด — a NUMERIC province code, unlike the Motor-Vehicle-Act plate which spells the province out. The code list is not in the instrument" }
1089
+ - { name: vehicle_type_code, line: 2, script: "Arabic numerals", values: "two digits from the bands above", min_h_mm: 100, min_w_mm: 50 }
1090
+ - { name: separator_bar, line: 2, note: "ขีดตามทางยาวคั่นกลาง between the type code and the serial, at least 1.5 cm wide x 2.5 cm long — a printed separator, spelled '-'" }
1091
+ - { name: registration_number, line: 2, script: "Arabic numerals", values: "0001-9999", min_h_mm: 100, min_w_mm: 50 }
1092
+ - { name: province_name, line: 3, script: Thai, min_h_mm: 25 }
1093
+ design:
1094
+ plate: { w: 440, h: 220, unit: mm }
1095
+ background: { color: "#FFD400", finish: retroreflective, hex_basis: observed }
1096
+ foreground: "#000000"
1097
+ band: { side: none }
1098
+ emblem: { present: true, rendered: placeholder, note: "ขส roundel at the LOWER LEFT corner — the opposite corner from the Motor-Vehicle-Act car plate" }
1099
+ embossed: true
1100
+ display: "ข้อ ๓ (๑): one at the front and one at the rear"
1101
+ region_encoding: "plates/_decode/th-registration-elements.yml"
1102
+ sources:
1103
+ - "https://web.archive.org/web/20160304073451/http://www.ratchakitcha.soc.go.th/DATA/PDF/2554/E/044/52.PDF # ข้อ ๒ (๑) 22 x 44 cm, retroreflective YELLOW ground, three lines (THAILAND + province code / type code - number / province name in Thai), ขส roundel lower left, all embossed in black, and the five character-metric minima (ก)-(จ); ข้อ ๒ (๓) the four-digit 0001-9999 rule and the six type-code bands; ข้อ ๓ (๑) display"
1104
+ notes: >-
1105
+ PUBLIC-TRANSPORT PLATE under the Land Transport Act — retroreflective
1106
+ YELLOW. This is the plate on every intercity bus and hired truck in
1107
+ Thailand, and it is the best-evidenced Thai series in this file: the
1108
+ layout, the size, the colour, the character metrics, the separator, the
1109
+ serial range and the type-code bands are all in one primary instrument.
1110
+ period.start 2011 carries `instrument-in-force`, not `enabling-instrument`:
1111
+ ข้อ ๑ revokes a 13 September B.E. 2549 (2006) announcement and ข้อ ๔ saves
1112
+ plates made under an announcement of 14 April B.E. 2530 (1987), so the
1113
+ format is at least 24 years older than this instrument. Those two earlier
1114
+ announcements are the true "one series back" and neither was secured — a
1115
+ recorded gap and the cleanest available follow-up target for Thailand.
1116
+
1117
+ - id: th-lta-private-white-2011
1118
+ class: standard
1119
+ categories: [bus, truck]
1120
+ period: { start: 2011 }
1121
+ period_evidence: instrument-in-force
1122
+ matching: strict
1123
+ format:
1124
+ pattern: "99-9999"
1125
+ regex: '\A\d{2}-\d{4}\z'
1126
+ regex_strict: '\A(?:4\d|5\d|8\d|9\d)-(?!0000)\d{4}\z'
1127
+ charset:
1128
+ type_code_bands:
1129
+ - { code_range: "40-49", thai: "รถโดยสารส่วนบุคคล", en: "private passenger transport" }
1130
+ - { code_range: "50-59", thai: "รถบรรทุกส่วนบุคคล", en: "private goods transport" }
1131
+ - { code_range: "80-99", thai: "รถบรรทุกส่วนบุคคล", en: "private goods transport (second band)" }
1132
+ serial_rule: "as th-lta-public-yellow-2011: four digits, 0001 to 9999, then the next code in the band"
1133
+ design:
1134
+ plate: { w: 440, h: 220, unit: mm }
1135
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
1136
+ foreground: "#000000"
1137
+ band: { side: none }
1138
+ emblem: { present: true, rendered: placeholder, note: "ขส roundel lower left" }
1139
+ embossed: true
1140
+ region_encoding: "plates/_decode/th-registration-elements.yml"
1141
+ sources:
1142
+ - "https://web.archive.org/web/20160304073451/http://www.ratchakitcha.soc.go.th/DATA/PDF/2554/E/044/52.PDF # ข้อ ๒ (๒), verbatim: 'แผ่นป้ายเลขทะเบียนรถที่ใช้ในการขนส่งส่วนบุคคล มีลักษณะและขนาดเป็นไปตาม (๑) แต่มีพื้นเป็นวัสดุสะท้อนแสงสีขาว'; ข้อ ๒ (๓) (ง) (ฉ) the private bands 40-49, 50-59 and 80-99"
1143
+ notes: >-
1144
+ PRIVATE-TRANSPORT PLATE under the Land Transport Act — identical in every
1145
+ dimension and metric to the yellow public plate, on a retroreflective
1146
+ WHITE ground. The instrument says so in one sentence, which is why the
1147
+ design block here is short and the sources line quotes it. The
1148
+ colour/type-code correspondence is exact and is the useful decode fact:
1149
+ a Thai commercial plate whose type code begins 4, 5, 8 or 9 is white and
1150
+ privately operated; 1, 2, 3, 6 or 7 is yellow and for hire.