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,1672 @@
1
+ # plates/ua.yml — Ukraine (PRD-PLATES gate L3).
2
+ #
3
+ # EVERY type, dimension, colour, character-count, letter-set and class claim in
4
+ # this file is read from the CONSOLIDATED TEXT of the governing instrument on
5
+ # zakon.rada.gov.ua, fetched 2026-08-03:
6
+ #
7
+ # Наказ Міністерства внутрішніх справ України від 02 березня 2021 року № 166
8
+ # «Про деякі питання номерних знаків транспортних засобів», зареєстрований
9
+ # в Міністерстві юстиції України 22 березня 2021 р. за № 353/35975
10
+ # (rada id z0353-21) — approving (1) ВИМОГИ до номерних знаків транспортних
11
+ # засобів and (2) ЄДИНІ ЗРАЗКИ номерних знаків транспортних засобів.
12
+ # Current revision: 16.12.2025, basis z1709-25. Status: чинний.
13
+ # Amended by МВС orders № 814 (12.12.2022), № 259 (31.03.2023),
14
+ # № 354 (27.04.2023), № 53 (30.01.2024), № 761 (03.11.2025).
15
+ #
16
+ # and from the standard it displaced (ДСТУ 4278:2004, «Чинний від 2004-02-20»)
17
+ # and the standard amendment that produced the CURRENT DESIGN
18
+ # (Зміна № 1 до ДСТУ 4278:2012, fetched as the МВС ЦБДР PDF). Full sourcing,
19
+ # including what could NOT be pinned, is in dossier-ua.md.
20
+ #
21
+ # ─────────────────────────────────────────────────────────────────────────────
22
+ # SEVEN STRUCTURAL FACTS THAT SHAPE THIS FILE
23
+ # ─────────────────────────────────────────────────────────────────────────────
24
+ #
25
+ # 1. THE PLATE ALPHABET IS CYRILLIC, AND IT IS STATUTORY, NOT CONVENTIONAL.
26
+ # Розділ III п. 9 of the Вимоги, verbatim:
27
+ # "На знаках типів 2, 6, 8, 13, 14, 16, підтипу 3-3 застосовують літери
28
+ # української абетки, що збігаються з написом літер латинської абетки."
29
+ # ("On plates of types 2, 6, 8, 13, 14, 16 and subtype 3-3 the letters of
30
+ # the UKRAINIAN alphabet that COINCIDE IN WRITING with letters of the
31
+ # Latin alphabet are used.")
32
+ # "На знаках типів 1, 5, 7, 15, 17, 18, підтипів 3-1, 3-2 застосовують
33
+ # літери української та латинської абеток."
34
+ # "На знаках типу 9, 10, 12 застосовують літери української абетки."
35
+ # "На знаках типу 4 застосовують літеросполуки «CD», «СС» або літеру «S»
36
+ # латинської абетки."
37
+ # Measured from the codepoints of Додаток 4 (the region table) as published,
38
+ # the "coinciding" set is EXACTLY TWELVE Cyrillic letters:
39
+ # І U+0406 · А U+0410 · В U+0412 · Е U+0415 · К U+041A · М U+041C ·
40
+ # Н U+041D · О U+041E · Р U+0420 · С U+0421 · Т U+0422 · Х U+0425
41
+ # whose Latin LOOKALIKES are I A B E K M H O P C T X.
42
+ # NOTE THE FOUR TRAPS: Cyrillic В reads B (never V), Cyrillic Н reads H
43
+ # (never N), Cyrillic Р reads P (never R), Cyrillic С reads C (never S).
44
+ #
45
+ # 2. HOW THAT IS MODELLED HERE, AND WHY. The lint's pattern DSL generates Latin
46
+ # A–Z for its `L` token, so a `format.regex` written over Cyrillic could
47
+ # never round-trip. This file therefore does NOT declare a per-jurisdiction
48
+ # `serial_alphabet:` (PRD-PLATES §2.6 decision 2): every `pattern`, `regex`
49
+ # and `regex_strict` here is written in the MACHINE-READABLE LATIN
50
+ # TRANSLITERATION of the printed glyphs — which is also what OCR, the
51
+ # Vienna-Convention rationale for the 12-letter restriction, and every
52
+ # consumer's keyboard produce. The CYRILLIC TRUTH is not folded away and not
53
+ # lost: it is carried in `script:` below, in each series' `charset:`, and
54
+ # code-by-code as `code:` (Cyrillic) beside `code_ascii:` (Latin) in
55
+ # plates/_decode/ua-regions.yml, exactly as _decode/hr-cities.yml does for
56
+ # the Croatian carons. NO SILENT FOLDING: the fold direction is recorded, it
57
+ # is injective over the twelve, and the reverse map is published.
58
+ #
59
+ # 3. THE SERIES ALPHABET IS A CLOSED STATUTORY LIST — AND IT IS EXACTLY THE
60
+ # 12 × 12 CROSS PRODUCT. Додаток 5 to the Вимоги ("Літеросполуки, які можна
61
+ # використовувати для позначення серій номерних знаків") lists, for the
62
+ # ordinary group (types 2, 6 and subtypes 1-1-1, 1-3-1, 3-3, 8-1-1, 8-1-2),
63
+ # 144 pairs. Computed rather than eyeballed: those 144 are precisely every
64
+ # ordered pair over the twelve letters of fact 1 — nothing missing, nothing
65
+ # extra. `regex_strict` on those series is therefore EXACT, not approximate.
66
+ # Every OTHER subtype has its own closed block in Додаток 5 (trailers,
67
+ # electric, taxi/bus, mopeds, motorcycles), each of which is enumerated into
68
+ # an exact regex twin below. Those blocks are drawn from the LATIN alphabet
69
+ # (fact 1's second sentence), which is why an electric plate can end "ZK"
70
+ # and an ordinary one never can.
71
+ #
72
+ # 4. THE REGION LETTERS AND THE REGION DIGITS ARE TWO DIFFERENT ENCODINGS ON
73
+ # TWO DIFFERENT PLATE FAMILIES. Додаток 4 gives 27 regions × FOUR letter
74
+ # pairs each (108 pairs) — used on types 1, 5, 12–17 and subtypes 3-1, 3-2,
75
+ # 8-2 (Розділ III п. 3). Додаток 6 gives the same 27 regions ONE OR TWO
76
+ # NUMERIC codes (01–27, plus 31 for Kyiv city) — used on types 2, 6, 7, 11
77
+ # and subtype 3-3 (Розділ III п. 5). A parse API must not mix them.
78
+ # Both tables are in plates/_decode/ua-regions.yml.
79
+ #
80
+ # 5. SINCE DECEMBER 2022 A UKRAINIAN PLATE MAY CARRY NO REGION AT ALL.
81
+ # Розділ III п. 1 (as amended by Наказ № 814 від 12.12.2022) excepts
82
+ # "знаки, що належать транспортним засобам, які зареєстровані на підставі
83
+ # договору, укладеного в електронній формі" and puts the літеросполуки
84
+ # «ЕD», «DC», «DI», «PD» in the region slot instead. Any decode of the left
85
+ # pair must test those four FIRST. (And «ЕD» is printed in the instrument
86
+ # with a CYRILLIC Е and a LATIN D — recorded, not corrected, in the decode
87
+ # table.)
88
+ #
89
+ # 6. THE CURRENT DESIGN IS 2015; THE CURRENT RULEBOOK IS 2021. The serial
90
+ # grammar АА 1234 АА has not changed since ДСТУ 4278:2004 came into force on
91
+ # 20 February 2004. What changed on 31 March 2015 was the DESIGN (the blue
92
+ # UA/flag band replacing the 2004 blue-over-yellow coat-of-arms panel, and
93
+ # the character font). What changed in 2021 was the LEGAL VEHICLE: Закон
94
+ # № 124-IX від 20.09.2019 rewrote ст. 34 of the Закон «Про дорожній рух» so
95
+ # that "Єдині зразки номерних знаків та вимоги до них ... встановлюються
96
+ # Міністерством внутрішніх справ України" — moving the plate spec out of the
97
+ # national-standard system and into an МВС order, which is Наказ № 166.
98
+ # So: 2015 series are DESIGN breaks, 2021+ series are new SUBTYPES.
99
+ #
100
+ # 7. THE PLATE IS THE VEHICLE'S, BUT THE COMBINATION FOLLOWS THE OWNER.
101
+ # See `binding` below — Ukraine is a genuine hybrid and the schema's
102
+ # `binding:` field cannot say so on its own.
103
+ #
104
+ # ─────────────────────────────────────────────────────────────────────────────
105
+ # REGEX POLICY (identical to plates/gb.yml, de.yml, nl.yml)
106
+ # `format.regex` is the LINT-ROUND-TRIPPABLE regex: the lint generates serials
107
+ # from `format.pattern` (L -> any A-Z, 9 -> any 0-9) and requires the regex to
108
+ # accept every one, so `regex` can never be narrower than the pattern's own
109
+ # alphabet. `format.regex_strict` carries the sourced grammar — the twelve
110
+ # transliterated Cyrillic letters, the Додаток 5 series blocks, the Додаток 6
111
+ # numeric code set — which `regex` cannot carry.
112
+ #
113
+ # SEPARATOR NOTE (PRD-PLATES §2.6): a Ukrainian plate prints NO separator
114
+ # glyph. Додаток 3 fixes character HEIGHTS in millimetres and the ЄДИНІ ЗРАЗКИ
115
+ # drawings fix the group gaps; no provision of the Вимоги names a separator
116
+ # character. The space in every `pattern` here is the conventional textual
117
+ # rendering of that printed gap, and every regex accepts it as optional —
118
+ # the same treatment plates/de.yml gives the Plaketten gap.
119
+ # ─────────────────────────────────────────────────────────────────────────────
120
+ jurisdiction: ua
121
+ authority:
122
+ name: Міністерство внутрішніх справ України / Головний сервісний центр МВС (ГСЦ МВС)
123
+ url: "https://mvs.gov.ua/"
124
+ url_note: >-
125
+ The operational authority is the Головний сервісний центр МВС at
126
+ https://hsc.gov.ua/ — which returned HTTP 403 (Akamai edge) to every fetch
127
+ attempt in this pass, from curl and from the fetch tool alike. The МВС
128
+ portal above answered 200 and is used as the authority URL; every FACTUAL
129
+ claim in this file is cited to zakon.rada.gov.ua, not to either site.
130
+ binding: vehicle
131
+ binding_note: >-
132
+ Ukraine is a hybrid and the one-word field cannot say so. Ст. 34 of the Закон
133
+ України «Про дорожній рух» (3353-XII) assigns the mark to the VEHICLE: "На
134
+ зареєстровані транспортні засоби ... таким транспортним засобам присвоюються
135
+ номерні знаки (їх буквено-цифрова комбінація)." But the Порядок державної
136
+ реєстрації (постанова КМУ від 07.09.1998 № 1388) lets an OWNER put the
137
+ буквено-цифрова комбінація into storage on deregistration and re-attach it to
138
+ another of that owner's vehicles — "зберігання буквено-цифрової комбінації
139
+ номерних знаків перереєстрованих або знятих з обліку транспортних засобів для
140
+ подальшого закріплення за іншими транспортними засобами власника" — and
141
+ ДСТУ 4278:2004 п. 3.6 said it outright for the 2004 regime: "Номерні знаки
142
+ типів 1, 3, 5 є власність особи, яка їх придбала ... зберігаються в
143
+ реєстраційному підрозділі до їх перезакріплення за іншим транспортним засобом
144
+ цього власника чи передання за його згодою іншій особі, зареєстрованій у цьому
145
+ регіоні, але не більше 5 років."
146
+ Consequence for a parse API: a Ukrainian mark's region letters are evidence
147
+ about the region of registration AT ISSUE, and about nothing since.
148
+ instrument:
149
+ citation: >-
150
+ Наказ Міністерства внутрішніх справ України від 02 березня 2021 року № 166
151
+ «Про деякі питання номерних знаків транспортних засобів»
152
+ made: "2021-03-02"
153
+ registered_minjust: "2021-03-22"
154
+ registration_no: "353/35975"
155
+ in_force: "from the day of official publication (п. 3 of the order)"
156
+ revision: "16.12.2025 (basis z1709-25)"
157
+ status: "чинний"
158
+ enabling_statute: >-
159
+ Ст. 34 Закону України «Про дорожній рух» (3353-XII), verbatim: "Єдині зразки
160
+ номерних знаків та вимоги до них, у тому числі тих, що виготовляються за
161
+ індивідуальним замовленням, встановлюються Міністерством внутрішніх справ
162
+ України." The preceding paragraph adds: "Номерні знаки повинні відповідати
163
+ встановленим зразкам та вимогам." Both paragraphs were put in this form by
164
+ Закон № 124-IX від 20.09.2019 and Закон № 2658-IX від 06.10.2022.
165
+ enabling_statute_source: "https://zakon.rada.gov.ua/laws/show/3353-12 # Закон України «Про дорожній рух» від 28.06.1993 № 3353-XII, ст. 34 «Реєстрація та облік транспортних засобів», consolidated text as at 03.08.2026. Accessed 2026-08-03"
166
+ amended_by:
167
+ - "Наказ МВС № 814 від 12.12.2022 (Додаток 5 re-issued; the «ЕD»/«DC»/«DI»/«PD» online-registration літеросполуки added to Розділ III п. 1)"
168
+ - "Наказ МВС № 259 від 31.03.2023 (type 16 — СБУ — added; Додатки 2, 7, 8 re-issued)"
169
+ - "Наказ МВС № 354 від 27.04.2023 (title change; «державний номерний знак» -> «номерний знак» throughout; Додатки 4 and 6 amended)"
170
+ - "Наказ МВС № 53 від 30.01.2024 (type 17 — УДО — added)"
171
+ - "Наказ МВС № 761 від 03.11.2025 (18 types; Додаток 1, 2, 3, 5, 9, 10 re-issued; diplomatic field colour changed to оливковий; «CDP»/«DP» replaced by «CD»/«СС»; type 18 added)"
172
+ source: "https://zakon.rada.gov.ua/laws/show/z0353-21 # front matter, Розділи I-IV and Додатки 1-12 of the ВИМОГИ, consolidated text as at revision 16.12.2025. Accessed 2026-08-03"
173
+ licence: >-
174
+ zakon.rada.gov.ua publishes the official texts of Ukrainian legislation.
175
+ Ukrainian law (Закон «Про авторське право і суміжні права») excludes
176
+ normative acts and their official translations from copyright protection —
177
+ the edicts-of-government position. Quoted, never reproduced wholesale.
178
+
179
+ # ---------------------------------------------------------------------------
180
+ # Jurisdiction-wide script and charset facts, cited once, referenced per series.
181
+ # ---------------------------------------------------------------------------
182
+ script:
183
+ printed: Cyrillic (Ukrainian)
184
+ recorded_as: "Latin transliteration by GLYPH SHAPE (not by phonetics)"
185
+ homoglyph_map:
186
+ # Cyrillic codepoint -> the Latin letter it is drawn as. Injective.
187
+ "І U+0406": I
188
+ "А U+0410": A
189
+ "В U+0412": B
190
+ "Е U+0415": E
191
+ "К U+041A": K
192
+ "М U+041C": M
193
+ "Н U+041D": H
194
+ "О U+041E": O
195
+ "Р U+0420": P
196
+ "С U+0421": C
197
+ "Т U+0422": T
198
+ "Х U+0425": X
199
+ latin_alphabet_note: >-
200
+ Genuinely LATIN letters also appear, and are not transliterations of
201
+ anything: Розділ III п. 9 admits "літери української та латинської абеток"
202
+ on types 1, 5, 7, 15, 17, 18 and subtypes 3-1, 3-2, and the Додаток 5 series
203
+ blocks for electric vehicles (U/Q/Z/Y), trailers (X/F/С), taxis and buses
204
+ (A/B/T), mopeds (D/G/О, N/V/F/H/К/М) and motorcycles (J/L, R/S) are written
205
+ in them. Where those blocks contain a Cyrillic letter among Latin ones —
206
+ «СF», «UХ», «КD», «МD», «ОD», «АD» in the published consolidated text — the
207
+ mixed script is recorded as published in the dossier and NOT normalised
208
+ here; the transliteration collapses them to the same glyph either way.
209
+ designation_letters:
210
+ note: >-
211
+ Розділ III п. 1 fixes the designation letters per type. Their SCRIPT was
212
+ measured from the published text and is not uniform — recorded exactly:
213
+ values:
214
+ - "«CD» (types 4-1, 4-2) — LATIN C + LATIN D"
215
+ - "«СС» (types 4-3, 4-4) — CYRILLIC С U+0421 twice, although п. 9 says type 4 uses the LATIN alphabet. An internal inconsistency of the instrument, recorded not corrected; transliterates to CC either way"
216
+ - "«S» (types 4-5, 4-6, 17) — LATIN S"
217
+ - "«Т» (subtypes 8-2, 12-1) — CYRILLIC Т U+0422 -> T"
218
+ - "«ТР» (subtype 12-2) — CYRILLIC Т Р -> TP"
219
+ - "«Е» (type 13) — CYRILLIC Е U+0415 -> E"
220
+ - "«В» (type 14) — CYRILLIC В U+0412 -> B, NOT V"
221
+ - "«G» (type 15) — LATIN G"
222
+ - "«С» (type 16) — CYRILLIC С U+0421 -> C"
223
+ - "«D», «С», «О» (type 18) — LATIN D, CYRILLIC С U+0421, CYRILLIC О U+041E"
224
+ source: "https://zakon.rada.gov.ua/laws/show/z0353-21 # Розділ III п. 1 and п. 9; Додаток 4 and Додаток 5 codepoints measured from the published HTML. Accessed 2026-08-03"
225
+
226
+ charset_defaults:
227
+ homoglyph_letters_latin: [A, B, C, E, H, I, K, M, O, P, T, X]
228
+ homoglyph_letters_cyrillic: "АВСЕНІКМОРТХ"
229
+ region_pairs: 108
230
+ region_pairs_note: >-
231
+ Додаток 4 gives FOUR літеросполуки per region for all 27 regions — 108
232
+ pairs, no duplicates (computed). The annex prints them in four unlabelled
233
+ columns under a single heading "Літеросполука"; it does NOT say which
234
+ column is which era, so no era is claimed from the instrument. The
235
+ commonly-published chronology (column 1 = 2004, column 2 = 2013,
236
+ columns 3-4 = 2021) is recorded in plates/_decode/ua-regions.yml tagged
237
+ secondary-wikipedia, never as an instrument claim.
238
+ series_pairs_ordinary: 144
239
+ series_pairs_ordinary_note: >-
240
+ Exactly the 12 × 12 cross product — verified by computing the set from the
241
+ published Додаток 5 and differencing it against the full product: nothing
242
+ missing, nothing extra.
243
+ source: "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 4 (108 pairs / 27 regions) and Додаток 5 (the per-subtype series blocks). Accessed 2026-08-03"
244
+
245
+ # ---------------------------------------------------------------------------
246
+ # COLOUR. The instrument specifies colour as a CHROMATICITY BOX, never as a
247
+ # code — so every hex below is `observed` and the statutory truth is here.
248
+ # ---------------------------------------------------------------------------
249
+ common:
250
+ chromaticity:
251
+ note: >-
252
+ Додаток 9 «Координати колірності кутових точок допустимої колірної
253
+ ділянки» gives, per colour, the x/y chromaticity coordinates of the FOUR
254
+ corner points of the permitted region plus a minimum luminance factor
255
+ (коефіцієнт яскравості). A four-corner region plus a luminance FLOOR does
256
+ not determine a display colour, so no hex in this file is derived from it;
257
+ the hexes are marked `observed` and this block is the sourced spec.
258
+ boxes:
259
+ "білий (white)": { corners: [[0.285, 0.315], [0.340, 0.370], [0.355, 0.355], [0.300, 0.300]], luminance_min: 0.35 }
260
+ "жовтий (yellow)": { corners: [[0.427, 0.483], [0.465, 0.534], [0.545, 0.454], [0.487, 0.423]], luminance_min: 0.27 }
261
+ "червоний (red)": { corners: [[0.513, 0.338], [0.658, 0.348], [0.715, 0.291], [0.542, 0.300]], luminance_min: 0.05 }
262
+ "світло-блакитний (light blue)": { corners: [[0.200, 0.200], [0.140, 0.220], [0.180, 0.300], [0.240, 0.280]], luminance_min: 0.17 }
263
+ "синій (blue)": { corners: [[0.144, 0.030], [0.224, 0.167], [0.180, 0.176], [0.106, 0.100]], luminance_min: 0.01 }
264
+ "оливковий (olive)": { corners: [[0.380, 0.550], [0.428, 0.577], [0.460, 0.546], [0.437, 0.505]], luminance_min: 0.04 }
265
+ absent: >-
266
+ GREEN — the colour of the characters on every electric-vehicle plate
267
+ (subtypes 1-1-2, 1-2-2, 1-3-2, 3-2, 5-2-1, 5-2-2) — has NO entry in
268
+ Додаток 9. The annex covers field colours only. `зелений` is therefore
269
+ the one colour word in the Вимоги with no colorimetric definition at all.
270
+ source: "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 9 (chromaticity corner points) and Додаток 10 (photometric coefficients for the retroreflective colours). Accessed 2026-08-03"
271
+ tolerance: "Розділ II п. 2: «Допускається відхилення габаритних розмірів знаків ±1 %»"
272
+ state_symbol: >-
273
+ Розділ III п. 2: on types 1-3, 5-7, 11, 13-17 and subtypes 8-2, 12-2 the
274
+ plate carries the symbol of state belonging — "зліва у вигляді напису «UA»
275
+ та зображення Державного Прапора України, розміщених на тлі прямокутника
276
+ синього кольору" for the long plates, in the upper-left for the tall ones,
277
+ the small state coat of arms on blue for type 7 and subtype 11-1, and an
278
+ oval bearing "UA" at the upper right for subtype 8-2.
279
+
280
+ series:
281
+
282
+ # =========================================================================
283
+ # TYPE 1 — the ordinary plate family. Four digits between two letter pairs;
284
+ # left pair = region (Додаток 4), right pair = series (Додаток 5).
285
+ # =========================================================================
286
+ - id: ua-standard-2015
287
+ class: standard
288
+ categories: [car, van, truck, bus]
289
+ period: { start: 2015 }
290
+ period_evidence: secondary-first-issue
291
+ matching: strict
292
+ format:
293
+ pattern: "LL 9999 LL"
294
+ regex: '\A[A-Z]{2} ?\d{4} ?[A-Z]{2}\z'
295
+ regex_strict: '\A[ABCEHIKMOPTX]{2} ?\d{4} ?[ABCEHIKMOPTX]{2}\z'
296
+ charset:
297
+ region_letters: [A, B, C, E, H, I, K, M, O, P, T, X]
298
+ series_letters: [A, B, C, E, H, I, K, M, O, P, T, X]
299
+ notes: >-
300
+ Latin transliterations of the twelve Cyrillic homoglyph letters. The
301
+ series pair is EXACTLY the 12 × 12 cross product (Додаток 5, ordinary
302
+ block); the region pair is 108 of those 144 (Додаток 4) plus the four
303
+ online-registration літеросполуки ЕD/DC/DI/PD, which are outside the
304
+ twelve and therefore outside regex_strict — see notes.
305
+ progression: >-
306
+ Розділ III: серія letters advance within a region; the порядковий номер
307
+ runs 0001-9999 inside a серія. Since постанова КМУ of 30.06.2023 an
308
+ owner may CHOOSE the combination at registration, so the ordinal is no
309
+ longer a reliable time signal within a series.
310
+ design:
311
+ plate: { w: 520, h: 112, unit: mm }
312
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, chromaticity_ref: "білий" }
313
+ foreground: "#000000"
314
+ characters: { digit_height_mm: 70, letter_height_mm: 70 }
315
+ band: { side: left, color: "#005BBB", content: "UA + Ukrainian flag", hex_basis: observed, chromaticity_ref: "синій" }
316
+ emblem: { present: false }
317
+ rear_differs: false
318
+ region_encoding: "plates/_decode/ua-regions.yml"
319
+ sources:
320
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 (підтип 1-1-1 «Знаки для всіх типів автомобілів»); Додаток 2 Таблиця 1 (520 x 112 mm, 4 digits incl. region code, 4 letters, white field, black characters, retroreflective); Додаток 3 (70 mm digits and letters); Розділ III пп. 1, 3, 4, 6, 7, 9"
321
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 4 (region літеросполуки) and Додаток 5 (the 144-pair ordinary series block)"
322
+ - "https://web.archive.org/web/20180328225320/http://www.sai.gov.ua/uploads/filemanager/file/zmina-1-dstu-4278.pdf # Зміна № 1 до ДСТУ 4278:2012, Додаток А: підтип 1-1 composition, verbatim — «UA – символ державної належності; АА – літеросполука, що позначає адміністративно-територіальну належність; 1234 – порядковий номер; АВ – літеросполука, що позначає серію»"
323
+ - "https://zakon.rada.gov.ua/laws/show/3353-12 # Закон України «Про дорожній рух» ст. 34 — the enabling statute: «Єдині зразки номерних знаків та вимоги до них ... встановлюються Міністерством внутрішніх справ України»; and «таким транспортним засобам присвоюються номерні знаки (їх буквено-цифрова комбінація)». Accessed 2026-08-03"
324
+ - "https://uk.wikipedia.org/wiki/Номерні_знаки_України # period.start: «З 31 березня 2015 року відповідно до змін в ДСТУ 4278:2012 почалась видача номерних знаків нового зразка». secondary-wikipedia; accessed 2026-08-03"
325
+ notes: >-
326
+ THE CURRENT UKRAINIAN CAR PLATE. period.start records the date the 2015
327
+ DESIGN entered issue — the blue UA/flag band and the current font — not a
328
+ format change: the АА 1234 АА grammar is unchanged since ДСТУ 4278:2004
329
+ came into force on 20 February 2004 (see ua-standard-2004). The date
330
+ itself is `secondary-first-issue`: the primary that carries it, Зміна № 1
331
+ до ДСТУ 4278:2012, is held in this pass as the МВС ЦБДР typescript whose
332
+ commencement line reads "ПРИЙНЯТО ТА НАДАНО ЧИННОСТІ: наказ Міністерства
333
+ економічного розвитку і торгівлі України від _______________ р. № ___" —
334
+ BLANK. The 31 March 2015 date is the Ukrainian Wikipedia article's, and it
335
+ is flagged for the verifier.
336
+ REGION SLOT EXCEPTION: since Наказ № 814 від 12.12.2022, a vehicle
337
+ registered on an electronically concluded contract carries «ЕD», «DC»,
338
+ «DI» or «PD» in the left pair instead of a region code. Those four are NOT
339
+ inside `regex_strict` (D and P are outside the twelve), so a plate issued
340
+ that way matches `regex` and not `regex_strict`. That is deliberate and it
341
+ is the single most important thing to know before decoding a modern
342
+ Ukrainian plate.
343
+
344
+ - id: ua-electric-2015
345
+ class: electric
346
+ categories: [car, van, truck, bus]
347
+ period: { start: 2020 }
348
+ period_evidence: secondary-first-issue
349
+ matching: strict
350
+ format:
351
+ pattern: "LL 9999 LL"
352
+ regex: '\A[A-Z]{2} ?\d{4} ?[A-Z]{2}\z'
353
+ regex_strict: '\A[ABCEHIKMOPTX]{2} ?\d{4} ?(?:Q[ABCDEFGHIJKLMNOPQRSTUXY]|U[ABCDEFGHIJKLMNOPRSTUXY]|[YZ][ABCDEFGHIJKLMNOPRSTUVXYZ])\z'
354
+ charset:
355
+ series_first_letter: [Q, U, Y, Z]
356
+ notes: >-
357
+ Ninety-three pairs, enumerated in Додаток 5 for subtypes 1-1-2 and
358
+ 1-3-2 and written out exactly in regex_strict. All four first letters
359
+ are LATIN and none of them is in the twelve-letter homoglyph set, so
360
+ an electric plate's series pair can never be mistaken for an ordinary
361
+ one. Q, U, Y, Z do not exist in the ordinary block at all.
362
+ design:
363
+ plate: { w: 520, h: 112, unit: mm }
364
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, chromaticity_ref: "білий" }
365
+ foreground: "#009639"
366
+ foreground_note: >-
367
+ Додаток 2 Таблиця 1: «Колір цифр, літер та ребра жорсткості знаків —
368
+ зелений». GREEN HAS NO CHROMATICITY BOX in Додаток 9 (see
369
+ common.chromaticity.absent), so this hex is observed and unsourced to
370
+ any colorimetric specification.
371
+ characters: { digit_height_mm: 70, letter_height_mm: 70 }
372
+ band: { side: left, color: "#005BBB", content: "UA + Ukrainian flag", hex_basis: observed }
373
+ rear_differs: false
374
+ region_encoding: "plates/_decode/ua-regions.yml"
375
+ sources:
376
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 підтип 1-1-2 «Спеціальні знаки для всіх типів автомобілів, які приводяться в рух електричним двигуном і не мають двигуна внутрішнього згоряння»; Додаток 2 Таблиця 1 (white field, GREEN characters); Додаток 5 (the 93-pair U/Q/Z/Y block)"
377
+ - "https://uk.wikipedia.org/wiki/Номерні_знаки_України # period.start 2020: green plates first issued with the Z· series in 2020, Y· from 2022. secondary-wikipedia; accessed 2026-08-03"
378
+ notes: >-
379
+ BATTERY-ELECTRIC CARS — green characters on the ordinary white field,
380
+ same grammar, a series block of its own. Distinct from ua-standard-2015 in
381
+ character colour and series alphabet only. period.start 2020 is the
382
+ secondary first-issue claim; the SUBTYPE as a legal object dates from
383
+ Наказ № 166 (2021), and a verifier who cannot confirm 2020 should move the
384
+ start to 2021 with period_evidence enabling-instrument.
385
+ Z-SERIES CAVEAT: Ukrainian media reported in April 2023 that plates
386
+ bearing «Z» and «V» were banned as invasion symbolism. The consolidated
387
+ Додаток 5 as at 16.12.2025 STILL LISTS ZA-ZZ here and VA-VZ on subtype
388
+ 3-2. The instrument governs; the discrepancy is flagged in the dossier.
389
+
390
+ - id: ua-trailer-2021
391
+ class: trailer
392
+ categories: [trailer, semitrailer]
393
+ period: { start: 2021 }
394
+ period_evidence: enabling-instrument
395
+ matching: strict
396
+ format:
397
+ pattern: "LL 9999 LL"
398
+ regex: '\A[A-Z]{2} ?\d{4} ?[A-Z]{2}\z'
399
+ regex_strict: '\A[ABCEHIKMOPTX]{2} ?\d{4} ?(?:C[FGJLNRSUY]|[FX][FGJLNRSUVYZ])\z'
400
+ charset:
401
+ series_first_letter: [C, F, X]
402
+ notes: >-
403
+ Thirty-one pairs, enumerated in Додаток 5 for subtype 1-1-3 and
404
+ written out exactly in regex_strict. The block is published as
405
+ «СF СG СJ СL СN СR СS СU СY» with a CYRILLIC С and «FF…FZ», «XF…XZ»
406
+ with LATIN F and X — a mixed-script row that transliterates without
407
+ ambiguity to C/F/X and is recorded as published in the dossier.
408
+ design:
409
+ plate: { w: 520, h: 112, unit: mm }
410
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, chromaticity_ref: "білий" }
411
+ foreground: "#000000"
412
+ characters: { digit_height_mm: 70, letter_height_mm: 70 }
413
+ band: { side: left, color: "#005BBB", content: "UA + Ukrainian flag", hex_basis: observed }
414
+ rear_differs: false
415
+ region_encoding: "plates/_decode/ua-regions.yml"
416
+ sources:
417
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 підтип 1-1-3 «Знаки для автомобільних причепів»; Додаток 2 Таблиця 1 (520 x 112, 4 digits, 4 letters, white/black); Додаток 5 (the 31-pair C/F/X block for subtype 1-1-3)"
418
+ notes: >-
419
+ TRAILERS AND SEMI-TRAILERS. Identical in size, colour and grammar to the
420
+ car plate; what separates them is the closed 31-pair series block, which
421
+ is disjoint from every other block in Додаток 5. period.start 2021 is the
422
+ order that created subtype 1-1-3 as a distinct object — it is present in
423
+ the ORIGINAL 2021 revision of Додаток 2 (checked against the 09.04.2021
424
+ text), so the subtype is not one of the later additions.
425
+
426
+ - id: ua-taxi-2015
427
+ class: taxi
428
+ categories: [car, bus, van]
429
+ period: { start: 2015 }
430
+ period_evidence: secondary-first-issue
431
+ matching: strict
432
+ format:
433
+ pattern: "LL 9999 LL"
434
+ regex: '\A[A-Z]{2} ?\d{4} ?[A-Z]{2}\z'
435
+ regex_strict: '\A[ABCEHIKMOPTX]{2} ?\d{4} ?(?:A[DFGJLNRSUV]|B[DF]|T[DFGJLNRS])\z'
436
+ charset:
437
+ notes: >-
438
+ Twenty pairs for subtype 1-2-1, enumerated in Додаток 5 and written
439
+ out exactly. Published as «АD АF АG АJ АL АN АR АS АU АV» with a
440
+ CYRILLIC А and «BD BF TD TF TG TJ TL TN TR TS» in Latin.
441
+ design:
442
+ plate: { w: 520, h: 112, unit: mm }
443
+ background: { color: "#FFCC00", finish: retroreflective, hex_basis: observed, chromaticity_ref: "жовтий" }
444
+ foreground: "#000000"
445
+ characters: { digit_height_mm: 70, letter_height_mm: 70 }
446
+ band: { side: left, color: "#005BBB", content: "UA + Ukrainian flag", hex_basis: observed }
447
+ rear_differs: false
448
+ region_encoding: "plates/_decode/ua-regions.yml"
449
+ sources:
450
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 підтип 1-2-1 «Знаки для автобусів і таксі, які внесені до Єдиного державного реєстру юридичних осіб та фізичних осіб — підприємців як засоби провадження господарської діяльності з перевезення пасажирів автомобільним транспортом»; Додаток 2 Таблиця 1 (yellow field, black characters); Додаток 5 (the 20-pair block for subtype 1-2-1)"
451
+ - "https://web.archive.org/web/20180328225320/http://www.sai.gov.ua/uploads/filemanager/file/zmina-1-dstu-4278.pdf # Зміна № 1 до ДСТУ 4278:2012, Додаток А підтип 1-2: «Застосовують для автобусів, мікроавтобусів, таксі, на які видано ліцензію на перевезення пасажирів»"
452
+ notes: >-
453
+ LICENSED BUSES, MINIBUSES AND TAXIS — a yellow field, otherwise the car
454
+ plate. The yellow taxi/bus plate is older than the 2015 design (ДСТУ
455
+ 4278:2004 п. 2.3: «Знаки типу 1 з полем жовтого кольору застосовують для
456
+ автобусів, мікроавтобусів, таксі»); this entry is the 2015-design series
457
+ and ua-taxi-2004 is its predecessor. Eligibility is REGISTRY-BASED, not
458
+ vehicle-based: the operator must appear in the ЄДР as carrying on
459
+ passenger transport.
460
+
461
+ - id: ua-taxi-electric-2021
462
+ class: electric
463
+ categories: [car, bus, van]
464
+ period: { start: 2021 }
465
+ period_evidence: enabling-instrument
466
+ matching: strict
467
+ format:
468
+ pattern: "LL 9999 LL"
469
+ regex: '\A[A-Z]{2} ?\d{4} ?[A-Z]{2}\z'
470
+ regex_strict: '\A[ABCEHIKMOPTX]{2} ?\d{4} ?(?:A[YZ]|B[GJLNQR]|T[UVYZ])\z'
471
+ charset:
472
+ notes: "Twelve pairs for subtype 1-2-2, enumerated in Додаток 5: AY AZ BG BJ BL BN BQ BR TU TV TY TZ."
473
+ design:
474
+ plate: { w: 520, h: 112, unit: mm }
475
+ background: { color: "#FFCC00", finish: retroreflective, hex_basis: observed, chromaticity_ref: "жовтий" }
476
+ foreground: "#009639"
477
+ characters: { digit_height_mm: 70, letter_height_mm: 70 }
478
+ band: { side: left, color: "#005BBB", content: "UA + Ukrainian flag", hex_basis: observed }
479
+ rear_differs: false
480
+ region_encoding: "plates/_decode/ua-regions.yml"
481
+ sources:
482
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 підтип 1-2-2 (electric licensed buses and taxis); Додаток 2 Таблиця 1 (yellow field, GREEN characters); Додаток 5 (the 12-pair block for subtype 1-2-2)"
483
+ notes: >-
484
+ ELECTRIC LICENSED BUSES AND TAXIS — the only Ukrainian plate that is
485
+ yellow AND green, and the rarest of the ordinary family. Distinct from
486
+ ua-taxi-2015 in character colour and series block, and from
487
+ ua-electric-2015 in field colour and series block.
488
+
489
+ - id: ua-nonformat-2015
490
+ class: standard
491
+ categories: [car, van]
492
+ period: { start: 2015 }
493
+ period_evidence: secondary-first-issue
494
+ matching: strict
495
+ format:
496
+ pattern: "LL 9999 LL"
497
+ regex: '\A[A-Z]{2} ?\d{4} ?[A-Z]{2}\z'
498
+ regex_strict: '\A[ABCEHIKMOPTX]{2} ?\d{4} ?[ABCEHIKMOPTX]{2}\z'
499
+ charset:
500
+ notes: >-
501
+ Same grammar and same 144-pair series block as ua-standard-2015 —
502
+ Додаток 5 lists підтип 1-3-1 in the ordinary group. The difference is
503
+ entirely geometric.
504
+ design:
505
+ plate: { w: 300, h: 150, unit: mm, lines: 2, lines_note: "statutory row count promoted from the layout notes (wave-1 render pass) — Додаток 1 підтип 1-3-1: region+series upper, digits lower" }
506
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, chromaticity_ref: "білий" }
507
+ foreground: "#000000"
508
+ characters: { digit_height_mm: 58, letter_height_mm: 40 }
509
+ band: { side: left, position: upper, color: "#005BBB", content: "UA + Ukrainian flag", hex_basis: observed }
510
+ layout: "two-line: region літеросполука upper left, series upper right, four digits below"
511
+ rear_differs: false
512
+ region_encoding: "plates/_decode/ua-regions.yml"
513
+ sources:
514
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 підтип 1-3-1 «Знаки для автомобілів із неформатним місцем закріплення номерного знака»; Додаток 2 Таблиця 1 (300 x 150 mm); Додаток 3 (digits 58 mm, letters 40 mm — the only subtype where the two heights differ); Розділ III пп. 6, 7 (region upper left, series upper right)"
515
+ notes: >-
516
+ THE SHORT-AND-TALL PLATE, for vehicles whose plate recess is not the
517
+ 520 x 112 European oblong — American and Japanese-market cars, in
518
+ practice. Ukraine solves that case with a distinct SUBTYPE and a distinct
519
+ geometry rather than with a tolerance, and it is the ONLY Ukrainian plate
520
+ whose digits and letters have different heights (58 / 40 mm).
521
+
522
+ - id: ua-nonformat-electric-2021
523
+ class: electric
524
+ categories: [car, van]
525
+ period: { start: 2021 }
526
+ period_evidence: enabling-instrument
527
+ matching: strict
528
+ format:
529
+ pattern: "LL 9999 LL"
530
+ regex: '\A[A-Z]{2} ?\d{4} ?[A-Z]{2}\z'
531
+ regex_strict: '\A[ABCEHIKMOPTX]{2} ?\d{4} ?(?:Q[ABCDEFGHIJKLMNOPQRSTUXY]|U[ABCDEFGHIJKLMNOPRSTUXY]|[YZ][ABCDEFGHIJKLMNOPRSTUVXYZ])\z'
532
+ charset:
533
+ notes: "Додаток 5 gives subtypes 1-1-2 and 1-3-2 ONE shared 93-pair block, so this twin is identical to ua-electric-2015's."
534
+ design:
535
+ plate: { w: 300, h: 150, unit: mm, lines: 2, lines_note: "statutory row count promoted from the layout notes (wave-1 render pass) — Додаток 1 підтип 1-3-1 (electric twin)" }
536
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, chromaticity_ref: "білий" }
537
+ foreground: "#009639"
538
+ characters: { digit_height_mm: 58, letter_height_mm: 40 }
539
+ band: { side: left, position: upper, color: "#005BBB", content: "UA + Ukrainian flag", hex_basis: observed }
540
+ rear_differs: false
541
+ region_encoding: "plates/_decode/ua-regions.yml"
542
+ sources:
543
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 підтип 1-3-2; Додаток 2 Таблиця 1 (300 x 150, GREEN characters); Додаток 5 (shared 1-1-2 / 1-3-2 block)"
544
+ notes: >-
545
+ BATTERY-ELECTRIC CARS WITH A NON-STANDARD PLATE RECESS — the intersection
546
+ of ua-electric-2015 and ua-nonformat-2015, and a genuinely separate
547
+ subtype in Додаток 1 rather than a variant of either.
548
+
549
+ # =========================================================================
550
+ # TYPE 2 — «знаки для разових поїздок» (single-journey / transit plates).
551
+ # The NUMERIC region code family: Додаток 6, not Додаток 4.
552
+ # =========================================================================
553
+ - id: ua-transit-2015
554
+ class: temporary
555
+ categories: [car, van, truck, bus, trailer]
556
+ period: { start: 2015 }
557
+ period_evidence: secondary-first-issue
558
+ matching: strict
559
+ format:
560
+ pattern: "99 LL 9999"
561
+ regex: '\A\d{2} ?[A-Z]{2} ?\d{4}\z'
562
+ regex_strict: '\A(?:0[1-9]|1\d|2[0-7]|31) ?[ABCEHIKMOPTX]{2} ?\d{4}\z'
563
+ charset:
564
+ region_codes: "01-27 and 31 (Додаток 6)"
565
+ notes: >-
566
+ Розділ III п. 5: type 2 carries a NUMERIC region code from Додаток 6,
567
+ not a letter pair. Розділ III п. 7: the series letters are placed
568
+ «після коду адміністративно-територіальної належності». Kyiv city has
569
+ two codes, 11 and 31; the other 26 regions have one each.
570
+ design:
571
+ plate: { w: 520, h: 112, unit: mm }
572
+ background: { color: "#D52B1E", finish: non-retroreflective, hex_basis: observed, chromaticity_ref: "червоний" }
573
+ foreground: "#FFFFFF"
574
+ characters: { digit_height_mm: 70, letter_height_mm: 70, region_code_height_mm: 50 }
575
+ band: { side: left, color: "#005BBB", content: "UA + Ukrainian flag", hex_basis: observed }
576
+ material: "полістирольна стрічка permitted (Розділ IV п. 3) — this is a throwaway plate"
577
+ rear_differs: false
578
+ validity:
579
+ note: >-
580
+ A single-journey plate. The ВИМОГИ do not state a validity period; the
581
+ older type 2.1 / 2.2 split (two months for an owner, ten days for a
582
+ dealer) is not in the current instrument and is NOT asserted here.
583
+ region_encoding: "plates/_decode/ua-regions.yml"
584
+ sources:
585
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 тип 2 «Знаки для разових поїздок для всіх типів автомобілів, автомобільних причепів»; Додаток 2 Таблиця 1/2 (520 x 112, 6 digits incl. region code, 2 letters, red field, white characters, NO retroreflective film); Додаток 3 (digits 70 mm, region code 50 mm); Розділ III пп. 5, 7"
586
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 6 «КОДИ, які позначають адміністративно-територіальну належність місця реєстрації транспортного засобу» — 01-27, Kyiv 11 and 31"
587
+ - "https://web.archive.org/web/20180328225320/http://www.sai.gov.ua/uploads/filemanager/file/zmina-1-dstu-4278.pdf # Зміна № 1 до ДСТУ 4278:2012, Додаток А підтип 2-1: «22 – код адміністративно-територіальної належності; АН – літеросполука, що позначає серію; 0880 – порядковий номер» — the group order this pattern encodes"
588
+ notes: >-
589
+ THE RED TRANSIT PLATE for cars, vans, lorries, buses and trailers. Two
590
+ things make it the most misread Ukrainian plate: the region is a NUMBER
591
+ here and a LETTER PAIR on every type-1 plate, and the six digits the
592
+ instrument counts INCLUDE the two-digit region code («Кількість цифр
593
+ (зокрема код регіону) — 6»), so the running number is four digits, not
594
+ six. Non-retroreflective and permitted to be made of polystyrene strip:
595
+ Ukraine treats this as consumable, not as a plate.
596
+
597
+ # =========================================================================
598
+ # TYPE 3 — mopeds. 140 x 114 mm.
599
+ # =========================================================================
600
+ - id: ua-moped-2015
601
+ class: moped
602
+ categories: [moped]
603
+ period: { start: 2015 }
604
+ period_evidence: secondary-first-issue
605
+ matching: strict
606
+ format:
607
+ pattern: "LL 9999 LL"
608
+ regex: '\A[A-Z]{2} ?\d{4} ?[A-Z]{2}\z'
609
+ regex_strict: '\A[ABCEHIKMOPTX]{2} ?\d{4} ?(?:O[DFGJLNQRSUY]|[DG][ABCDEFGHIJKLMNOPRSTUVXYZ])\z'
610
+ charset:
611
+ series_first_letter: [D, G, O]
612
+ notes: >-
613
+ Fifty-nine pairs for subtype 3-1 in Додаток 5, written out exactly.
614
+ The O block is published with a CYRILLIC О («ОD ОF ОG ОJ ОL ОN ОQ ОR
615
+ ОS ОU ОY»); D and G are Latin. Note ОQ — the only place a Q follows a
616
+ non-Latin first letter anywhere in Додаток 5.
617
+ design:
618
+ plate: { w: 140, h: 114, unit: mm, lines: 2, lines_note: "statutory row count promoted from the layout notes (wave-1 render pass) — Додаток 1 підтип 3-1" }
619
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, chromaticity_ref: "білий" }
620
+ foreground: "#000000"
621
+ characters: { digit_height_mm: 30, letter_height_mm: 30 }
622
+ band: { side: left, position: upper, color: "#005BBB", content: "UA + Ukrainian flag", hex_basis: observed }
623
+ layout: "two-line: region літеросполука upper left, series upper right, four digits below"
624
+ rear_differs: false
625
+ region_encoding: "plates/_decode/ua-regions.yml"
626
+ sources:
627
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 підтип 3-1 «Знаки для мопедів»; Додаток 2 Таблиця 2 (140 x 114 mm, 4 digits, 4 letters, white/black, retroreflective); Додаток 3 (30 mm); Розділ III пп. 3, 6, 7, 9 (subtype 3-1 uses BOTH the Ukrainian and Latin alphabets)"
628
+ notes: >-
629
+ MOPEDS — Ukraine's smallest road plate. Same four-digit, four-letter
630
+ grammar as the car plate on a 140 x 114 mm rectangle. Mopeds became
631
+ subject to state registration under ст. 34 of the Закон «Про дорожній
632
+ рух» as amended by Закон № 586-VI від 24.09.2008, with effect from
633
+ 1 January 2010 — the obligation predates this design.
634
+
635
+ - id: ua-moped-electric-2021
636
+ class: electric
637
+ categories: [moped]
638
+ period: { start: 2021 }
639
+ period_evidence: enabling-instrument
640
+ matching: strict
641
+ format:
642
+ pattern: "LL 9999 LL"
643
+ regex: '\A[A-Z]{2} ?\d{4} ?[A-Z]{2}\z'
644
+ regex_strict: '\A[ABCEHIKMOPTX]{2} ?\d{4} ?(?:F[ABCDEHIKMOPT]|N[ABCDEFGHIJKLMNOPRSTUXY]|V[ABCDEFGHIJKLMNOPRSTUVXYZ]|[HKM][DFGJLNQRSUY])\z'
645
+ charset:
646
+ series_first_letter: [F, H, K, M, N, V]
647
+ notes: >-
648
+ Ninety-one pairs for subtype 3-2 in Додаток 5, written out exactly.
649
+ The H, К and М blocks are published with CYRILLIC К U+041A and
650
+ М U+041C and a Latin H, and VХ carries a CYRILLIC Х — the most
651
+ script-mixed row in the annex.
652
+ design:
653
+ plate: { w: 140, h: 114, unit: mm, lines: 2, lines_note: "statutory row count promoted from the layout notes (wave-1 render pass) — Додаток 1 підтип 3-1 (electric twin)" }
654
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, chromaticity_ref: "білий" }
655
+ foreground: "#009639"
656
+ characters: { digit_height_mm: 30, letter_height_mm: 30 }
657
+ band: { side: left, position: upper, color: "#005BBB", content: "UA + Ukrainian flag", hex_basis: observed }
658
+ rear_differs: false
659
+ region_encoding: "plates/_decode/ua-regions.yml"
660
+ sources:
661
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 підтип 3-2 «Спеціальні знаки для мопедів, які приводяться в рух електричним двигуном»; Додаток 2 Таблиця 2 (140 x 114, GREEN characters); Додаток 5 (the 91-pair block for subtype 3-2)"
662
+ notes: >-
663
+ ELECTRIC MOPEDS — green characters, and the largest special series block
664
+ in Додаток 5 after the electric car block. Ukraine gave e-mopeds 91 series
665
+ pairs and e-cars 93: the two blocks are disjoint, so the series pair alone
666
+ distinguishes an electric moped from an electric car.
667
+
668
+ - id: ua-moped-transit-2015
669
+ class: temporary
670
+ categories: [moped]
671
+ period: { start: 2015 }
672
+ period_evidence: secondary-first-issue
673
+ matching: strict
674
+ format:
675
+ pattern: "99 LL 9999"
676
+ regex: '\A\d{2} ?[A-Z]{2} ?\d{4}\z'
677
+ regex_strict: '\A(?:0[1-9]|1\d|2[0-7]|31) ?[ABCEHIKMOPTX]{2} ?\d{4}\z'
678
+ charset:
679
+ notes: >-
680
+ Розділ III п. 5 puts subtype 3-3 on the NUMERIC Додаток 6 codes;
681
+ Додаток 5 puts its series letters in the ordinary 144-pair block;
682
+ Розділ III п. 7 places them «після коду».
683
+ design:
684
+ plate: { w: 140, h: 114, unit: mm }
685
+ background: { color: "#D52B1E", finish: non-retroreflective, hex_basis: observed, chromaticity_ref: "червоний" }
686
+ foreground: "#FFFFFF"
687
+ characters: { digit_height_mm: 30, letter_height_mm: 30 }
688
+ material: "полістирольна стрічка permitted (Розділ IV п. 3)"
689
+ rear_differs: false
690
+ region_encoding: "plates/_decode/ua-regions.yml"
691
+ sources:
692
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 підтип 3-3 «Знаки для разових поїздок для мопедів»; Додаток 2 Таблиця 2 (140 x 114, red field, white characters, 6 digits, 2 letters, NO film); Розділ III пп. 5, 6, 7, 9"
693
+ notes: >-
694
+ THE MOPED TRANSIT PLATE — the type-2 grammar (numeric region code, series
695
+ pair, four-digit number) on the moped's 140 x 114 mm rectangle. Note that
696
+ it carries SIX digits where the ordinary moped plate carries four: the
697
+ transit family always spends two of its digits on the region.
698
+
699
+ # =========================================================================
700
+ # TYPE 4 — diplomatic and consular. OLIVE since the 761/2025 amendment.
701
+ # =========================================================================
702
+ - id: ua-diplomatic-cd-2025
703
+ class: diplomatic
704
+ categories: [car, van, bus]
705
+ period: { start: 2025 }
706
+ period_evidence: enabling-instrument
707
+ matching: strict
708
+ format:
709
+ pattern: "CD 999 999"
710
+ regex: '\ACD ?\d{3} ?\d{3}\z'
711
+ regex_strict: '\ACD ?(?:0(?:0[1-9]|[1-9]\d)|[1-4]\d{2}) ?\d{3}\z'
712
+ charset:
713
+ fixed_letters: "CD"
714
+ notes: >-
715
+ Розділ III п. 1: «літеросполуки «CD» — на знаках підтипів 4-1 та 4-2».
716
+ Розділ III п. 9: type 4 uses the LATIN alphabet. Розділ III п. 10:
717
+ «три цифри, розміщені безпосередньо після літер, позначають код
718
+ держави дипломатичного представництва, консульської установи,
719
+ міжнародної організації», and «три останні цифри позначають порядковий
720
+ номер транспортного засобу». regex_strict restricts the country code
721
+ to 001-499 on the Зміна № 1 до ДСТУ 4278:2012 footnote; the current
722
+ Вимоги state no range.
723
+ design:
724
+ plate: { w: 520, h: 112, unit: mm }
725
+ plate_variants:
726
+ - { w: 220, h: 174, unit: mm, note: "підтип 4-2 — the same format for motorcycles, scooters, quadricycles and tricycles of diplomatic staff; letters and digits 40 mm" }
727
+ background: { color: "#8A9A24", finish: retroreflective, hex_basis: observed, chromaticity_ref: "оливковий" }
728
+ foreground: "#FFFFFF"
729
+ characters: { digit_height_mm: 70, letter_height_mm: 70 }
730
+ band: { side: left, color: "#005BBB", content: "UA + Ukrainian flag", hex_basis: observed }
731
+ rear_differs: false
732
+ region_encoding: none
733
+ sources:
734
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 підтипи 4-1 / 4-2; Додаток 2 Таблиця 2 (520 x 112 and 220 x 174, 6 digits, 2 letters, ОЛИВКОВИЙ field, white characters); Додаток 3 (70 mm / 40 mm); Розділ III пп. 1, 8, 9, 10; Додаток 9 (the оливковий chromaticity box, added by Наказ № 761)"
735
+ - "https://web.archive.org/web/20180328225320/http://www.sai.gov.ua/uploads/filemanager/file/zmina-1-dstu-4278.pdf # Зміна № 1 до ДСТУ 4278:2012, Додаток А підтип 4-1 footnote: «Цифри 001-499 означають код держави дипломатичної установи, міжнародної організації, держави консульської установи» — the source of regex_strict's country-code range"
736
+ notes: >-
737
+ DIPLOMATIC STAFF of missions, consulates and international organisations,
738
+ and their families. The OLIVE field and white characters arrived with
739
+ Наказ МВС № 761 від 03.11.2025 (revision in force 16.12.2025), which also
740
+ replaced the previous «CDP» marking with «CD» and gave the plate the blue
741
+ UA band it did not previously carry. Before that these plates were WHITE
742
+ with black characters — see ua-diplomatic-cdp-2021. The country code is
743
+ allocated by the ГДІП, not by МВС; the per-country table is a decode
744
+ table for gate L4 and is deliberately not modelled here (PRD-PLATES §2.5).
745
+
746
+ - id: ua-consular-cc-2025
747
+ class: consular
748
+ categories: [car, van]
749
+ period: { start: 2025 }
750
+ period_evidence: enabling-instrument
751
+ matching: strict
752
+ format:
753
+ pattern: "CC 999 999"
754
+ regex: '\ACC ?\d{3} ?\d{3}\z'
755
+ regex_strict: '\ACC ?(?:0(?:0[1-9]|[1-9]\d)|[1-4]\d{2}) ?\d{3}\z'
756
+ charset:
757
+ fixed_letters: "CC"
758
+ notes: >-
759
+ Розділ III п. 1: «літеросполуки ... «СС» — на знаках підтипів 4-3 та
760
+ 4-4». THE INSTRUMENT PRINTS «СС» IN CYRILLIC (С U+0421 twice) while
761
+ п. 9 says type 4 uses the LATIN alphabet — an internal inconsistency,
762
+ recorded and not corrected. Either way the glyph pair is CC.
763
+ Розділ III п. 10: on 4-3 / 4-4 the first three digits are «код держави
764
+ почесного консульства».
765
+ design:
766
+ plate: { w: 520, h: 112, unit: mm }
767
+ plate_variants:
768
+ - { w: 220, h: 174, unit: mm, note: "підтип 4-4 — motorcycles etc. of honorary consulates; 40 mm characters" }
769
+ background: { color: "#8A9A24", finish: retroreflective, hex_basis: observed, chromaticity_ref: "оливковий" }
770
+ foreground: "#FFFFFF"
771
+ characters: { digit_height_mm: 70, letter_height_mm: 70 }
772
+ band: { side: left, color: "#005BBB", content: "UA + Ukrainian flag", hex_basis: observed }
773
+ rear_differs: false
774
+ region_encoding: none
775
+ sources:
776
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 підтипи 4-3 / 4-4 «Знаки для автомобілів почесних консульств та почесних консулів»; Додаток 2 Таблиця 2 (olive field, white characters, 6 digits, 2 letters); Розділ III пп. 1, 9, 10"
777
+ notes: >-
778
+ HONORARY CONSULATES AND HONORARY CONSULS — a Ukrainian distinction the
779
+ 2021 order draws that most jurisdictions fold into the consular class.
780
+ Before Наказ № 761 (2025) these subtypes were marked «DP» and were white;
781
+ the class boundary moved with the marking, so a pre-2025 «DP» plate is not
782
+ an honorary-consular plate.
783
+
784
+ - id: ua-diplomatic-s-2025
785
+ class: diplomatic
786
+ categories: [car, van]
787
+ period: { start: 2025 }
788
+ period_evidence: enabling-instrument
789
+ matching: strict
790
+ format:
791
+ pattern: "S 999 999"
792
+ regex: '\AS ?\d{3} ?\d{3}\z'
793
+ regex_strict: '\AS ?(?:0(?:0[1-9]|[1-9]\d)|[1-4]\d{2}) ?\d{3}\z'
794
+ charset:
795
+ fixed_letters: "S"
796
+ notes: "Розділ III п. 1: «літеру «S» — на знаках підтипів 4-5, 4-6 та типу 17». LATIN S (measured). Додаток 2 Таблиця 3 gives subtype 4-5 ONE letter and six digits."
797
+ design:
798
+ plate: { w: 520, h: 112, unit: mm }
799
+ plate_variants:
800
+ - { w: 220, h: 174, unit: mm, note: "підтип 4-6 — motorcycles etc. of administrative-technical staff; 40 mm characters" }
801
+ background: { color: "#8A9A24", finish: retroreflective, hex_basis: observed, chromaticity_ref: "оливковий" }
802
+ foreground: "#FFFFFF"
803
+ characters: { digit_height_mm: 70, letter_height_mm: 70 }
804
+ band: { side: left, color: "#005BBB", content: "UA + Ukrainian flag", hex_basis: observed }
805
+ rear_differs: false
806
+ region_encoding: none
807
+ sources:
808
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 підтипи 4-5 / 4-6 «Знаки для автомобілів адміністративно-технічного персоналу дипломатичних представництв, консульств, міжнародних організацій та членів їх сімей»; Додаток 2 Таблиця 3 (520 x 112 / 220 x 174, 6 digits, 1 letter, olive field, white characters); Розділ III пп. 1, 8, 9, 10"
809
+ notes: >-
810
+ ADMINISTRATIVE AND TECHNICAL STAFF of diplomatic missions — the single-S
811
+ plate. The only Ukrainian plate whose entire letter content is one
812
+ character. Note that «S» also marks type 17 (Управління державної
813
+ охорони), where it is followed by a region літеросполука and three
814
+ digits — the two are unambiguous on length.
815
+
816
+ - id: ua-diplomatic-cdp-2021
817
+ class: diplomatic
818
+ categories: [car, van, motorcycle]
819
+ period: { start: 2021, end: 2025 }
820
+ period_evidence: instrument-dated-both-ends
821
+ matching: strict
822
+ format:
823
+ pattern: "CDP 999"
824
+ regex: '\ACDP ?\d{3}\z'
825
+ charset:
826
+ fixed_letters: "CDP"
827
+ notes: >-
828
+ The 09.04.2021 text of Розділ III п. 1, verbatim: «літеросполуки
829
+ «CDP» - на знаках підтипів 4-1 та 4-2, «DP» - на знаках підтипів 4-3
830
+ та 4-4, літеру «S» - на знаках підтипів 4-5 та 4-6». Додаток 2
831
+ Таблиця 2 of the same text gives subtypes 4-1 / 4-2 THREE letters and
832
+ THREE digits — the three digits being the country code, per the
833
+ Зміна № 1 до ДСТУ 4278:2012 drawing «CDP 123».
834
+ design:
835
+ plate: { w: 520, h: 112, unit: mm }
836
+ plate_variants:
837
+ - { w: 220, h: 174, unit: mm, note: "підтип 4-2 (motorcycles)" }
838
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, chromaticity_ref: "білий" }
839
+ foreground: "#000000"
840
+ band: { side: none }
841
+ rear_differs: false
842
+ region_encoding: none
843
+ sources:
844
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21/ed20210409 # the ORIGINAL text of Наказ № 166: Розділ III п. 1 («CDP», «DP», «S»), Додаток 2 Таблиця 2 (4-1 / 4-2: 3 digits, 3 letters, БІЛИЙ field, black characters). Accessed 2026-08-03"
845
+ - "https://web.archive.org/web/20180328225320/http://www.sai.gov.ua/uploads/filemanager/file/zmina-1-dstu-4278.pdf # Зміна № 1 до ДСТУ 4278:2012, Додаток А підтип 4-1: «CDP – позначення призначеності; 123 – код»"
846
+ notes: >-
847
+ THE PREVIOUS DIPLOMATIC PLATE — white, black characters, marked «CDP»,
848
+ and carrying only the three-digit country code. Modelled because the
849
+ 2025 amendment changed marking, field colour and digit count at once, so
850
+ a consumer parsing a photograph taken before December 2025 needs this
851
+ series to exist. period is instrument-dated at BOTH ends: the original
852
+ Наказ № 166 at the lower end, Наказ № 761 від 03.11.2025 (revision in
853
+ force 16.12.2025) at the upper. Wikipedia dates the visible changeover to
854
+ April 2026, which is when the new plates began to appear rather than when
855
+ the requirement changed — the gap is stated in the dossier.
856
+
857
+ # =========================================================================
858
+ # TYPES 5 and 6 — motorcycles and their transit plates.
859
+ # =========================================================================
860
+ - id: ua-motorcycle-2015
861
+ class: motorcycle
862
+ categories: [motorcycle]
863
+ period: { start: 2015 }
864
+ period_evidence: secondary-first-issue
865
+ matching: strict
866
+ format:
867
+ pattern: "LL 9999 LL"
868
+ regex: '\A[A-Z]{2} ?\d{4} ?[A-Z]{2}\z'
869
+ regex_strict: '\A[ABCEHIKMOPTX]{2} ?\d{4} ?[JL][ABCDEFGHIJKLMNOPRSTUVXYZ]\z'
870
+ charset:
871
+ series_first_letter: [J, L]
872
+ notes: >-
873
+ Forty-eight pairs for subtypes 5-1-1 and 5-1-2 in Додаток 5: J and L
874
+ each with the same 24 second letters (every Latin letter except Q and
875
+ W). Exact, not approximate.
876
+ design:
877
+ plate: { w: 220, h: 174, unit: mm, lines: 3, lines_note: "statutory row count promoted from the layout notes (wave-1 render pass) — Додаток 1 підтип 5-1-1: region/code, number, series stacked" }
878
+ plate_variants:
879
+ - { w: 140, h: 114, unit: mm, note: "підтип 5-1-2 — the small motorcycle plate; characters 30 mm instead of 40 mm; region upper LEFT and series upper RIGHT instead of region top and series bottom" }
880
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, chromaticity_ref: "білий" }
881
+ foreground: "#000000"
882
+ characters: { digit_height_mm: 40, letter_height_mm: 40 }
883
+ band: { side: left, position: upper, color: "#005BBB", content: "UA + Ukrainian flag", hex_basis: observed }
884
+ layout: "підтип 5-1-1 — three lines: region літеросполука across the top, four digits, series pair at the bottom (Розділ III пп. 6, 7)"
885
+ rear_differs: false
886
+ region_encoding: "plates/_decode/ua-regions.yml"
887
+ sources:
888
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 підтипи 5-1-1 / 5-1-2 «Знаки для мотоциклів, моторолерів, мотоколясок, квадроциклів, трициклів ... а також для задніх причепів до них»; Додаток 2 Таблиця 3 (220 x 174 and 140 x 114, 4 digits, 4 letters, white/black); Додаток 3 (40 mm / 30 mm); Розділ III пп. 3, 6, 7, 9; Додаток 5 (the 48-pair J/L block)"
889
+ notes: >-
890
+ MOTORCYCLES, SCOOTERS, QUADRICYCLES AND TRICYCLES, and the rear trailers
891
+ towed by them. Two sizes, one grammar, one series block — so one series
892
+ with a plate variant rather than two. The J/L block is disjoint from every
893
+ other block in Додаток 5, which makes the series pair a sufficient
894
+ motorcycle test on its own.
895
+
896
+ - id: ua-motorcycle-electric-2021
897
+ class: electric
898
+ categories: [motorcycle]
899
+ period: { start: 2021 }
900
+ period_evidence: enabling-instrument
901
+ matching: strict
902
+ format:
903
+ pattern: "LL 9999 LL"
904
+ regex: '\A[A-Z]{2} ?\d{4} ?[A-Z]{2}\z'
905
+ regex_strict: '\A[ABCEHIKMOPTX]{2} ?\d{4} ?[RS][ABCDEFGHIJKLMNOPRSTUVXYZ]\z'
906
+ charset:
907
+ series_first_letter: [R, S]
908
+ notes: "Forty-eight pairs for subtypes 5-2-1 and 5-2-2 in Додаток 5 — R and S each with the same 24 second letters. Structurally the mirror of the J/L block."
909
+ design:
910
+ plate: { w: 220, h: 174, unit: mm, lines: 3, lines_note: "statutory row count promoted from the layout notes (wave-1 render pass) — Додаток 1 підтип 5-1-1 (electric twin)" }
911
+ plate_variants:
912
+ - { w: 140, h: 114, unit: mm, note: "підтип 5-2-2 — small plate, 30 mm characters" }
913
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, chromaticity_ref: "білий" }
914
+ foreground: "#009639"
915
+ characters: { digit_height_mm: 40, letter_height_mm: 40 }
916
+ band: { side: left, position: upper, color: "#005BBB", content: "UA + Ukrainian flag", hex_basis: observed }
917
+ rear_differs: false
918
+ region_encoding: "plates/_decode/ua-regions.yml"
919
+ sources:
920
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 підтипи 5-2-1 / 5-2-2 (electric motorcycles etc.); Додаток 2 Таблиця 3 (GREEN characters); Додаток 5 (the 48-pair R/S block)"
921
+ notes: >-
922
+ ELECTRIC MOTORCYCLES AND TRICYCLES — green characters, its own 48-pair
923
+ block. Ukraine gives every electric subtype a dedicated series block
924
+ rather than a suffix letter, so the electric fact is recoverable from the
925
+ serial alone on all six electric subtypes.
926
+
927
+ - id: ua-motorcycle-transit-2015
928
+ class: temporary
929
+ categories: [motorcycle]
930
+ period: { start: 2015 }
931
+ period_evidence: secondary-first-issue
932
+ matching: strict
933
+ format:
934
+ pattern: "99 9999 LL"
935
+ regex: '\A\d{2} ?\d{4} ?[A-Z]{2}\z'
936
+ regex_strict: '\A(?:0[1-9]|1\d|2[0-7]|31) ?\d{4} ?[ABCEHIKMOPTX]{2}\z'
937
+ charset:
938
+ notes: >-
939
+ Розділ III п. 6 puts the numeric region code «у верхній частині знака»
940
+ on subtype 6-1 and п. 7 puts the series pair «у нижній частині» — so
941
+ the reading order down the plate is code, number, series. The Зміна № 1
942
+ до ДСТУ 4278:2012 drawing for підтип 6-1 labels exactly that order:
943
+ «22 – код; 8320 – порядковий номер; АВ – серія».
944
+ design:
945
+ plate: { w: 220, h: 174, unit: mm, lines: 3, lines_note: "statutory row count promoted from the layout notes (wave-1 render pass) — Додаток 1 тип 6 підтип 6-1" }
946
+ background: { color: "#D52B1E", finish: non-retroreflective, hex_basis: observed, chromaticity_ref: "червоний" }
947
+ foreground: "#FFFFFF"
948
+ characters: { digit_height_mm: 40, letter_height_mm: 40, region_code_height_mm: 30 }
949
+ rear_differs: false
950
+ region_encoding: "plates/_decode/ua-regions.yml"
951
+ sources:
952
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 тип 6 «Знаки для разових поїздок для мотоциклів...»; Додаток 2 Таблиця 3 (підтип 6-1: 220 x 174, 6 digits, 2 letters, red field, white characters, no film); Додаток 3 (40 mm, region code 30 mm); Розділ III пп. 5, 6, 7"
953
+ - "https://web.archive.org/web/20180328225320/http://www.sai.gov.ua/uploads/filemanager/file/zmina-1-dstu-4278.pdf # Зміна № 1 до ДСТУ 4278:2012, Додаток А підтип 6-1 — the code / number / series stacking order"
954
+ notes: >-
955
+ THE LARGE MOTORCYCLE TRANSIT PLATE (subtype 6-1). Separated from
956
+ ua-motorcycle-transit-small-2015 because the instrument places the series
957
+ pair differently on the two subtypes, which changes the STRING and not
958
+ just the geometry: 6-1 reads code / number / series, 6-2 reads code /
959
+ series / number. This is the only place in the Ukrainian system where two
960
+ subtypes of one type produce different serial orders.
961
+
962
+ - id: ua-motorcycle-transit-small-2015
963
+ class: temporary
964
+ categories: [motorcycle]
965
+ period: { start: 2015 }
966
+ period_evidence: secondary-first-issue
967
+ matching: strict
968
+ format:
969
+ pattern: "99 LL 9999"
970
+ regex: '\A\d{2} ?[A-Z]{2} ?\d{4}\z'
971
+ regex_strict: '\A(?:0[1-9]|1\d|2[0-7]|31) ?[ABCEHIKMOPTX]{2} ?\d{4}\z'
972
+ charset:
973
+ notes: "Розділ III п. 7: on subtype 6-2 the series letters come «після коду адміністративно-територіальної належності», as on type 2 and subtype 3-3."
974
+ design:
975
+ plate: { w: 140, h: 114, unit: mm }
976
+ background: { color: "#D52B1E", finish: non-retroreflective, hex_basis: observed, chromaticity_ref: "червоний" }
977
+ foreground: "#FFFFFF"
978
+ characters: { digit_height_mm: 30, letter_height_mm: 30 }
979
+ rear_differs: false
980
+ region_encoding: "plates/_decode/ua-regions.yml"
981
+ sources:
982
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 2 Таблиця 3 (підтип 6-2: 140 x 114, 6 digits, 2 letters, red/white, no film); Додаток 3 (30 mm); Розділ III пп. 6, 7 (code upper LEFT, series after the code)"
983
+ notes: >-
984
+ THE SMALL MOTORCYCLE TRANSIT PLATE (subtype 6-2) — same red single-journey
985
+ family, same six digits and two letters, but the code-then-series order of
986
+ the car transit plate rather than the stacked order of subtype 6-1.
987
+
988
+ # =========================================================================
989
+ # TYPE 7 — plates made to the owner's individual order (vanity).
990
+ # Enabled by постанова КМУ № 1081 (2000), specified by the МВС Вимоги.
991
+ # =========================================================================
992
+ - id: ua-vanity-car
993
+ class: personalized
994
+ categories: [car, van, truck, bus]
995
+ period: { start: 2000 }
996
+ period_evidence: enabling-instrument
997
+ # RECALL-ONLY (PRD-PLATES §2.7): the content of a type-7 plate is chosen by
998
+ # the owner within limits that two instruments state DIFFERENTLY — постанова
999
+ # КМУ № 1081 says «від трьох до восьми символів» while Додаток 2 Таблиця 4
1000
+ # of the Вимоги gives «2-8» letters and «2 (7)» digits. The regex is the
1001
+ # union of both readings plus the two-digit region code the plate also
1002
+ # carries, so a match is a SHAPE hit and never a validity claim.
1003
+ matching: recall-only
1004
+ format:
1005
+ pattern: "99 LLL"
1006
+ regex: '\A\d{2} ?[A-Z0-9]{2,8}\z'
1007
+ pattern_note: >-
1008
+ The pattern shows the shortest legal shape: the two-digit region code
1009
+ (Додаток 6, printed small under the state symbol per Розділ III п. 6)
1010
+ followed by the owner's chosen characters. A graphic element may also
1011
+ appear (Розділ III п. 11), and it is not part of the serial.
1012
+ charset:
1013
+ notes: >-
1014
+ Розділ III п. 9: type 7 uses «літери української та латинської
1015
+ абеток» — the widest alphabet of any Ukrainian plate. Розділ III
1016
+ п. 11: a type-7 plate may carry letters; letters and digits; letters,
1017
+ digits and a graphic element; or letters and a graphic element.
1018
+ design:
1019
+ plate: { w: 520, h: 112, unit: mm }
1020
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, chromaticity_ref: "білий" }
1021
+ foreground: "#000000"
1022
+ characters: { digit_height_mm: 76, letter_height_mm: 76, alt_height_mm: 70, region_code_height_mm: 30 }
1023
+ band: { side: left, color: "#005BBB", content: "small state coat of arms on blue (Розділ III п. 2 — type 7 carries the герб, not the flag)", hex_basis: observed }
1024
+ emblem: { present: true, rendered: placeholder }
1025
+ rear_differs: false
1026
+ region_encoding: "plates/_decode/ua-regions.yml"
1027
+ sources:
1028
+ - "https://zakon.rada.gov.ua/laws/show/1081-2000-п # постанова КМУ від 11 липня 2000 р. № 1081 «Про запровадження номерних знаків транспортних засобів, що виготовляються за індивідуальними замовленнями їх власників», п. 1 and п. 2: «містить від трьох до восьми символів для автомобілів»; п. 2-1 (added by постанова КМУ № 1203 від 17.11.2021): «Зразки ... та вимоги до них установлюються Міністерством внутрішніх справ». Accessed 2026-08-03"
1029
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 підтип 7-1; Додаток 2 Таблиця 4 (520 x 112, 2 (7) digits, 2-8 letters, white/black, retroreflective); Додаток 3 (76 (70) mm, region code 30 mm); Розділ III пп. 2, 5, 6, 9, 11"
1030
+ notes: >-
1031
+ OWNER-ORDERED PLATES for cars. period.start 2000 is the enabling КМУ
1032
+ resolution, which is the date the regime began — the МВС Вимоги only took
1033
+ over the SPECIFICATION in 2021 (постанова КМУ № 1203 від 17.11.2021 added
1034
+ п. 2-1 and deleted the resolution's own annex of samples). Content limits
1035
+ that ARE sourced and are not in the regex: no state authority's name, no
1036
+ state arms or flag of Ukraine or of any other state or international
1037
+ organisation, nothing obscene or discriminatory, and — since постанова
1038
+ КМУ № 367 від 21.04.2023 — no symbolism of the communist or
1039
+ national-socialist totalitarian regimes or of the Russian invasion of
1040
+ Ukraine. One plate, one vehicle.
1041
+
1042
+ - id: ua-vanity-motorcycle
1043
+ class: personalized
1044
+ categories: [motorcycle]
1045
+ period: { start: 2000 }
1046
+ period_evidence: enabling-instrument
1047
+ matching: recall-only
1048
+ format:
1049
+ pattern: "99 LLL"
1050
+ regex: '\A\d{2} ?[A-Z0-9]{2,6}\z'
1051
+ pattern_note: "As ua-vanity-car, with the motorcycle limit: постанова КМУ № 1081 п. 2 «та від трьох до шести символів для мотоциклів»; Додаток 2 Таблиця 4 gives 2-6 letters and 2 (6) digits."
1052
+ design:
1053
+ plate: { w: 220, h: 174, unit: mm }
1054
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, chromaticity_ref: "білий" }
1055
+ foreground: "#000000"
1056
+ characters: { digit_height_mm: 40, alt_height_mm: 50, letter_height_mm: 40, region_code_height_mm: 30 }
1057
+ band: { side: left, position: upper, color: "#005BBB", content: "small state coat of arms on blue", hex_basis: observed }
1058
+ emblem: { present: true, rendered: placeholder }
1059
+ rear_differs: false
1060
+ region_encoding: "plates/_decode/ua-regions.yml"
1061
+ sources:
1062
+ - "https://zakon.rada.gov.ua/laws/show/1081-2000-п # п. 2, the six-symbol motorcycle limit. Accessed 2026-08-03"
1063
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 підтип 7-2; Додаток 2 Таблиця 4 (220 x 174, 2 (6) digits, 2-6 letters); Додаток 3 (40 (50) mm)"
1064
+ notes: >-
1065
+ OWNER-ORDERED PLATES for motorcycles — the same regime on the 220 x 174 mm
1066
+ plate, with the graphic element placed in the upper part rather than at
1067
+ the right edge (ДСТУ 4278:2004 п. 2.18, carried into practice). Two digits
1068
+ normally, up to six permitted, and two to six letters.
1069
+
1070
+ # =========================================================================
1071
+ # TYPE 8 — tractors and agricultural / construction machinery.
1072
+ # =========================================================================
1073
+ - id: ua-tractor-2015
1074
+ class: agricultural
1075
+ categories: [tractor, machine, trailer]
1076
+ period: { start: 2015 }
1077
+ period_evidence: secondary-first-issue
1078
+ matching: strict
1079
+ format:
1080
+ pattern: "99999 LL"
1081
+ regex: '\A\d{5} ?[A-Z]{2}\z'
1082
+ regex_strict: '\A\d{5} ?[ABCEHIKMOPTX]{2}\z'
1083
+ charset:
1084
+ notes: >-
1085
+ Розділ III п. 3 does NOT list subtypes 8-1-1 / 8-1-2 among the plates
1086
+ that carry a region літеросполука — only 8-2 does. Додаток 5 puts
1087
+ 8-1-1 and 8-1-2 in the ordinary 144-pair block, so both letters are
1088
+ SERIES letters and the plate carries no region at all. The Зміна № 1
1089
+ до ДСТУ 4278:2012 drawing for підтип 8-1 confirms it: «32419 –
1090
+ порядковий номер; АА – літеросполука, що позначає серію».
1091
+ design:
1092
+ plate: { w: 225, h: 165, unit: mm }
1093
+ plate_shape: "trapezoid — Додаток 2 Таблиця 4 gives 225 mm at the top and 125 mm at the bottom («У дужках наведено довжину нижньої частини знака»)"
1094
+ plate_variants:
1095
+ - { w: 520, h: 112, unit: mm, note: "підтип 8-1-2 — the long tractor plate; 70 mm characters instead of 58 mm; series pair to the RIGHT instead of at the bottom" }
1096
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, chromaticity_ref: "білий" }
1097
+ foreground: "#000000"
1098
+ characters: { digit_height_mm: 58, letter_height_mm: 58 }
1099
+ band: { side: none }
1100
+ rear_differs: false
1101
+ region_encoding: none
1102
+ sources:
1103
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 підтипи 8-1-1 / 8-1-2 «Знаки для тракторів, самохідних шасі, самохідних сільськогосподарських, дорожньо-будівельних і меліоративних машин, сільськогосподарської техніки, інших механізмів»; Додаток 2 Таблиця 4 (225 (125) x 165 and 520 x 112, 5 digits, 2 letters, white/black); Додаток 3 (58 / 70 mm); Розділ III пп. 3, 7, 9; Додаток 5 (8-1-1 and 8-1-2 in the ordinary block)"
1104
+ - "https://web.archive.org/web/20180328225320/http://www.sai.gov.ua/uploads/filemanager/file/zmina-1-dstu-4278.pdf # Зміна № 1 до ДСТУ 4278:2012, Додаток А підтип 8-1 — number then series, no region"
1105
+ notes: >-
1106
+ TRACTORS AND SELF-PROPELLED MACHINERY. Two facts make this the odd plate
1107
+ of the system: it is the ONLY non-rectangular Ukrainian plate (a trapezoid,
1108
+ 225 mm across the top and 125 mm across the bottom — the schema's
1109
+ `design.plate_shape` case), and it is the only ordinary-family plate with
1110
+ NO region encoding, because Розділ III п. 3 pointedly omits subtypes 8-1-1
1111
+ and 8-1-2 from the list of plates that may carry a літеросполука. Both
1112
+ letters are series letters.
1113
+
1114
+ - id: ua-tractor-transit
1115
+ class: temporary
1116
+ categories: [tractor, machine]
1117
+ period: { start: 2021 }
1118
+ period_evidence: enabling-instrument
1119
+ # RECALL-ONLY (PRD-PLATES §2.7): the instrument contradicts itself on the
1120
+ # letter count. Розділ III п. 6 says the letter «Т» is placed «ліворуч від
1121
+ # літеросполуки, що позначає адміністративно-територіальну належність» —
1122
+ # T plus a two-letter region pair, i.e. three letters — while Додаток 2
1123
+ # Таблиця 4 gives subtype 8-2 «Кількість літер: 2». The regex admits both
1124
+ # readings rather than picking one, so a match is a shape hit.
1125
+ matching: recall-only
1126
+ format:
1127
+ pattern: "T LL 99999"
1128
+ regex: '\AT ?[A-Z]{1,2} ?\d{5}\z'
1129
+ pattern_note: "The pattern shows the Розділ III п. 6 reading (Т + region pair + five digits); the regex also admits the Додаток 2 reading (Т + one letter + five digits)."
1130
+ charset:
1131
+ fixed_letters: "T"
1132
+ notes: >-
1133
+ «Т» is CYRILLIC Т U+0422 in the instrument (measured), transliterating
1134
+ to Latin T. Розділ III п. 3 lists subtype 8-2 among the plates that
1135
+ carry a region літеросполука from Додаток 4 — the only type-8 subtype
1136
+ that does.
1137
+ design:
1138
+ plate: { w: 190, h: 150, unit: mm }
1139
+ background: { color: "#D52B1E", finish: non-retroreflective, hex_basis: observed, chromaticity_ref: "червоний" }
1140
+ foreground: "#FFFFFF"
1141
+ characters: { digit_height_mm: 45, letter_height_mm: 45 }
1142
+ band: { side: right, position: upper, content: "oval bearing «UA» (Розділ III п. 2)" }
1143
+ material: "полістирольна стрічка permitted (Розділ IV п. 3)"
1144
+ rear_differs: false
1145
+ region_encoding: "plates/_decode/ua-regions.yml"
1146
+ sources:
1147
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 підтип 8-2 «Знаки номерні «транзит» для тракторів...»; Додаток 2 Таблиця 4 (190 x 150, 5 digits, 2 letters, red field, white characters, no film); Додаток 3 (45 mm); Розділ III пп. 2, 3, 6, 9"
1148
+ - "https://web.archive.org/web/20180328225320/http://www.sai.gov.ua/uploads/filemanager/file/zmina-1-dstu-4278.pdf # Зміна № 1 до ДСТУ 4278:2012, Додаток А підтип 8-2: «т – літеросполука, яка свідчить, що знак транзитний; АА – літеросполука, що означає адміністративно-територіальну належність; 00000 – порядковий номер» — the three-letter reading"
1149
+ notes: >-
1150
+ THE TRACTOR TRANSIT PLATE, issued when machinery is sold through a maker
1151
+ or dealer. Recorded as recall-only because the ВИМОГИ disagree with
1152
+ themselves about how many letters it carries and this pass will not
1153
+ average two primary readings — the older ДСТУ drawing supports the
1154
+ three-letter reading, Додаток 2 supports two. Flagged for the verifier as
1155
+ the highest-value single question in this file.
1156
+
1157
+ # =========================================================================
1158
+ # TYPES 9 and 10 — the armed forces. Black field, white characters, and the
1159
+ # only Ukrainian plates whose letters are NOT restricted to the twelve.
1160
+ # =========================================================================
1161
+ - id: ua-military
1162
+ class: military
1163
+ categories: [car, van, truck, bus, trailer, machine]
1164
+ period: { start: 2004 }
1165
+ period_evidence: enabling-instrument
1166
+ # RECALL-ONLY (PRD-PLATES §2.7): Розділ III п. 9 says these plates use
1167
+ # «літери української абетки» WITHOUT the homoglyph restriction, so the
1168
+ # letter may be one of Ukrainian's non-Latin letters (Г, Ф, Ч, Ю, Я ...)
1169
+ # that this dataset's Latin-transliterated regex cannot express. A match on
1170
+ # [A-Z] is therefore a shape hit: it neither covers the whole issuing
1171
+ # alphabet nor lies inside it.
1172
+ matching: recall-only
1173
+ format:
1174
+ pattern: "9999 L9"
1175
+ regex: '\A\d{4} ?[A-Z]\d\z'
1176
+ pattern_note: >-
1177
+ Додаток 2 Таблиця 4 gives type 9 five digits and one letter. The
1178
+ arrangement — four digits of running number, then a letter-plus-digit
1179
+ series — is not stated in the Вимоги; it is the Ukrainian Wikipedia
1180
+ article's description and is tagged as such in sources.
1181
+ charset:
1182
+ notes: >-
1183
+ Розділ III п. 9: «На знаках типу 9, 10, 12 застосовують літери
1184
+ української абетки» — the FULL Ukrainian alphabet, with no
1185
+ Latin-lookalike restriction. Neither Додаток 4 nor Додаток 5 covers
1186
+ types 9 and 10: the armed forces set their own information content
1187
+ (Зміна № 1 до ДСТУ 4278:2012, п. 3.1: «Інформаційний зміст знаків
1188
+ типів 9 та 10 визначають у встановленому порядку відповідні
1189
+ уповноважені органи»). There is therefore NO statutory series list to
1190
+ write a strict twin against.
1191
+ design:
1192
+ plate: { w: 520, h: 112, unit: mm }
1193
+ background: { color: "#000000", finish: painted, hex_basis: observed }
1194
+ foreground: "#FFFFFF"
1195
+ characters: { digit_height_mm: 76, letter_height_mm: 76 }
1196
+ band: { side: none }
1197
+ material: "листова сталь permitted for types 9, 10 and 18 (Розділ IV п. 3); painted to ДСТУ ISO 12944-7:2019 rather than filmed (Розділ IV п. 5)"
1198
+ rear_differs: false
1199
+ region_encoding: none
1200
+ sources:
1201
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 тип 9 «Знаки для всіх типів автомобілів, автомобільних причепів, автобусів, самохідних машин та механізмів Збройних Сил України, а також тих, які належать органам військової контррозвідки Служби безпеки України»; Додаток 2 Таблиця 4 (520 x 112, 5 digits, 1 letter, ЧОРНИЙ field, white characters, no film); Додаток 3 (76 mm); Розділ III п. 9; Розділ IV пп. 3, 5"
1202
+ - "http://www.infocar.com.ua/law_ukr/law_22.html # ДСТУ 4278:2004 «Чинний від 2004-02-20», Таблиця 2 (types 9, 10) and Таблиця 4 (type 9: 5 digits, 1 letter) — verbatim reproduction of the national standard; the official text is behind ДП «УкрНДНЦ». Accessed 2026-08-03"
1203
+ - "https://uk.wikipedia.org/wiki/Номерні_знаки_України # the four-digit unit number plus letter-and-digit series arrangement, and the claim that the black design is unchanged since 1995. secondary-wikipedia; accessed 2026-08-03"
1204
+ notes: >-
1205
+ ARMED FORCES OF UKRAINE and the military counter-intelligence organs of
1206
+ the SBU. Black field, white characters, steel permitted, no retroreflective
1207
+ film and no state symbol. period.start 2004 is the earliest date this pass
1208
+ could EVIDENCE (ДСТУ 4278:2004, in force 20 February 2004, already
1209
+ contains types 9 and 10 with today's counts); the design is widely
1210
+ reported unchanged since 1995 and the true start is therefore earlier —
1211
+ a recorded gap, not a claim.
1212
+
1213
+ - id: ua-military-motorcycle
1214
+ class: military
1215
+ categories: [motorcycle, tractor, trailer]
1216
+ period: { start: 2004 }
1217
+ period_evidence: enabling-instrument
1218
+ matching: recall-only
1219
+ format:
1220
+ pattern: "9999 L9"
1221
+ regex: '\A\d{4} ?[A-Z]\d\z'
1222
+ pattern_note: "Same five-digit / one-letter content as type 9 on the 220 x 174 mm plate."
1223
+ design:
1224
+ plate: { w: 220, h: 174, unit: mm }
1225
+ background: { color: "#000000", finish: painted, hex_basis: observed }
1226
+ foreground: "#FFFFFF"
1227
+ characters: { digit_height_mm: 58, letter_height_mm: 58 }
1228
+ band: { side: none }
1229
+ rear_differs: false
1230
+ region_encoding: none
1231
+ sources:
1232
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 тип 10 «Знаки для мотоциклів, моторолерів, мотоколясок, квадроциклів, трициклів ... тракторів і тракторних причепів Збройних Сил України»; Додаток 2 Таблиця 4 (220 x 174, 5 digits, 1 letter, black/white); Додаток 3 (58 mm)"
1233
+ - "http://www.infocar.com.ua/law_ukr/law_22.html # ДСТУ 4278:2004 Таблиця 2 and Таблиця 4 (type 10: 5 digits, 1 letter). Accessed 2026-08-03"
1234
+ notes: >-
1235
+ ARMED FORCES MOTORCYCLES, TRACTORS AND TRACTOR TRAILERS — type 9's content
1236
+ on the motorcycle plate. Separated from ua-military because the plate size
1237
+ and character height differ, which is a design break under
1238
+ _meta/classes.yml's own rule.
1239
+
1240
+ # =========================================================================
1241
+ # TYPE 11 — the National Police. The only Ukrainian plate with NO letters.
1242
+ # =========================================================================
1243
+ - id: ua-police-2021
1244
+ class: police
1245
+ categories: [car, van, truck, bus, machine]
1246
+ period: { start: 2021 }
1247
+ period_evidence: enabling-instrument
1248
+ matching: strict
1249
+ format:
1250
+ pattern: "99 9999"
1251
+ regex: '\A\d{2} ?\d{4}\z'
1252
+ regex_strict: '\A(?:0[1-9]|1\d|2[0-7]|31) ?\d{4}\z'
1253
+ charset:
1254
+ notes: >-
1255
+ Додаток 2 Таблиця 5 gives subtype 11-1 six digits and «–» letters.
1256
+ Розділ III п. 5 puts type 11 on the NUMERIC Додаток 6 codes and п. 6
1257
+ places the code «під символом державної належності» — printed at
1258
+ 30 mm against the number's 76 mm, so the two are visually distinct
1259
+ fields on one plate rather than one six-digit string.
1260
+ design:
1261
+ plate: { w: 520, h: 112, unit: mm }
1262
+ plate_variants:
1263
+ - { w: 220, h: 174, unit: mm, note: "підтип 11-2 — motorcycles, tractors and tractor trailers of the National Police; digits 50 mm, region code 25 mm" }
1264
+ background: { color: "#8CC8E8", finish: retroreflective, hex_basis: observed, chromaticity_ref: "світло-блакитний" }
1265
+ foreground: "#FFFFFF"
1266
+ characters: { digit_height_mm: 76, region_code_height_mm: 30 }
1267
+ band: { side: left, color: "#005BBB", content: "small state coat of arms on blue", hex_basis: observed }
1268
+ emblem: { present: true, rendered: placeholder, note: "Розділ III п. 13: the plate must carry the emblem of the National Police of Ukraine, described and drawn in Указ Президента України від 09 грудня 2015 року № 692" }
1269
+ rear_differs: false
1270
+ region_encoding: "plates/_decode/ua-regions.yml"
1271
+ sources:
1272
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 підтипи 11-1 / 11-2 «Знаки для всіх типів автомобілів, самохідних машин та механізмів Національної поліції України, що використовуються для забезпечення публічної безпеки і порядку»; Додаток 2 Таблиця 5 (520 x 112 and 220 x 174, 6 digits, NO letters, СВІТЛО-БЛАКИТНИЙ field, white characters); Додаток 3 (76 / 50 mm, code 30 / 25 mm); Розділ III пп. 2, 5, 6, 13; Додаток 9 (світло-блакитний chromaticity box)"
1273
+ - "https://web.archive.org/web/20180328225320/http://www.sai.gov.ua/uploads/filemanager/file/zmina-1-dstu-4278.pdf # Зміна № 1 до ДСТУ 4278:2012, Додаток А тип 11: «16 – код адміністративно-територіальної належності; 3412 – порядковий номер»"
1274
+ notes: >-
1275
+ NATIONAL POLICE. The only Ukrainian plate with no letters at all, and the
1276
+ only one on the світло-блакитний field. The six digits Додаток 2 counts
1277
+ include the two-digit region code printed small under the state arms, so
1278
+ the number a human reads off the plate is four digits. The emblem is a
1279
+ presidential-decree device and is rendered as a neutral placeholder per
1280
+ PRD-PLATES §3 until its own licensing is affirmatively cleared.
1281
+
1282
+ # =========================================================================
1283
+ # TYPES 13-17 — uniformed state services. One designation letter, a region
1284
+ # літеросполука and three digits. Added to the order in three waves.
1285
+ # =========================================================================
1286
+ - id: ua-dsns-2021
1287
+ class: government
1288
+ categories: [car, van, truck, trailer, machine]
1289
+ period: { start: 2021 }
1290
+ period_evidence: enabling-instrument
1291
+ matching: strict
1292
+ format:
1293
+ pattern: "LLL 999"
1294
+ regex: '\A[A-Z] ?[A-Z]{2} ?\d{3}\z'
1295
+ regex_strict: '\AE ?[ABCEHIKMOPTX]{2} ?\d{3}\z'
1296
+ charset:
1297
+ designation_letter: "E (Cyrillic Е U+0415)"
1298
+ notes: >-
1299
+ Розділ III п. 1: «літеру «Е» — на знаках типу 13». Розділ III п. 3
1300
+ admits the Додаток 4 літеросполуки on types 12-17. Додаток 2 Таблиця 5
1301
+ gives three letters and three digits, which is exactly designation +
1302
+ region pair + serial. THE INSTRUMENT DOES NOT STATE the order of the
1303
+ designation letter relative to the літеросполука for types 13-17; the
1304
+ order used here is inferred from Розділ III п. 6, which for subtype
1305
+ 8-2 does state it («літеру «Т» розміщують ліворуч від літеросполуки»).
1306
+ The regex accepts an optional gap at both letter boundaries so that a
1307
+ plate printed either way still matches.
1308
+ design:
1309
+ plate: { w: 520, h: 112, unit: mm }
1310
+ plate_variants:
1311
+ - { w: 220, h: 174, unit: mm, note: "тип 13-2 — motorcycles, tractors and tractor trailers; 40 mm characters" }
1312
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, chromaticity_ref: "білий" }
1313
+ foreground: "#000000"
1314
+ characters: { digit_height_mm: 70, letter_height_mm: 70 }
1315
+ band: { side: left, color: "#005BBB", content: "UA + Ukrainian flag", hex_basis: observed }
1316
+ emblem: { present: true, rendered: placeholder, note: "Розділ III п. 14: emblem of the ДСНС per Указ Президента України від 16 вересня 2016 року № 395" }
1317
+ rear_differs: false
1318
+ region_encoding: "plates/_decode/ua-regions.yml"
1319
+ sources:
1320
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 підтипи 13-1 / 13-2 «Знаки ... Оперативно-рятувальної служби цивільного захисту»; Додаток 2 Таблиця 5 (520 x 112 and 220 x 174, 3 digits, 3 letters, white/black); Додаток 3 (70 / 40 mm); Розділ III пп. 1, 3, 6, 9, 14"
1321
+ notes: >-
1322
+ THE STATE EMERGENCY SERVICE (ДСНС) fire and rescue fleet. Designation
1323
+ letter «Е» — Cyrillic Е U+0415, transliterating to Latin E, NOT the Latin
1324
+ E of an English word. Present in the original 2021 order, unlike types 16,
1325
+ 17 and 18.
1326
+
1327
+ - id: ua-border-guard-2021
1328
+ class: government
1329
+ categories: [car, van, truck, trailer, machine]
1330
+ period: { start: 2021 }
1331
+ period_evidence: enabling-instrument
1332
+ matching: strict
1333
+ format:
1334
+ pattern: "LLL 999"
1335
+ regex: '\A[A-Z] ?[A-Z]{2} ?\d{3}\z'
1336
+ regex_strict: '\AB ?[ABCEHIKMOPTX]{2} ?\d{3}\z'
1337
+ charset:
1338
+ designation_letter: "B (Cyrillic В U+0412)"
1339
+ notes: >-
1340
+ Розділ III п. 1: «літеру «В» — на знаках типу 14». THE LETTER IS
1341
+ CYRILLIC В U+0412, whose Latin lookalike is B — a plate reading
1342
+ "В АА 123" transliterates to "B AA 123" and NEVER to "V AA 123". This
1343
+ is the single most likely transliteration error in the Ukrainian
1344
+ system and it is why the homoglyph map in `script:` is published.
1345
+ design:
1346
+ plate: { w: 520, h: 112, unit: mm }
1347
+ plate_variants:
1348
+ - { w: 220, h: 174, unit: mm, note: "тип 14-2 — motorcycles, tractors and tractor trailers; 40 mm characters" }
1349
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, chromaticity_ref: "білий" }
1350
+ foreground: "#000000"
1351
+ characters: { digit_height_mm: 70, letter_height_mm: 70 }
1352
+ band: { side: left, color: "#005BBB", content: "UA + Ukrainian flag", hex_basis: observed }
1353
+ emblem: { present: true, rendered: placeholder, note: "Розділ III п. 15: emblem of the Державна прикордонна служба per Указ Президента України від 07 серпня 2001 року № 594" }
1354
+ rear_differs: false
1355
+ region_encoding: "plates/_decode/ua-regions.yml"
1356
+ sources:
1357
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 підтипи 14-1 / 14-2 «Знаки ... Державної прикордонної служби України»; Додаток 2 Таблиця 5; Додаток 3; Розділ III пп. 1, 3, 9, 15"
1358
+ notes: >-
1359
+ THE STATE BORDER GUARD SERVICE. Classed `government` rather than
1360
+ `military` because the vocabulary's `military` entry reads "armed-forces
1361
+ registration systems" and the ДПСУ, though a military formation in
1362
+ Ukrainian law, is not part of the Збройні Сили and does not use the
1363
+ type 9/10 black plates. The class assignment is a curation judgement and
1364
+ is recorded as such.
1365
+
1366
+ - id: ua-national-guard-2021
1367
+ class: government
1368
+ categories: [car, van, truck, trailer, machine]
1369
+ period: { start: 2021 }
1370
+ period_evidence: enabling-instrument
1371
+ matching: strict
1372
+ format:
1373
+ pattern: "LLL 999"
1374
+ regex: '\A[A-Z] ?[A-Z]{2} ?\d{3}\z'
1375
+ regex_strict: '\AG ?[ABCEHIKMOPTX]{2} ?\d{3}\z'
1376
+ charset:
1377
+ designation_letter: "G (Latin G — measured; there is no Cyrillic homoglyph for G)"
1378
+ notes: >-
1379
+ Розділ III п. 1: «літеру «G» — на знаках типу 15». Розділ III п. 9
1380
+ lists type 15 among those using «літери української та латинської
1381
+ абеток», which is exactly why a Latin-only letter can appear here.
1382
+ design:
1383
+ plate: { w: 520, h: 112, unit: mm }
1384
+ plate_variants:
1385
+ - { w: 220, h: 174, unit: mm, note: "тип 15-2 — motorcycles, tractors and tractor trailers; 40 mm characters" }
1386
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, chromaticity_ref: "білий" }
1387
+ foreground: "#000000"
1388
+ characters: { digit_height_mm: 70, letter_height_mm: 70 }
1389
+ band: { side: left, color: "#005BBB", content: "UA + Ukrainian flag", hex_basis: observed }
1390
+ emblem: { present: true, rendered: placeholder, note: "Розділ III п. 16: emblem of the Національна гвардія per Указ Президента України від 12 травня 2014 року № 464" }
1391
+ rear_differs: false
1392
+ region_encoding: "plates/_decode/ua-regions.yml"
1393
+ sources:
1394
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 підтипи 15-1 / 15-2 «Знаки ... Національної гвардії України»; Додаток 2 Таблиця 6 (520 x 112 and 220 x 174, 3 digits, 3 letters, white/black); Додаток 3; Розділ III пп. 1, 3, 9, 16"
1395
+ notes: >-
1396
+ THE NATIONAL GUARD OF UKRAINE. Its designation letter «G» has no Cyrillic
1397
+ lookalike at all, which makes a National Guard plate the clearest
1398
+ demonstration that Ukraine's letter set is genuinely two alphabets and not
1399
+ one transliterated one.
1400
+
1401
+ - id: ua-sbu-2023
1402
+ class: government
1403
+ categories: [car, van, truck, trailer, machine]
1404
+ period: { start: 2023 }
1405
+ period_evidence: enabling-instrument
1406
+ matching: strict
1407
+ format:
1408
+ pattern: "LLL 999"
1409
+ regex: '\A[A-Z] ?[A-Z]{2} ?\d{3}\z'
1410
+ regex_strict: '\AC ?[ABCEHIKMOPTX]{2} ?\d{3}\z'
1411
+ charset:
1412
+ designation_letter: "C (Cyrillic С U+0421)"
1413
+ notes: "Розділ III п. 1: «літеру «С» — на знаках типу 16». Cyrillic С U+0421 -> Latin C, never S."
1414
+ design:
1415
+ plate: { w: 520, h: 112, unit: mm }
1416
+ plate_variants:
1417
+ - { w: 220, h: 174, unit: mm, note: "тип 16-2 — motorcycles, tractors and tractor trailers; 40 mm characters" }
1418
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, chromaticity_ref: "білий" }
1419
+ foreground: "#000000"
1420
+ characters: { digit_height_mm: 70, letter_height_mm: 70 }
1421
+ band: { side: left, color: "#005BBB", content: "UA + Ukrainian flag", hex_basis: observed }
1422
+ emblem: { present: true, rendered: placeholder, note: "Розділ III п. 17: emblem of the СБУ per Указ Президента України від 14 лютого 2002 року № 129" }
1423
+ rear_differs: false
1424
+ region_encoding: "plates/_decode/ua-regions.yml"
1425
+ sources:
1426
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 підтипи 16-1 / 16-2 «Знаки ... Служби безпеки України, крім транспортних засобів, які належать органам військової контррозвідки Служби безпеки України»; Додаток 2 Таблиця 6; Розділ III пп. 1, 9, 17 (the п. 17 emblem paragraph was ADDED by Наказ МВС № 259 від 31.03.2023, which is what dates this series)"
1427
+ notes: >-
1428
+ THE SECURITY SERVICE OF UKRAINE, minus its military counter-intelligence
1429
+ organs, which take the black armed-forces plates of type 9/10 instead —
1430
+ the instrument carves that exception in both places, and it is the only
1431
+ Ukrainian body split across two plate types. period.start 2023 is
1432
+ Наказ МВС № 259 від 31.03.2023, which created type 16.
1433
+
1434
+ - id: ua-udo-2024
1435
+ class: government
1436
+ categories: [car, van, truck, trailer, machine]
1437
+ period: { start: 2024 }
1438
+ period_evidence: enabling-instrument
1439
+ matching: strict
1440
+ format:
1441
+ pattern: "LLL 999"
1442
+ regex: '\A[A-Z] ?[A-Z]{2} ?\d{3}\z'
1443
+ regex_strict: '\AS ?[ABCEHIKMOPTX]{2} ?\d{3}\z'
1444
+ charset:
1445
+ designation_letter: "S (Latin S)"
1446
+ notes: >-
1447
+ Розділ III п. 1: «літеру «S» — на знаках підтипів 4-5, 4-6 та типу
1448
+ 17». The same letter serves the diplomatic administrative-technical
1449
+ plate and the state-protection service; they are separable on shape
1450
+ (S + 6 digits versus S + 2 letters + 3 digits) and on field colour
1451
+ (olive versus white).
1452
+ design:
1453
+ plate: { w: 520, h: 112, unit: mm }
1454
+ plate_variants:
1455
+ - { w: 220, h: 174, unit: mm, note: "тип 17-2 — motorcycles, tractors and tractor trailers; 40 mm characters" }
1456
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, chromaticity_ref: "білий" }
1457
+ foreground: "#000000"
1458
+ characters: { digit_height_mm: 70, letter_height_mm: 70 }
1459
+ band: { side: left, color: "#005BBB", content: "UA + Ukrainian flag", hex_basis: observed }
1460
+ emblem: { present: true, rendered: placeholder, note: "Розділ III п. 18: emblem of the Управління державної охорони per Указ Президента України від 05 грудня 2001 року № 1189" }
1461
+ rear_differs: false
1462
+ region_encoding: "plates/_decode/ua-regions.yml"
1463
+ sources:
1464
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 підтипи 17-1 / 17-2 «Знаки ... Управління державної охорони України»; Додаток 2 Таблиця 6; Розділ III пп. 1, 9, 18 (the п. 18 emblem paragraph was ADDED by Наказ МВС № 53 від 30.01.2024, which dates this series)"
1465
+ notes: >-
1466
+ THE STATE GUARD DEPARTMENT (УДО) — the service that protects the
1467
+ President and the highest offices of state. Added to the order in 2024,
1468
+ the second-newest Ukrainian plate type.
1469
+
1470
+ - id: ua-dsst-2025
1471
+ class: military
1472
+ categories: [car, van, truck, bus, trailer, machine]
1473
+ period: { start: 2025 }
1474
+ period_evidence: enabling-instrument
1475
+ # RECALL-ONLY (PRD-PLATES §2.7): Додаток 2 Таблиця 6 gives type 18 five
1476
+ # digits and one letter, and Розділ III п. 1 names the letters «D», «С»,
1477
+ # «О» — but nothing in the instrument states whether the letter leads or
1478
+ # trails the digits, and type 18 is three months old with no published
1479
+ # sample text. The regex admits both orders, so a match is a shape hit.
1480
+ matching: recall-only
1481
+ format:
1482
+ pattern: "L 99999"
1483
+ regex: '\A(?:[A-Z] ?\d{5}|\d{5} ?[A-Z])\z'
1484
+ pattern_note: "The pattern shows the letter-leading reading, by analogy with types 13-17; the regex also admits the digits-leading reading of types 9 and 10, which type 18 otherwise resembles."
1485
+ charset:
1486
+ designation_letters: "D (Latin), C (Cyrillic С U+0421), O (Cyrillic О U+041E)"
1487
+ notes: "Розділ III п. 1: «літери «D», «С», «О» — на знаках типу 18». Розділ III п. 9 puts type 18 on both alphabets, which is consistent with one Latin and two Cyrillic designation letters."
1488
+ design:
1489
+ plate: { w: 520, h: 112, unit: mm }
1490
+ plate_variants:
1491
+ - { w: 220, h: 174, unit: mm, note: "підтип 18-2 — motorcycles, tractors and tractor trailers; 58 mm characters" }
1492
+ background: { color: "#FFFFFF", finish: non-retroreflective, hex_basis: observed, chromaticity_ref: "білий" }
1493
+ foreground: "#000000"
1494
+ characters: { digit_height_mm: 76, letter_height_mm: 76 }
1495
+ band: { side: none }
1496
+ material: "листова сталь permitted (Розділ IV п. 3); painted rather than filmed (Розділ IV п. 5)"
1497
+ rear_differs: false
1498
+ region_encoding: none
1499
+ sources:
1500
+ - "https://zakon.rada.gov.ua/laws/show/z0353-21 # Додаток 1 підтипи 18-1 / 18-2 «Знаки ... Державної спеціальної служби транспорту, Державної служби спеціального зв’язку та захисту інформації України»; Додаток 2 Таблиця 6 (520 x 112 and 220 x 174, 5 digits, 1 letter, white field, black characters, NO retroreflective film); Додаток 3 (76 / 58 mm); Розділ III пп. 1, 9; Розділ IV пп. 3, 5 — the whole type was added by Наказ МВС № 761 від 03.11.2025"
1501
+ notes: >-
1502
+ THE STATE SPECIAL TRANSPORT SERVICE and the State Service of Special
1503
+ Communications — both military formations, which is why the class is
1504
+ `military` and why the plate takes the armed-forces treatment (steel,
1505
+ paint, no film) on a white field rather than black. THE NEWEST UKRAINIAN
1506
+ PLATE TYPE, three months old at the time of this pass. Until 2025 these
1507
+ services' vehicles carried the black type 9/10 plates, which the
1508
+ Зміна № 1 до ДСТУ 4278:2012 expressly extended to them.
1509
+
1510
+ # =========================================================================
1511
+ # THE PREVIOUS DESIGN REGIME — ДСТУ 4278:2004, «Чинний від 2004-02-20»,
1512
+ # superseded in issue by the 2015 design. Same serial grammar throughout:
1513
+ # the 2015 break is a DESIGN break, which is why these five entries exist.
1514
+ # =========================================================================
1515
+ - id: ua-standard-2004
1516
+ class: standard
1517
+ categories: [car, van, truck, bus, trailer]
1518
+ period: { start: 2004, end: 2015 }
1519
+ period_evidence: enabling-instrument
1520
+ matching: strict
1521
+ format:
1522
+ pattern: "LL 9999 LL"
1523
+ regex: '\A[A-Z]{2} ?\d{4} ?[A-Z]{2}\z'
1524
+ regex_strict: '\A[ABCEHIKMOPTX]{2} ?\d{4} ?[ABCEHIKMOPTX]{2}\z'
1525
+ charset:
1526
+ notes: >-
1527
+ ДСТУ 4278:2004 п. 2.6: «На знаках типів 1 та 5 літери української
1528
+ абетки, розміщені з лівого боку знака, означають адміністративно-
1529
+ територіальну або загальнодержавну належність ... Літери української
1530
+ абетки, розміщені з правого боку знака, означають його серію», with
1531
+ Додаток Б (27 regions + the загальнодержавна pair ІІ) and Додаток В
1532
+ (the series grid). Примітка 1 to Таблиця 4: «Для знаків, за винятком
1533
+ типу 4, застосовують літери української абетки, що збігаються з
1534
+ написом літер латинської абетки» — the twelve-letter rule, already in
1535
+ force in 2004.
1536
+ design:
1537
+ plate: { w: 520, h: 112, unit: mm }
1538
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
1539
+ foreground: "#000000"
1540
+ band:
1541
+ side: left
1542
+ color: "#005BBB"
1543
+ color_lower: "#FFD700"
1544
+ content: "small state coat of arms above, «UA» below, on a rectangle split into equal blue (upper) and lemon-yellow (lower) halves"
1545
+ hex_basis: observed
1546
+ rear_differs: false
1547
+ region_encoding: "plates/_decode/ua-regions.yml"
1548
+ sources:
1549
+ - "http://www.infocar.com.ua/law_ukr/law_22.html # ДСТУ 4278:2004 «ДОРОЖНІЙ ТРАНСПОРТ. ЗНАКИ НОМЕРНІ ТРАНСПОРТНИХ ЗАСОБІВ. Загальні вимоги. Правила застосування», «Чинний від 2004-02-20»: Таблиця 1 (type 1), Таблиця 3 (520 x 112), Таблиця 4 (type 1: 4 digits), п. 2.6 (letter roles), п. 2.9 (the blue-over-lemon-yellow panel with the arms above and UA below), Додаток Б, Додаток В. Verbatim reproduction of the national standard; the official text is behind ДП «УкрНДНЦ». Accessed 2026-08-03"
1550
+ - "https://uk.wikipedia.org/wiki/Номерні_знаки_України # period.end 2015 — the date issue of the current design began. secondary-wikipedia; accessed 2026-08-03"
1551
+ notes: >-
1552
+ THE 2004 PLATE. Same АА 1234 АА grammar as today's — the 2015 change was
1553
+ the BAND and the font, not the serial. The 2004 panel is described by the
1554
+ standard itself and is the reliable way to date a Ukrainian photograph:
1555
+ «зліва у вигляді прямокутника, поділеного на дві рівні частини, верхня з
1556
+ яких блакитного кольору, а нижня лимонно-жовтого, у вигляді напису UА
1557
+ знизу та малого герба України зверху». The blue UA/flag band of the
1558
+ current design replaced it. period.start is the standard's own
1559
+ commencement line; period.end is the secondary first-issue date of the
1560
+ successor design, and old-stock plates remain valid indefinitely — a
1561
+ 2004-design plate on the road in 2026 is entirely lawful.
1562
+
1563
+ - id: ua-taxi-2004
1564
+ class: taxi
1565
+ categories: [car, bus, van]
1566
+ period: { start: 2004, end: 2015 }
1567
+ period_evidence: enabling-instrument
1568
+ matching: strict
1569
+ format:
1570
+ pattern: "LL 9999 LL"
1571
+ regex: '\A[A-Z]{2} ?\d{4} ?[A-Z]{2}\z'
1572
+ regex_strict: '\A[ABCEHIKMOPTX]{2} ?\d{4} ?[ABCEHIKMOPTX]{2}\z'
1573
+ design:
1574
+ plate: { w: 520, h: 112, unit: mm }
1575
+ background: { color: "#FFCC00", finish: retroreflective, hex_basis: observed }
1576
+ foreground: "#000000"
1577
+ band: { side: left, color: "#005BBB", color_lower: "#FFD700", content: "arms above, UA below, blue over lemon-yellow", hex_basis: observed }
1578
+ rear_differs: false
1579
+ region_encoding: "plates/_decode/ua-regions.yml"
1580
+ sources:
1581
+ - "http://www.infocar.com.ua/law_ukr/law_22.html # ДСТУ 4278:2004 п. 2.3: «Знаки типу 1 з полем жовтого кольору застосовують для автобусів, мікроавтобусів, таксі». Accessed 2026-08-03"
1582
+ notes: >-
1583
+ THE 2004 YELLOW PLATE for buses, minibuses and taxis — a colour variant of
1584
+ the 2004 type 1 with the same grammar, and the ancestor of ua-taxi-2015.
1585
+ The 2004 standard attached it to the VEHICLE KIND (bus, minibus, taxi);
1586
+ the 2021 order attaches it instead to the OPERATOR'S REGISTRY ENTRY, which
1587
+ is a genuine change of rule and not a change of wording.
1588
+
1589
+ - id: ua-motorcycle-2004
1590
+ class: motorcycle
1591
+ categories: [motorcycle]
1592
+ period: { start: 2004, end: 2015 }
1593
+ period_evidence: enabling-instrument
1594
+ matching: strict
1595
+ format:
1596
+ pattern: "LL 9999 LL"
1597
+ regex: '\A[A-Z]{2} ?\d{4} ?[A-Z]{2}\z'
1598
+ regex_strict: '\A[ABCEHIKMOPTX]{2} ?\d{4} ?[ABCEHIKMOPTX]{2}\z'
1599
+ charset:
1600
+ notes: "ДСТУ 4278:2004 п. 2.6 applies the region-left / series-right rule to types 1 AND 5; Таблиця 4 gives type 5 four digits."
1601
+ design:
1602
+ plate: { w: 220, h: 174, unit: mm }
1603
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
1604
+ foreground: "#000000"
1605
+ band: { side: left, position: upper, color: "#005BBB", color_lower: "#FFD700", content: "arms above, UA below", hex_basis: observed }
1606
+ rear_differs: false
1607
+ region_encoding: "plates/_decode/ua-regions.yml"
1608
+ sources:
1609
+ - "http://www.infocar.com.ua/law_ukr/law_22.html # ДСТУ 4278:2004 Таблиця 1 (type 5 «Знаки для мотоциклів, моторолерів, мотоколясок»), Таблиця 3 (220 x 174), Таблиця 4, п. 2.6. Accessed 2026-08-03"
1610
+ notes: >-
1611
+ THE 2004 MOTORCYCLE PLATE. One plate per motorcycle (ДСТУ 4278:2004
1612
+ п. 3.1: «на автотранспорті — два знаки; на тракторах, мототранспорті,
1613
+ причепах — один знак»), same size as today's large motorcycle plate,
1614
+ 2004 panel.
1615
+
1616
+ - id: ua-transit-2004
1617
+ class: temporary
1618
+ categories: [car, van, truck, bus, trailer]
1619
+ period: { start: 2004, end: 2015 }
1620
+ period_evidence: enabling-instrument
1621
+ matching: strict
1622
+ format:
1623
+ pattern: "99 LL 9999"
1624
+ regex: '\A\d{2} ?[A-Z]{2} ?\d{4}\z'
1625
+ regex_strict: '\A(?:0[1-9]|1\d|2[0-7]|31) ?[ABCEHIKMOPTX]{2} ?\d{4}\z'
1626
+ charset:
1627
+ notes: "ДСТУ 4278:2004 Таблиця 4 gives type 2 four digits and two letters; the numeric region code came with the code table the 2012 standard and the 2021 order both carry."
1628
+ design:
1629
+ plate: { w: 520, h: 112, unit: mm }
1630
+ background: { color: "#D52B1E", finish: non-retroreflective, hex_basis: observed }
1631
+ foreground: "#FFFFFF"
1632
+ band: { side: left, color: "#005BBB", color_lower: "#FFD700", content: "arms above, UA below", hex_basis: observed }
1633
+ note: "ДСТУ 4278:2004 п. 2.11: types 2 and 6 carry a place for a sticker showing the MONTH of issue — the 2004 regime's validity marker."
1634
+ rear_differs: false
1635
+ region_encoding: "plates/_decode/ua-regions.yml"
1636
+ sources:
1637
+ - "http://www.infocar.com.ua/law_ukr/law_22.html # ДСТУ 4278:2004 Таблиця 1 (type 2 «Знаки для разових поїздок»), Таблиця 3 (520 x 112), Таблиця 4 (4 digits, 2 letters), п. 2.11 (the month sticker). Accessed 2026-08-03"
1638
+ - "https://web.archive.org/web/20180328225320/http://www.sai.gov.ua/uploads/filemanager/file/zmina-1-dstu-4278.pdf # Зміна № 1 до ДСТУ 4278:2012, Додаток А підтип 2-1 — the code / series / number order carried forward"
1639
+ notes: >-
1640
+ THE 2004 RED TRANSIT PLATE. Recorded with the code-series-number shape the
1641
+ 2012 standard's Додаток А draws, because the 2004 standard's own Таблиця 4
1642
+ gives only counts (4 digits, 2 letters) and its Додаток А is a set of
1643
+ drawings this pass could not read. A verifier who reaches the 2004
1644
+ drawings should re-derive the digit count: four in 2004 against six today
1645
+ is a real difference, and it is the weakest claim in this file's 2004
1646
+ block.
1647
+
1648
+ - id: ua-tractor-2004
1649
+ class: agricultural
1650
+ categories: [tractor, machine, trailer]
1651
+ period: { start: 2004, end: 2015 }
1652
+ period_evidence: enabling-instrument
1653
+ matching: strict
1654
+ format:
1655
+ pattern: "99999 LL"
1656
+ regex: '\A\d{5} ?[A-Z]{2}\z'
1657
+ regex_strict: '\A\d{5} ?[ABCEHIKMOPTX]{2}\z'
1658
+ design:
1659
+ plate: { w: 288, h: 206, unit: mm }
1660
+ plate_shape: "trapezoid — ДСТУ 4278:2004 Таблиця 3 gives «288(140)» length, the bracketed figure being the lower edge"
1661
+ background: { color: "#FFFFFF", finish: non-retroreflective, hex_basis: observed }
1662
+ foreground: "#000000"
1663
+ band: { side: none }
1664
+ rear_differs: false
1665
+ region_encoding: none
1666
+ sources:
1667
+ - "http://www.infocar.com.ua/law_ukr/law_22.html # ДСТУ 4278:2004 Таблиця 1 (type 8 «Знаки для тракторів, тракторних причепів, самохідних машин і механізмів»), Таблиця 3 (288(140) x 206), Таблиця 4 (5 digits, 2 letters), п. 2.20 (film on types 1, 3-5, 7 only). Accessed 2026-08-03"
1668
+ notes: >-
1669
+ THE 2004 TRACTOR PLATE — a LARGER trapezoid than today's (288 x 206 mm
1670
+ with a 140 mm lower edge, against 225 x 165 with a 125 mm lower edge), and
1671
+ the clearest dimensional break between the two regimes. Five digits and a
1672
+ two-letter series, no region encoding, then as now.