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,205 @@
1
+ # plates/_decode/jp-use-marks.yml — the 平仮名 (hiragana) / ローマ字 (Roman
2
+ # letter) USE-CATEGORY mark, the third field of a Japanese plate, as enacted.
3
+ #
4
+ # WHAT IT IS. Every Japanese registration number and vehicle number carries one
5
+ # character (occasionally two — see `motorcycle_over_250cc` group 2 below) that
6
+ # states WHAT THE VEHICLE IS USED FOR: for-hire (bus, taxi, freight carrier),
7
+ # ordinary private, rental/car-share, or duty-exempt foreign-owned. It is the
8
+ # single highest-value decode dimension on the plate after the place name,
9
+ # because it is the one field that a photograph resolves without any external
10
+ # table — and because the PERMITTED SET DIFFERS BY VEHICLE SYSTEM, which is what
11
+ # this file exists to make machine-readable without folklore.
12
+ #
13
+ # FOUR SETS, FOUR INSTRUMENTS, AND THEY DO NOT INTERCHANGE. This is the trap:
14
+ #
15
+ # * registered vehicles (登録自動車 — 普通/小型, the green-on-white and
16
+ # white-on-green plates): 自動車登録規則 別表第三. For-hire = あいうえかきくけこを.
17
+ # * inspected kei vehicles (検査対象軽自動車, the black-on-yellow and
18
+ # yellow-on-black plates): 道路運送車両法施行規則 別表第二の五. For-hire = りれ.
19
+ # * motorcycles over 250 cc (二輪の小型自動車): 道路運送車両法施行規則 別表第三
20
+ # (a DIFFERENT 別表第三 from the first bullet's — same label, different
21
+ # ordinance). For-hire = ゆりれ.
22
+ # * 126-250 cc motorcycles (検査対象外軽自動車): NO TABLE EXISTS. See `gaps`.
23
+ #
24
+ # Read that list twice. り and れ are FOR-HIRE marks on a kei plate and PRIVATE
25
+ # marks on a registered plate; れ is the rental mark on a registered plate and a
26
+ # for-hire mark on a kei plate; わ is rental on both but sits alone in the kei
27
+ # table and paired with れ in the registered one. A decoder that resolves the
28
+ # hiragana without first resolving which system the plate belongs to will invert
29
+ # the commercial/private distinction on a large fraction of Japanese traffic.
30
+ # The plate's COLOUR is what disambiguates, and the colour is itself statutory
31
+ # (see plates/jp.yml `common.colours`).
32
+ #
33
+ # WHAT IS *NOT* IN ANY OF THESE TABLES, and is therefore not asserted here:
34
+ # お, し, へ, ん appear in none of the four sets. The reasons universally given
35
+ # for their absence (お confusable with あ, し an unlucky reading, へ an
36
+ # unfortunate word, ん unpronounceable as a syllable) are folklore — no
37
+ # instrument states a reason, and none is claimed here. What IS a sourced fact is
38
+ # the omission itself, which is why every set below is written out in full.
39
+ #
40
+ # SCRIPT AND CODEPOINTS (PRD-PLATES §4, the identity-is-form rule). The hiragana
41
+ # are recorded in the instrument's own characters. The Roman letters are
42
+ # recorded TWICE: `chars` carries the instrument's FULL-WIDTH forms exactly as
43
+ # e-Gov publishes them (A = U+FF21, not U+0041), and `ascii` carries the
44
+ # half-width normalisation that plates/jp.yml's regexes are written in, because
45
+ # PRD-PLATES §2.6 confines the dataset's serial alphabet to A-Z and 0-9. The
46
+ # plate itself is embossed, not typeset; the width distinction is an artefact of
47
+ # the statute's typography, and recording both is what keeps that honest.
48
+ jurisdiction: jp
49
+ topic: use-marks
50
+ script: "Hiragana, plus Latin capitals for the duty-exempt foreign-owner sets"
51
+ authority:
52
+ name: "自動車登録規則 別表第三(第十三条関係)and 道路運送車両法施行規則 別表第二の五(第三十六条の十七関係)/ 別表第三(第三十六条の十八関係)"
53
+ url: "https://laws.e-gov.go.jp/law/345M50000800007"
54
+ sources:
55
+ - "https://laws.e-gov.go.jp/api/1/lawdata/345M50000800007 # 自動車登録規則 別表第三 — the four registered-vehicle rows below, verbatim; and 第十三条第一項第三号, the field itself; accessed 2026-08-02"
56
+ - "https://laws.e-gov.go.jp/api/1/lawdata/326M50000800074 # 道路運送車両法施行規則 別表第二の五 (kei) and 別表第三 (motorcycles over 250 cc), verbatim; and 第三十六条の十七第一項第三号, 第三十六条の十八第一項第二号, 第六十三条の四第一項第三号; accessed 2026-08-02"
57
+ - "https://laws.e-gov.go.jp/law/326M50000800074 # Form No. 13 remark (6), the character-width rule that presupposes the two-character CLV+hiragana combination on motorcycle plates"
58
+ period: { start: 1970 }
59
+ period_evidence: instrument-in-force
60
+ period_note: >-
61
+ 1970 is the in-force date of 自動車登録規則 (1 March 1970), the instrument that
62
+ carries the registered-vehicle set. The kei and motorcycle sets live in
63
+ 道路運送車両法施行規則 (Ministerial Ordinance No. 74 of 1951). Both are
64
+ consolidations documenting a practice older than themselves; neither dates the
65
+ use-mark convention's start, and no primary for that start was secured. The
66
+ two-character CLV+hiragana motorcycle combination is demonstrably LATER than
67
+ the rest of the table (it exists because single characters ran out) but the
68
+ amendment that introduced it was not pinned — recorded gap.
69
+
70
+ sets:
71
+
72
+ # =========================================================================
73
+ # 1. REGISTERED VEHICLES (登録自動車) — 自動車登録規則 別表第三(第十三条関係)
74
+ # These are the green-on-white (private) and white-on-green (for-hire)
75
+ # plates: 普通自動車 and 小型自動車, i.e. everything above 660 cc.
76
+ # =========================================================================
77
+ registered:
78
+ applies_to: "登録自動車 (普通自動車 + 小型自動車) — plates/jp.yml series jp-registered-*"
79
+ instrument: "自動車登録規則 別表第三(第十三条関係)"
80
+ groups:
81
+ - group: 1
82
+ category_ja: "自動車運送事業の用に供する自動車"
83
+ category_en: "vehicles used for a motor carrier business (for hire)"
84
+ chars: "あいうえかきくけこを"
85
+ count: 10
86
+ plate_colour: "white characters on green (事業用)"
87
+ - group: 2
88
+ category_ja: "自家用自動車(次号及び第4号に規定するものを除く。)"
89
+ category_en: "private vehicles, other than those in groups 3 and 4"
90
+ chars: "さすせそたちつてとなにぬねのはひふほまみむめもやゆらりるろ"
91
+ count: 29
92
+ plate_colour: "green characters on white (自家用)"
93
+ - group: 3
94
+ category_ja: "道路運送法施行規則(昭和26年運輸省令第75号)第52条の規定により受けた許可に係る自家用自動車"
95
+ category_en: "private vehicles under a permit granted by art. 52 of the Road Transport Act Enforcement Regulations — i.e. rental cars (レンタカー) and car-share fleets"
96
+ chars: "れわ"
97
+ count: 2
98
+ plate_colour: "green characters on white (自家用)"
99
+ - group: 4
100
+ category_ja: "日本国籍を有しない者が所有する自家用自動車で、法令の規定により関税又は消費税が免除されているもの及び別に国土交通大臣が指定するもの"
101
+ category_en: "private vehicles owned by persons without Japanese nationality and exempted from customs duty or consumption tax, plus those separately designated by the Minister — in practice the US-forces personnel plates"
102
+ chars: "EHKMTYよ"
103
+ ascii: "EHKMTY"
104
+ ascii_note: >-
105
+ Six Latin capitals plus the hiragana よ. The Latin members ARE in the
106
+ dataset's serial alphabet, so unlike every other row in this file they
107
+ appear inside plates/jp.yml's regexes (series jp-registered-usforces).
108
+ Y is the member almost every photograph shows.
109
+ count: 7
110
+ plate_colour: "green characters on white (自家用)"
111
+
112
+ # =========================================================================
113
+ # 2. INSPECTED KEI VEHICLES (検査対象軽自動車) — 道路運送車両法施行規則
114
+ # 別表第二の五(第三十六条の十七関係). The yellow plates, up to 660 cc.
115
+ # NOTE THE INVERSION against set 1: り and れ are FOR-HIRE here.
116
+ # =========================================================================
117
+ kei:
118
+ applies_to: "検査対象軽自動車 — plates/jp.yml series jp-kei-*"
119
+ instrument: "道路運送車両法施行規則 別表第二の五(第三十六条の十七関係)"
120
+ groups:
121
+ - group: 1
122
+ category_ja: "事業用自動車"
123
+ category_en: "for-hire vehicles"
124
+ chars: "りれ"
125
+ count: 2
126
+ plate_colour: "yellow characters on black (事業用)"
127
+ - group: 2
128
+ category_ja: "自家用自動車(次号及び第4号に規定するものを除く。)"
129
+ category_en: "private vehicles, other than those in groups 3 and 4"
130
+ chars: "あいうえかきくけこさすせそたちつてとなにぬねのはひふほまみむめもやゆよらるろを"
131
+ count: 39
132
+ plate_colour: "black characters on yellow (自家用)"
133
+ note: >-
134
+ The widest of the four sets: it takes both the for-hire block of the
135
+ registered table (あいうえかきくけこを) and most of its private block,
136
+ because a kei plate signals for-hire use through り/れ instead.
137
+ - group: 3
138
+ category_ja: "道路運送法施行規則第52条の規定により受けた許可に係る自家用自動車"
139
+ category_en: "rental / car-share kei vehicles"
140
+ chars: "わ"
141
+ count: 1
142
+ plate_colour: "black characters on yellow (自家用)"
143
+ - group: 4
144
+ category_ja: "日本国籍を有しない者が所有する自家用自動車で、法令の規定により関税又は消費税が免除されているもの。"
145
+ category_en: "duty-exempt kei vehicles owned by persons without Japanese nationality"
146
+ chars: "AB"
147
+ ascii: "AB"
148
+ count: 2
149
+ plate_colour: "black characters on yellow (自家用)"
150
+
151
+ # =========================================================================
152
+ # 3. MOTORCYCLES OVER 250 cc (二輪の小型自動車) — 道路運送車両法施行規則
153
+ # 別表第三(第三十六条の十八関係). White plate with a GREEN BORDER; no
154
+ # class code at all (第三十六条の十八 lists only three fields).
155
+ # =========================================================================
156
+ motorcycle_over_250cc:
157
+ applies_to: "二輪の小型自動車 — plates/jp.yml series jp-motorcycle-*"
158
+ instrument: "道路運送車両法施行規則 別表第三(第三十六条の十八関係)"
159
+ groups:
160
+ - group: 1
161
+ category_ja: "事業用自動車"
162
+ category_en: "for-hire motorcycles"
163
+ chars: "ゆりれ"
164
+ count: 3
165
+ plate_colour: "white characters on green, white border (事業用)"
166
+ - group: 2
167
+ category_ja: "自家用自動車(次号及び第4号に規定するものを除く。)"
168
+ category_en: "private motorcycles, other than those in groups 3 and 4"
169
+ chars: "あいうえかきくけこさすせそたちつてとなにぬねのはひふほまみむめもやらるを"
170
+ count: 36
171
+ plate_colour: "green characters on white, green border (自家用)"
172
+ combination:
173
+ chars: "CLV"
174
+ ascii: "CLV"
175
+ rule_ja: "(2) 次に掲げる文字をその順序により組み合わせたもの イ CLV ロ (1)に掲げる文字"
176
+ rule_en: >-
177
+ "characters combined in the following order: (a) C, L or V; (b) a
178
+ character listed in (1)" — a TWO-CHARACTER use mark, a Latin capital
179
+ followed by a hiragana (Cあ, Lあ, Vあ ...), giving three more passes
180
+ through the serial space when single characters run out. Form No. 13
181
+ remark (6) confirms it physically, prescribing a 17.5 mm office-mark
182
+ width and a 19 mm Latin-letter width "自家用又は事業用の別等を表示する
183
+ 文字として文字の組合せを用いる場合" (where a character COMBINATION is
184
+ used as the use mark). This is the one place in the Japanese system
185
+ where a Latin capital appears on an ordinary private plate.
186
+ - group: 3
187
+ category_ja: "道路運送法施行規則第52条の規定により受けた許可に係る自家用自動車"
188
+ category_en: "rental motorcycles"
189
+ chars: "ろわ"
190
+ count: 2
191
+ plate_colour: "green characters on white, green border (自家用)"
192
+ - group: 4
193
+ category_ja: "日本国籍を有しない者が所有する自家用自動車で、法令の規定により関税又は消費税が免除されているもの及び別に国土交通大臣が指定するもの"
194
+ category_en: "duty-exempt motorcycles owned by persons without Japanese nationality"
195
+ chars: "ABEHKMTYよ"
196
+ ascii: "ABEHKMTY"
197
+ count: 9
198
+ plate_colour: "green characters on white, green border (自家用)"
199
+
200
+ gaps:
201
+ - "126-250 cc motorcycles (検査対象外軽自動車) have NO enacted use-mark table. 道路運送車両法施行規則 第六十三条の四第一項第三号 requires 「自家用又は事業用の別等を表示する平仮名又はローマ字」 and, unlike its three siblings, cites no 別表. The permitted set for that class is therefore unsourced and is not asserted anywhere in this dataset."
202
+ - "126-250 cc motorcycles likewise have no enacted CLASS-CODE table: 第六十三条の四第一項第一号 requires 「検査対象外軽自動車の用途による分類番号を表示するアラビア数字」 (one Arabic numeral) and cites no appendix. The statutory drawing (Form No. 14) shows 6 in the example, which is an illustration and not a rule."
203
+ - "The order WITHIN each set is the instrument's own printed order and is NOT an issuance order. Nothing sourced says which character is issued first, or that the sets advance in the printed sequence, so no era inference may be drawn from a use mark."
204
+ - "The amendment that added the CLV two-character motorcycle combination was not pinned; only its presence in the consolidated text and in Form No. 13 remark (6) is evidenced."
205
+ - "お, し, へ and ん are absent from all four sets. The absence is sourced (the sets are exhaustive); the usual explanations for it are not, and are recorded as folklore in the jurisdiction dossier."
@@ -0,0 +1,146 @@
1
+ # plates/_decode/kr-authority-marks.yml — the Korean 관할관청 기호 (authority
2
+ # mark): the hangul place-name that appears ONLY on transport-business plates.
3
+ #
4
+ # THE DECODE TRAP THIS TABLE EXISTS TO STOP. Korea is the mirror image of
5
+ # Germany: a German plate always encodes a district, a Korean plate USUALLY
6
+ # ENCODES NOTHING. 「자동차 등록번호판 등의 기준에 관한 고시」 Article 6, in
7
+ # force, verbatim:
8
+ #
9
+ # "제6조(관할관청 기호표시) 관할관청의 기호표시는 다음과 같이 하며,
10
+ # 제2조제2항제3호에 따른 이륜자동차번호판에는 관할 시ㆍ군 또는 구의 명칭을
11
+ # 함께 표시한다. 다만, 비사업용ㆍ대여사업용 자동차의 등록번호판 및 별표
12
+ # 15의2에 따른 이륜자동차번호판에는 관할관청의 기호표시를 하지 아니한다."
13
+ #
14
+ # ["Article 6 (Marking of the competent authority) The mark of the competent
15
+ # authority shall be as follows, and on the motorcycle plates under Article
16
+ # 2(2)3 the name of the competent city/county/district shall also be shown.
17
+ # PROVIDED THAT the registration plates of non-transport-business and
18
+ # vehicle-rental-business vehicles, and the motorcycle plates under Annex
19
+ # 15-2, shall NOT bear the mark of the competent authority." — translation
20
+ # ours; the proviso is the operative sentence for a parse API]
21
+ #
22
+ # So: a private Korean car, a rental Korean car and (from 2026-03-20) a Korean
23
+ # motorcycle carry NO geography at all. Only the yellow transport-business
24
+ # plates, the pre-2026 motorcycle plates and the temporary-operation plates do.
25
+ # A consumer that decodes region from a white Korean plate is inventing it.
26
+ #
27
+ # The statutory basis of the proviso is one level up, in 「자동차관리법 시행규칙」
28
+ # (Enforcement Rule of the Motor Vehicle Management Act) Article 6(2), verbatim:
29
+ # "자동차운수사업용자동차의 등록번호판에는 관할관청을 기호로 표시하여야 한다.
30
+ # 다만, 「여객자동차 운수사업법」 제28조에 따른 자동차대여사업에 사용하는
31
+ # 자동차는 그러하지 아니하다." [전문개정 2004.12.6]
32
+ # ["The registration plate of a transport-business motor vehicle shall bear
33
+ # the competent authority as a symbol. Provided that this shall not apply to
34
+ # motor vehicles used in the vehicle-rental business under Article 28 of the
35
+ # Passenger Transport Service Act." — wholly amended 6 December 2004]
36
+ # That [전문개정 2004.12.6] tag is the instrument date this dataset uses for the
37
+ # Korean region-less plate; see plates/kr.yml, series kr-noncommercial-short.
38
+ #
39
+ # SOURCE SHAPE: like the Article 5 table, the Article 6 list is published on
40
+ # law.go.kr as a raster IMAGE inside the article text (flSeq 150966225 for the
41
+ # in-force 제2025-121호 text, flSeq 158473203 for 제2025-676호 — identical). The
42
+ # seventeen rows below were read off that image and are transcribed verbatim in
43
+ # hangul; the ISO 3166-2 codes are OUR mapping, added for consumers and marked
44
+ # as such.
45
+ #
46
+ # Referenced by: plates/kr.yml, every series with region_encoding pointing here.
47
+ jurisdiction: kr
48
+ topic: authority-marks
49
+ script: Hangul (Korean), Unicode Hangul Syllables block
50
+ authority:
51
+ name: 국토교통부 (Ministry of Land, Infrastructure and Transport) — 「자동차 등록번호판 등의 기준에 관한 고시」 제6조
52
+ url: "https://www.law.go.kr/%ED%96%89%EC%A0%95%EA%B7%9C%EC%B9%99/%EC%9E%90%EB%8F%99%EC%B0%A8%EB%93%B1%EB%A1%9D%EB%B2%88%ED%98%B8%ED%8C%90%EB%93%B1%EC%9D%98%EA%B8%B0%EC%A4%80%EC%97%90%EA%B4%80%ED%95%9C%EA%B3%A0%EC%8B%9C"
53
+ sources:
54
+ - "https://www.law.go.kr/DRF/lawService.do?OC=test&target=admrul&ID=2100000256300&type=XML # 제2025-121호 Art. 6 text (quoted in full above) + its list image flSeq=150966225 — all 17 rows"
55
+ - "https://www.law.go.kr/DRF/lawService.do?OC=test&target=law&LM=%EC%9E%90%EB%8F%99%EC%B0%A8%EA%B4%80%EB%A6%AC%EB%B2%95%20%EC%8B%9C%ED%96%89%EA%B7%9C%EC%B9%99&type=XML # 시행규칙 제6조제2항, quoted above, tagged [전문개정 2004.12.6]"
56
+ - "https://www.law.go.kr/DRF/lawService.do?OC=test&target=admrul&ID=2000000009069&type=XML # 제2009-812호 Art. 6 — the same proviso wording ('비사업용 및 대여사업용 ... 기호표시를 하지 아니하며'), i.e. the region-less private plate was already the rule in 2009"
57
+ accessed: "2026-08-02"
58
+ period: { start: 2012 }
59
+ period_evidence: instrument-in-force-upper-bound
60
+ period_note: >-
61
+ The seventeen-row list as transcribed can be no older than 2012: 세종특별자치시
62
+ (Sejong Special Self-Governing City) was created on 2012-07-01 and its mark
63
+ 세종 is in the list. The other sixteen marks are much older. The list is NOT
64
+ dated inside the notice, so 2012 is a floor derived from one row, and this
65
+ record says so rather than dating the table to the notice's own promulgation.
66
+ maximal_munch: false
67
+ maximal_munch_note: >-
68
+ Unlike the Spanish province contraseñas, Korean authority marks are NOT
69
+ prefix-ambiguous: each is exactly two hangul syllables, they are set in their
70
+ own cell on the plate (Annex 4 gives that cell 55 mm of a 520 mm plate), and
71
+ no mark is a prefix of another. Read exactly two syllables and stop.
72
+
73
+ # ---------------------------------------------------------------------------
74
+ # NAMING DRIFT, RECORDED (PRD-PLATES §9 "region-decode tables rot").
75
+ # Two of the seventeen jurisdictions have been renamed since the notice's list
76
+ # was last set, and the notice still prints the OLD full names. The two-syllable
77
+ # MARKS are unaffected — 강원 and 전북 are what the plate shows either way — so
78
+ # the decode is stable and only the `name_ko_in_notice` column is stale.
79
+ # * 강원도 -> 강원특별자치도 (Gangwon State), effective 2023-06-11
80
+ # * 전라북도 -> 전북특별자치도 (Jeonbuk State), effective 2024-01-18
81
+ # Those two renamings are NOT sourced here (they are outside this notice); they
82
+ # are flagged as a verification target rather than asserted.
83
+ # ---------------------------------------------------------------------------
84
+ codes:
85
+ - { mark: "서울", name_ko_in_notice: "서울특별시", name_en: "Seoul Special City", iso_3166_2: "KR-11" }
86
+ - { mark: "부산", name_ko_in_notice: "부산광역시", name_en: "Busan Metropolitan City", iso_3166_2: "KR-26" }
87
+ - { mark: "대구", name_ko_in_notice: "대구광역시", name_en: "Daegu Metropolitan City", iso_3166_2: "KR-27" }
88
+ - { mark: "인천", name_ko_in_notice: "인천광역시", name_en: "Incheon Metropolitan City", iso_3166_2: "KR-28" }
89
+ - { mark: "광주", name_ko_in_notice: "광주광역시", name_en: "Gwangju Metropolitan City", iso_3166_2: "KR-29" }
90
+ - { mark: "대전", name_ko_in_notice: "대전광역시", name_en: "Daejeon Metropolitan City", iso_3166_2: "KR-30" }
91
+ - { mark: "울산", name_ko_in_notice: "울산광역시", name_en: "Ulsan Metropolitan City", iso_3166_2: "KR-31" }
92
+ - { mark: "세종", name_ko_in_notice: "세종특별자치시", name_en: "Sejong Special Self-Governing City", iso_3166_2: "KR-50" }
93
+ - { mark: "경기", name_ko_in_notice: "경기도", name_en: "Gyeonggi Province", iso_3166_2: "KR-41" }
94
+ - { mark: "강원", name_ko_in_notice: "강원도", name_en: "Gangwon", iso_3166_2: "KR-42", naming_drift: "renamed 강원특별자치도 in 2023; mark unchanged; renaming not sourced here" }
95
+ - { mark: "충북", name_ko_in_notice: "충청북도", name_en: "North Chungcheong Province", iso_3166_2: "KR-43" }
96
+ - { mark: "충남", name_ko_in_notice: "충청남도", name_en: "South Chungcheong Province", iso_3166_2: "KR-44" }
97
+ - { mark: "전북", name_ko_in_notice: "전라북도", name_en: "North Jeolla", iso_3166_2: "KR-45", naming_drift: "renamed 전북특별자치도 in 2024; mark unchanged; renaming not sourced here" }
98
+ - { mark: "전남", name_ko_in_notice: "전라남도", name_en: "South Jeolla Province", iso_3166_2: "KR-46" }
99
+ - { mark: "경북", name_ko_in_notice: "경상북도", name_en: "North Gyeongsang Province", iso_3166_2: "KR-47" }
100
+ - { mark: "경남", name_ko_in_notice: "경상남도", name_en: "South Gyeongsang Province", iso_3166_2: "KR-48" }
101
+ - { mark: "제주", name_ko_in_notice: "제주도", name_en: "Jeju", iso_3166_2: "KR-49" }
102
+
103
+ iso_mapping_note: >-
104
+ The `iso_3166_2` column is OURS, not the notice's — the notice gives only the
105
+ Korean names. It is included because a consumer decoding a Korean plate wants
106
+ a stable subdivision key, and it is flagged so nobody mistakes it for a
107
+ sourced claim. KR-49 is 제주특별자치도 (Jeju Special Self-Governing Province);
108
+ the notice still writes 제주도.
109
+
110
+ # ---------------------------------------------------------------------------
111
+ # THE SECOND, FINER GEOGRAPHY: motorcycles.
112
+ # Article 6's main clause requires the Annex 13/14/15 motorcycle plate to show
113
+ # "관할 시ㆍ군 또는 구의 명칭" — the name of the competent CITY, COUNTY or
114
+ # DISTRICT, alongside the provincial mark. That is a ~250-row list of local
115
+ # authorities and the notice does NOT enumerate it: the three annexes are
116
+ # distinguished only by how many syllables the local name has (Annex 13 = one,
117
+ # Annex 14 = two, Annex 15 = three), and the drawings show 서울 중 / 서울 관악
118
+ # as examples. So the motorcycle city list is an OPEN, unenumerated field here.
119
+ # ---------------------------------------------------------------------------
120
+ motorcycle_local_names:
121
+ enumerated: false
122
+ rule: >-
123
+ Annex 13 (210x115 mm) when the 시/군/구 name is ONE hangul syllable — the
124
+ drawing's example is 서울 중 (Jung-gu, Seoul). Annex 14 when it is TWO —
125
+ example 서울 관악 (Gwanak-gu, Seoul). Annex 15 when it is THREE. The
126
+ provincial mark from `codes` above is set first, then the local name.
127
+ applies_from_note: >-
128
+ From 2026-03-20 the default motorcycle plate is Annex 15-2, which Article 6
129
+ expressly exempts from the authority mark entirely, so a Korean motorcycle
130
+ registered from that date carries no geography either. The Annex 13/14/15
131
+ plates survive only under Article 2(2)3 (insufficient mounting space or
132
+ interference with lamps/reflectors).
133
+ source: "https://www.law.go.kr/DRF/lawService.do?OC=test&target=admrul&ID=2100000256300&type=XML # Art. 6 main clause; Art. 2(2)3; Annex 13/14/15 titles and drawings (flSeq 158474421/158474427/158474433)"
134
+
135
+ # ---------------------------------------------------------------------------
136
+ # THE THIRD PLACE A KOREAN PLATE NAMES AN AUTHORITY: temporary plates.
137
+ # Annexes 9-12 print the ISSUING OFFICER'S TITLE in full, not a two-syllable
138
+ # mark — the drawings show 경기도지사 (Governor of Gyeonggi Province) and
139
+ # 경상남도지사 (Governor of South Gyeongsang Province) below the serial, and the
140
+ # motorcycle temporary plate (Annex 16) shows 소공동장 (head of Sogong-dong).
141
+ # That is a free-text officer title, not a code, and it is not enumerated here.
142
+ # ---------------------------------------------------------------------------
143
+ temporary_plate_issuer:
144
+ enumerated: false
145
+ rule: "Art. 2(3): 임시운행허가번호판에는 임시운행임을 나타내는 표시 또는 기간, 발행 관청명 등을 별표 제9, 10, 11, 12, 16과 같이 표시한다 — the plate shows the mark/period and the NAME OF THE ISSUING OFFICE, in the form the annex draws."
146
+ source: "https://www.law.go.kr/DRF/lawService.do?OC=test&target=admrul&ID=2100000256300&type=XML # Art. 2(3); Annex 9 drawing (flSeq 158474397) '경기도지사'; Annex 10 (flSeq 158474403) '경상남도지사'; Annex 16 (flSeq 158474473) '소공동장'"
@@ -0,0 +1,194 @@
1
+ # plates/_decode/kr-use-syllables.yml — the Korean HANGUL USE-CATEGORY syllable.
2
+ #
3
+ # THE ONE FACT A PARSE API MUST NOT GUESS. Every Korean registration mark
4
+ # carries exactly one hangul element between its class-code digits and its
5
+ # four-digit serial (two hangul syllables on the diplomatic plate, where the
6
+ # element is a WORD, not a syllable). That element is not decoration and it is
7
+ # not a separator: it is the vehicle's USE category, and it is the only part of
8
+ # a Korean mark that says whether the vehicle is private, for-hire, rented,
9
+ # delivery or diplomatic. It is also the only part written in a non-Latin
10
+ # script, so it lives here rather than inside a regex (see the SCRIPT LINE note
11
+ # in plates/kr.yml).
12
+ #
13
+ # SOURCE: this whole table is ONE primary — 「자동차 등록번호판 등의 기준에
14
+ # 관한 고시」 (MOLIT Notice on the standards for motor-vehicle registration
15
+ # plates) Article 5(1), the table headed 구분 / 분류 / 기호 ("division /
16
+ # classification / symbol"), reproduced row-for-row below in the notice's own
17
+ # order. Article 5(1) is delegated legislation: 「자동차등록령」 (Presidential
18
+ # Decree on Motor Vehicle Registration) Article 21(1) provides, verbatim:
19
+ # "등록번호는 법 제3조에 따른 자동차의 종류와 자동차의 용도(자동차운수사업용인
20
+ # 것과 자동차운수사업용이 아닌 것으로 구분한다)에 따라 국토교통부장관이 정하여
21
+ # 고시하는 기준에 의하여 각각 순서대로 부여한다."
22
+ # ["A registration number shall be assigned in sequence according to the type
23
+ # of the motor vehicle under Article 3 of the Act and the USE of the motor
24
+ # vehicle (divided into transport-business use and non-transport-business
25
+ # use), in accordance with the standards determined and published by notice
26
+ # by the Minister of Land, Infrastructure and Transport." — translation ours]
27
+ #
28
+ # The Article 5(1) table is published on law.go.kr as a raster IMAGE inside the
29
+ # article text, not as machine-readable markup; the rows below were read off
30
+ # that image (flSeq 150966223 for the in-force 제2025-121호 text, flSeq
31
+ # 158473201 for the 제2025-676호 text — identical) and are transcribed here in
32
+ # the original hangul with a translation note per group. NOTHING here is
33
+ # transliterated into the serial alphabet: the hangul IS the datum.
34
+ #
35
+ # Referenced by: every series in plates/kr.yml via `hangul_field.decode`.
36
+ jurisdiction: kr
37
+ topic: use-syllables
38
+ script: Hangul (Korean), Unicode Hangul Syllables block
39
+ authority:
40
+ name: 국토교통부 (Ministry of Land, Infrastructure and Transport) — 「자동차 등록번호판 등의 기준에 관한 고시」 제5조
41
+ url: "https://www.law.go.kr/%ED%96%89%EC%A0%95%EA%B7%9C%EC%B9%99/%EC%9E%90%EB%8F%99%EC%B0%A8%EB%93%B1%EB%A1%9D%EB%B2%88%ED%98%B8%ED%8C%90%EB%93%B1%EC%9D%98%EA%B8%B0%EC%A4%80%EC%97%90%EA%B4%80%ED%95%9C%EA%B3%A0%EC%8B%9C"
42
+ sources:
43
+ - "https://www.law.go.kr/DRF/lawService.do?OC=test&target=admrul&ID=2100000256300&type=XML # 제2025-121호 (in force 2025-03-15), Art. 5(1) and its table image flSeq=150966223 — every row below"
44
+ - "https://www.law.go.kr/DRF/lawService.do?OC=test&target=admrul&ID=2100000180990&type=XML # 제2019-423호, Art. 5(1) table image flSeq=44282120 — the same 32/5/3/7 syllable sets, showing they predate the 3-digit reform"
45
+ - "https://www.law.go.kr/DRF/lawService.do?OC=test&target=admrul&ID=2000000009069&type=XML # 제2009-812호, Art. 5(1) table image flSeq=5123232 — the 2009 state: 일반용 was 바·사·아·자 (no 배) and 대여사업용 was 허 alone (no 하·호)"
46
+ - "https://www.law.go.kr/DRF/lawService.do?OC=test&target=law&LM=%EC%9E%90%EB%8F%99%EC%B0%A8%EB%93%B1%EB%A1%9D%EB%A0%B9&type=XML # 자동차등록령 제21조제1항, the delegation quoted above"
47
+ accessed: "2026-08-02"
48
+ period: { start: 2009 }
49
+ period_evidence: instrument-in-force-upper-bound
50
+ period_note: >-
51
+ The syllable system itself is far older than 2009 — it is the core of the
52
+ 1973 Korean mark and every secondary account dates it there. 2009 is the
53
+ earliest date this table can be read from a PRIMARY: law.go.kr's 행정규칙
54
+ (administrative-rule) archive for this notice begins at 국토교통부고시
55
+ 제2009-812호 (2009-08-24), and the pre-2009 건설교통부고시 versions are not
56
+ published there. So 2009 is an UPPER BOUND on the start of the table, not
57
+ its start. Individual ROWS are dated where the archive shows them changing
58
+ (see `added` on 배 / 하 / 호).
59
+
60
+ # ---------------------------------------------------------------------------
61
+ # HOW THE FIELD IS READ
62
+ # ---------------------------------------------------------------------------
63
+ mechanism: >-
64
+ On an ordinary (보통) or large (대형) registration plate the hangul element is
65
+ a SINGLE syllable and it sits between the class-code digits and the four-digit
66
+ serial: 123가4568 -> class 123, use 가, serial 4568. On the diplomatic plate
67
+ the element is a two-syllable WORD and it sits BEFORE the digits, stacked on
68
+ two lines or set as a pair: 외교 321-678. On the pre-2026 motorcycle plate
69
+ (Annexes 13/14/15) the element is a single syllable drawn from the 28-syllable
70
+ set below, and on the 2026 motorcycle plate (Annex 15-2) it is one syllable of
71
+ the 32-syllable non-commercial set followed by a digit (Art. 5(2)2).
72
+ disambiguation: >-
73
+ The syllable alone is NOT sufficient to classify a Korean plate: colour and
74
+ the presence of an authority mark carry the rest. A white region-less plate
75
+ with 허/하/호 is a rental car (대여사업용 — non-commercial COLOURS, commercial
76
+ USE, and Art. 6 proviso expressly withholds the authority mark from it); a
77
+ YELLOW plate always carries an authority mark and one of 바/사/아/자/배. A
78
+ blue plate is an electric vehicle, a light-green plate is a corporate-business
79
+ vehicle, and both draw their syllable from the 32-syllable non-commercial set.
80
+ closed: true
81
+ closed_note: >-
82
+ The Article 5(1) table is exhaustive on its face — it is a table of 기호
83
+ (symbols), not of examples — so this list is closed for the plate types the
84
+ notice covers. It does NOT cover: 임 (temporary-operation plates, Annexes
85
+ 9-10, where 임 is a fixed literal, not a use category), military plates (a
86
+ separate Ministry of National Defense system, not modelled here), or
87
+ construction machinery (「건설기계관리법」, a different statute).
88
+
89
+ # ---------------------------------------------------------------------------
90
+ # 1. 비사업용 (non-transport-business use), incl. SOFA vehicles.
91
+ # Table row: 비사업용(SOFA 자동차 포함) / 자가용(관용포함) — "private use
92
+ # (including government-owned)". 32 syllables. The set is systematic and the
93
+ # system is worth stating because it is how a reader remembers it: nine
94
+ # initial consonants ㄱ ㄴ ㄷ ㄹ ㅁ ㅂ ㅅ ㅇ ㅈ crossed with four vowels
95
+ # ㅏ ㅓ ㅗ ㅜ gives 36, minus the four ㅏ-row syllables 바/사/아/자 which the
96
+ # table assigns to transport-business use, leaving 32.
97
+ # ---------------------------------------------------------------------------
98
+ non_commercial:
99
+ use_ko: "비사업용 — 자가용(관용포함)"
100
+ use_en: "private, non-transport-business (government fleets included)"
101
+ count: 32
102
+ syllables: ["가","나","다","라","마","거","너","더","러","머","버","서","어","저","고","노","도","로","모","보","소","오","조","구","누","두","루","무","부","수","우","주"]
103
+ order_note: >-
104
+ Transcribed in the notice's own printed order (the four vowel rows in
105
+ sequence), not sorted. Issuance order within the set is not published.
106
+ applies_to_plates: ["Annex 1", "Annex 2", "Annex 2-1", "Annex 2-2", "Annex 5", "Annex 18", "corporate-business (Art. 4(1)1(다))"]
107
+
108
+ # ---------------------------------------------------------------------------
109
+ # 2. 자동차운수사업용 — 일반용 (transport-business, general). The YELLOW plate.
110
+ # ---------------------------------------------------------------------------
111
+ commercial_general:
112
+ use_ko: "자동차운수사업용 — 일반용"
113
+ use_en: "transport business, general (taxis, route buses, hire trucks)"
114
+ count: 5
115
+ syllables:
116
+ - { syllable: "바" }
117
+ - { syllable: "사" }
118
+ - { syllable: "아" }
119
+ - { syllable: "자" }
120
+ - { syllable: "배", added: 2019, added_evidence: instrument-in-force-upper-bound, note: "absent from the 제2009-812호 table, present in the 제2019-423호 table; the exact amendment that added it is not isolated here. Commonly associated with parcel-delivery (택배) trucks — that association is NOT in the notice and is not asserted." }
121
+
122
+ # ---------------------------------------------------------------------------
123
+ # 3. 대여사업용 (vehicle-rental business). White plate, NO authority mark.
124
+ # ---------------------------------------------------------------------------
125
+ rental:
126
+ use_ko: "자동차운수사업용 — 대여사업용"
127
+ use_en: "vehicle-rental business (hire cars)"
128
+ count: 3
129
+ syllables:
130
+ - { syllable: "허" }
131
+ - { syllable: "하", added: 2019, added_evidence: instrument-in-force-upper-bound }
132
+ - { syllable: "호", added: 2019, added_evidence: instrument-in-force-upper-bound }
133
+ added_note: >-
134
+ 제2009-812호 lists 허 alone; 제2019-423호 lists 허, 하, 호. The rental set
135
+ grew because rental fleets exhausted 허 — an inference, and recorded as an
136
+ inference. What IS primary is that the two tables differ.
137
+ colour_note: >-
138
+ Art. 4(1)1(가) puts 대여사업용 vehicles under the NON-commercial colour rule
139
+ ("일반용(SOFA자동차, 대여사업용 자동차 포함)"), and Art. 6's proviso
140
+ withholds the authority mark from them, so a Korean rental car wears the
141
+ ordinary white private plate and is identifiable ONLY by its syllable.
142
+ A rental EV additionally gets the blue plate (Art. 1-3(4) includes
143
+ 대여사업용 in the electric-vehicle plate class).
144
+
145
+ # ---------------------------------------------------------------------------
146
+ # 4. 외교용 (diplomatic). TWO-syllable WORDS, set before the digits, on the
147
+ # dark-navy plate. Note that these are the ONLY multi-syllable elements.
148
+ # ---------------------------------------------------------------------------
149
+ diplomatic:
150
+ use_ko: "외교용"
151
+ use_en: "diplomatic and related"
152
+ count: 7
153
+ words:
154
+ - { word: "외교", category_ko: "외교관용", category_en: "diplomatic mission / diplomatic agent" }
155
+ - { word: "영사", category_ko: "영사용", category_en: "consular" }
156
+ - { word: "준외", category_ko: "준외교관용", category_en: "quasi-diplomatic" }
157
+ - { word: "준영", category_ko: "준영사용", category_en: "quasi-consular" }
158
+ - { word: "국기", category_ko: "국제기구용", category_en: "international organisation" }
159
+ - { word: "협정", category_ko: "기타외교용", category_en: "other diplomatic — agreement" }
160
+ - { word: "대표", category_ko: "기타외교용", category_en: "other diplomatic — representative" }
161
+ colour_source: "Art. 4(1)1(나): 외교용(외교, 영사, 준외, 준영, 국기, 협정, 대표) : 감청색바탕에 흰색문자 — dark navy ground, white characters. The parenthesis in Art. 4 is the same seven-word list as the Art. 5 table, which is why this row is doubly sourced."
162
+
163
+ # ---------------------------------------------------------------------------
164
+ # 5. 이륜자동차 (motorcycles) on the Annex 13/14/15 plates — Art. 5(3).
165
+ # Verbatim: "제2항에도 불구하고 제2조제2항제3호에 따른 이륜자동차번호판에는
166
+ # 가ㆍ나ㆍ다ㆍ라ㆍ마ㆍ바ㆍ사ㆍ아ㆍ자ㆍ차ㆍ카ㆍ타ㆍ파ㆍ하ㆍ거ㆍ너ㆍ더ㆍ러ㆍ머ㆍ버ㆍ
167
+ # 서ㆍ어ㆍ저ㆍ처ㆍ커ㆍ터ㆍ퍼ㆍ허를 용도 기호로 표시한다."
168
+ # This set is DIFFERENT from the car set: it includes the aspirate consonants
169
+ # ㅊ ㅋ ㅌ ㅍ ㅎ (차 카 타 파 하, 처 커 터 퍼 허) which never appear on a car
170
+ # plate, and it has only two vowel rows.
171
+ # ---------------------------------------------------------------------------
172
+ motorcycle_legacy:
173
+ use_ko: "이륜자동차번호판(별표 13·14·15) 용도 기호"
174
+ use_en: "motorcycle plates of the Annex 13/14/15 pattern"
175
+ count: 28
176
+ syllables: ["가","나","다","라","마","바","사","아","자","차","카","타","파","하","거","너","더","러","머","버","서","어","저","처","커","터","퍼","허"]
177
+ note: >-
178
+ Art. 5(3) is the CURRENT text and it governs the Annex 13/14/15 plates,
179
+ which Art. 2(2)3 keeps alive only where the Annex 15-2 plate physically
180
+ cannot be fitted. The 제2009-812호 and 제2018-381호 texts had a shorter,
181
+ differently-worded rule ("가·나·다·라·라·마·바·사·아·자·차·카·타·파·하",
182
+ printing 라 twice — an evident typo in the source, reproduced here as an
183
+ observation and NOT corrected in this dataset's claim).
184
+ motorcycle_current:
185
+ use_ko: "이륜자동차번호판(별표 15의2) 용도 기호 — Art. 5(2)2"
186
+ use_en: "motorcycle plates of the Annex 15-2 pattern (from 2026-03-20)"
187
+ rule: >-
188
+ "용도 기호: 제1항에 따른 용도별 비사업용 기호 1자리와 1부터 9까지의 숫자
189
+ 1자리를 순서대로 표시한 2자리 기호" — a TWO-character use code: one syllable
190
+ drawn from the 32-syllable non-commercial set in section 1 above, followed
191
+ by one digit 1-9. It is preceded by a separate one-digit vehicle-type code
192
+ (Art. 5(2)1: "1부터 9까지의 숫자 1자리 기호"), so the head of an Annex 15-2
193
+ mark reads digit + syllable + digit, e.g. 1가2.
194
+ syllable_set: non_commercial