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,1179 @@
1
+ # plates/cz.yml — Czechia (PRD-PLATES gate L1, wave 2).
2
+ #
3
+ # EVERY format, colour, dimension and class claim below is read from the
4
+ # OFFICIAL Sbírka zákonů PDFs on aplikace.mv.gov.cz — the Ministry of the
5
+ # Interior's own scan of the gazette — indexed through the Chamber of Deputies'
6
+ # Sbírka register (psp.cz), which supplies the částka, the rozeslána date, the
7
+ # účinnost and the derogation chain. zakonyprolidi.cz, the obvious first stop,
8
+ # returns HTTP 403 to this fetcher and e-sbirka.gov.cz is a JavaScript
9
+ # application with no server-rendered text, so the gazette PDFs are the primary
10
+ # and are cited as such. Four instruments carry this file:
11
+ #
12
+ # * zákon č. 56/2001 Sb., o podmínkách provozu vozidel na pozemních
13
+ # komunikacích — the ENABLING statute. Částka 21, 19 February 2001,
14
+ # účinnost 1 July 2001. § 91 odst. 1 is the delegation every vyhláška below
15
+ # recites; § 7 and § 7b are the registrační značka and the registrační
16
+ # značka na přání.
17
+ # * vyhláška Ministerstva dopravy a spojů č. 243/2001 Sb., o registraci
18
+ # vozidel — THE 2001 CUTOVER. Signed 29 June 2001, částka 92 rozeslána
19
+ # 17 July 2001, § 32 "Tato vyhláška nabývá účinnosti dnem vyhlášení".
20
+ # * vyhláška č. 291/2004 Sb. — the EU band. Signed 30 April 2004, částka 95
21
+ # rozeslána 13 May 2004, Čl. III "Tato vyhláška nabývá účinnosti dnem
22
+ # 1. června 2004".
23
+ # * vyhláška č. 343/2014 Sb., o registraci vozidel — the CURRENT regulation.
24
+ # Částka 136 rozeslána 31 December 2014, účinnost 1 January 2015; repeals
25
+ # 243/2001 and all seven of its amendments.
26
+ #
27
+ # THE FOUR STRUCTURAL FACTS THAT SHAPE THIS FILE
28
+ #
29
+ # 1. THE 2001 CUTOVER IS DATED TO THE DAY, AND THE FAMOUS DATE RANGE IS AN
30
+ # INSTRUMENT-DATE ARTEFACT. Secondary sources say the current system was
31
+ # "introduced between 29 June and 17 July 2001". Those are not a rollout
32
+ # window: 29 June 2001 is the date printed under the vyhláška's title ("ze
33
+ # dne 29. června 2001" — when the minister signed it) and 17 July 2001 is the
34
+ # masthead of částka 92 ("Rozeslána dne 17. července 2001"). Because § 32
35
+ # commences the vyhláška "dnem vyhlášení", the SECOND date is the legal start
36
+ # and the first is not a plate fact at all. This is the Spanish 1999-2000
37
+ # defect in miniature and it is recorded here so it is not repeated.
38
+ #
39
+ # 2. THE KRAJ CODE IS THE FIRST *LETTER*, NOT THE FIRST CHARACTER. § 24 odst. 2
40
+ # of vyhláška 243/2001 Sb., verbatim: "První písmeno ve standardní
41
+ # registrační značce vyjadřuje kód kraje, do jehož obvodu náleží registrační
42
+ # místo, které registrační značku přiděluje, vyjma registrační značky
43
+ # diplomatické, registrační značky cizinecké a registrační značky pro
44
+ # historická vozidla." On the canonical mark "1A2 3456" that letter is at
45
+ # POSITION 2. A parse API decoding position 1 fails on every Czech plate.
46
+ # The fourteen pairs are in plates/_decode/cz-kraj.yml, from the regulation.
47
+ #
48
+ # 3. THE PRINTED GAP IS A STICKER WELL, AND THE REGULATION SAYS SO. § 27 odst. 2
49
+ # of vyhláška 343/2014 Sb. (§ 17 odst. 2 of 243/2001 Sb., same words):
50
+ # "Mezi jednotlivé znaky se nevkládá žádné interpunkční znaménko... U
51
+ # registrační značky provedené na tabulce registrační značky v jednom řádku
52
+ # je mezi třetím a čtvrtým místem určeným pro znak mezera pro umístění
53
+ # nálepky o pravidelné technické prohlídce." NO PUNCTUATION between
54
+ # characters, and a physical GAP after position 3 that exists to hold the
55
+ # inspection sticker. Every `pattern` in this file therefore prints a SPACE
56
+ # at that position and never a hyphen — the hyphen belongs to the pre-2001
57
+ # system (fact 4), and writing one here would be a fabrication.
58
+ #
59
+ # 4. ONE GLYPH IN THIS JURISDICTION IS OUTSIDE THE DATASET'S ALPHABET, AND IT IS
60
+ # RECORDED RATHER THAN SPELLED. § 27 odst. 5 of vyhláška 343/2014 Sb.: "Pro
61
+ # speciální znaky se použije znak *." and § 26 odst. 7: on a mark for a
62
+ # bicycle carrier "je mezi třetím a čtvrtým místem určeným pro znak umístěn
63
+ # speciální znak". An ASTERISK occupies the sticker-well position on that one
64
+ # plate type. It is not in the serial alphabet and not an emitted separator
65
+ # (PRD-PLATES §2.6), so it appears NOWHERE in a pattern or a regex here; it
66
+ # is carried as prose on the cz-standard-2004 variant and is flagged as a
67
+ # `never_separator` candidate for plates/_meta/separators.yml. Note it sits
68
+ # BETWEEN groups, in the gap, so it is a separator-position glyph and not an
69
+ # in-serial one — which is why it is a lint-safe omission and not a lie.
70
+ #
71
+ # THE SHARED PRE-1993 ERA — THE DELIBERATE DECISION, STATED. Czechia and
72
+ # Slovakia inherited ONE plate system from Czechoslovakia, and this pass models
73
+ # it as ONE SERIES RECORDED TWICE, once per successor state, with a common
74
+ # instrument chain and SEPARATELY SOURCED END DATES — because that is what the
75
+ # law actually did. cz-spz-czechoslovak and sk-spz-czechoslovak carry the same
76
+ # federal instrument (vyhláška ministerstva vnitra č. 145/1956 Ú. l., o provozu
77
+ # na silnicích, as amended by 69/1981 Sb., 34/1984 Sb. and 64/1998 Sb.) and the
78
+ # same format, and they diverge at the end:
79
+ # * CZECHIA — last lawful ASSIGNMENT 31 December 2001. Vyhláška 243/2001 Sb.
80
+ # § 28 odst. 2, verbatim: "Tabulky státních poznávacích značek vyrobené před
81
+ # účinností vyhlášky se přidělují na vozidla do vyčerpání zásob, nejdéle
82
+ # však do 31. prosince 2001." § 31 repealed 145/1956 Ú. l. and its
83
+ # amendments outright on 17 July 2001.
84
+ # * SLOVAKIA — last lawful ISSUE 31 March 1997, and VALIDITY ON THE ROAD ended
85
+ # 31 December 2004 (zákon č. 315/1996 Z. z., prechodné ustanovenia ods. 3 as
86
+ # amended). See plates/sk.yml.
87
+ # Neither file silently duplicates the other and neither drops the era. The
88
+ # alternative — a single shared `cs-` jurisdiction file — was rejected because
89
+ # PRD-PLATES §2.1 keys files on ISO 3166-1 and CS is a withdrawn code with no
90
+ # current authority to cite; recording the era twice, with each successor's own
91
+ # terminating instrument, keeps every claim attached to a live primary.
92
+ #
93
+ # WHAT THIS PASS COULD NOT ESTABLISH, recorded rather than filled:
94
+ # * THE PRE-2001 SERIAL COMPOSITION IS NOT PRIMARY-SOURCED. The okres-letter
95
+ # format lived in vyhláška ministerstva vnitra č. 145/1956 Ú. l., published
96
+ # in the ÚŘEDNÍ LIST and not in the Sbírka zákonů, so it is absent from the
97
+ # mv.gov.cz gazette archive. Vyhláška 34/1984 Sb. WAS fetched and OCR'd
98
+ # (it is a scan with no text layer) and it amends only § 91 and § 94 of
99
+ # 145/1956 — the special-plate colours and the zvláštní SPZ — not the
100
+ # ordinary composition. The format on cz-spz-czechoslovak is therefore
101
+ # tagged `secondary-wikipedia`; its DATES are primary.
102
+ # * THE OKRES CODE TABLE for the pre-2001 system is NOT authored. Its
103
+ # instrument (145/1956 Ú. l.) was not reached. A well-evidenced gap.
104
+ # * CZECH MILITARY REGISTRATION is out of scope of the vyhláška read here;
105
+ # it sits under vyhláška č. 100/2018 Sb. o technické způsobilosti a
106
+ # pravidelných technických prohlídkách vojenských vozidel, which this pass
107
+ # did not fetch. Recorded gap, no series asserted.
108
+ # * NO CZECH ELECTRIC-VEHICLE SERIES WAS FOUND. Searched for in §§ 23-29 of
109
+ # vyhláška 343/2014 Sb. and in vyhláška 154/2023 Sb.: no analogue of the
110
+ # Slovak EL/EV prefix, the German E suffix or the Austrian green-lettered
111
+ # plate. Absence recorded in `absent_classes`, not filled from folklore.
112
+ jurisdiction: cz
113
+ authority:
114
+ name: Ministerstvo dopravy — vyhláška č. 343/2014 Sb., o registraci vozidel
115
+ url: "https://www.psp.cz/sqw/sbirka.sqw?cz=343&r=2014"
116
+ binding: vehicle
117
+ binding_note: >-
118
+ § 24 odst. 5 of vyhláška 243/2001 Sb., verbatim: "Přidělená registrační značka
119
+ na vozidlo se již na jiné vozidlo nepřiděluje." — a mark, once assigned to a
120
+ vehicle, is never assigned to another. The binding is to the VEHICLE and it is
121
+ exclusive, which is the opposite of the Slovak post-2023 position (see
122
+ plates/sk.yml, where a holder may carry plates from one vehicle to another).
123
+ Vehicle-keyed consumers may join on a Czech mark without qualification.
124
+ instrument:
125
+ citation: "Vyhláška č. 343/2014 Sb., o registraci vozidel, ve znění vyhlášek č. 399/2015 Sb., 10/2017 Sb., 86/2017 Sb., 158/2017 Sb., 72/2019 Sb., 40/2020 Sb., 330/2022 Sb., 154/2023 Sb. a 203/2025 Sb.; zákon č. 56/2001 Sb., o podmínkách provozu vozidel na pozemních komunikacích"
126
+ enabling_statute: "zákon č. 56/2001 Sb., částka 21, rozeslána 19. února 2001, účinnost od 1. července 2001"
127
+ current_vyhlaska_promulgated: "2014-12-31"
128
+ current_vyhlaska_in_force: "2015-01-01"
129
+ source: "https://www.psp.cz/sqw/sbirka.sqw?cz=56&r=2001 # official Sbírka index: 'Zákon o podmínkách provozu vozidel na pozemních komunikacích a o změně zákona č. 168/1999 Sb.', Částka 21 (19. 2. 2001), Účinnost od 1. 7. 2001. Accessed 2026-08-02"
130
+
131
+ # ---------------------------------------------------------------------------
132
+ # Jurisdiction-wide facts, cited once and referenced per series.
133
+ # ---------------------------------------------------------------------------
134
+ common:
135
+ serial_grammar:
136
+ current: >-
137
+ § 24 odst. 2 vyhlášky č. 343/2014 Sb., verbatim: "Jednotlivé znaky
138
+ registrační značky jsou provedeny nejméně 5 a nejvíce 8 velkými písmeny
139
+ latinské abecedy a arabskými číslicemi. V registrační značce musí být vždy
140
+ umístěno nejméně 1 písmeno a nejméně 1 číslice." Five to eight characters,
141
+ at least one letter and at least one digit.
142
+ pre_2015: >-
143
+ § 16 odst. 2 vyhlášky č. 243/2001 Sb. said the same with a NARROWER bound:
144
+ "nejméně pěti a nejvíce sedmi velkými písmeny latinské abecedy a arabskými
145
+ číslicemi" — five to SEVEN. The widening to eight is the substantive
146
+ grammar change of 1 January 2015 and is the reason cz-standard-2001 and
147
+ cz-standard-2004 carry different `regex_statutory` values.
148
+ letters_current: [A, B, C, D, E, F, H, I, J, K, L, M, N, P, R, S, T, U, V, X, Y, Z]
149
+ letters_pre_2015: [A, B, C, D, E, I, J, K, L, M, N, P, R, S, T, U, V, X, Y, Z]
150
+ letters_excluded_current: [G, O, Q, W]
151
+ letters_excluded_pre_2015: [F, G, H, O, Q, W]
152
+ letters_note: >-
153
+ § 27 odst. 3 vyhlášky 343/2014 Sb.: "Pro znaky vyjádřené velkým písmenem
154
+ latinské abecedy, které se přidávají za kód kraje nebo za první povinný
155
+ znak, se použijí písmena A, B, C, D, E, F, H, I, J, K, L, M, N, P, R, S,
156
+ T, U, V, X, Y, Z." § 18 odst. 1 vyhlášky 243/2001 Sb. gave the same
157
+ sentence with F and H ALSO absent. TWO CONSEQUENCES A VALIDATOR MUST NOT
158
+ MISS. (a) The rule binds only the characters ADDED AFTER the kraj code —
159
+ the kraj code itself may be H (Královéhradecký), which is why H is
160
+ simultaneously excluded and issued. (b) F was kept out of the 2001 list
161
+ precisely because § 16 odst. 8 reserved it as the test-plate marker; when
162
+ the 2014 regulation re-admitted F to the general alphabet it kept F as the
163
+ test marker too (§ 26 odst. 4), so F is now ambiguous by position.
164
+ The reason for excluding G, O, Q and W is not given in either instrument.
165
+ digits: >-
166
+ § 27 odst. 4 vyhlášky 343/2014 Sb.: "Pro znaky vyjádřené arabskou číslicí
167
+ se použijí číslice 1, 2, 3, 4, 5, 6, 7, 8, 9, 0." All ten. There is NO
168
+ Czech no-leading-zero rule — the contrast with Austria (§ 26 Abs. 6 Z 5
169
+ KDV) is real and is stated because a validator ported from at.yml would
170
+ otherwise reject lawful Czech marks.
171
+ layout: >-
172
+ § 27 odst. 1 vyhlášky 343/2014 Sb.: one or two rows; on two rows "v prvním
173
+ řádku jsou umístěny maximálně 3 znaky a v druhém řádku maximálně 5 znaků".
174
+ The 2001 predecessor capped the second row at FOUR (§ 17 odst. 1), which
175
+ follows from its seven-character maximum.
176
+ source: "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=z&id=27609 # vyhláška č. 343/2014 Sb., § 24 odst. 2, § 27 odst. 1-5. Accessed 2026-08-02"
177
+ source_2001: "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=c&id=3670 # vyhláška č. 243/2001 Sb., § 16 odst. 2, § 17 odst. 1-2, § 18 odst. 1-2. Accessed 2026-08-02"
178
+ separator:
179
+ printed: " "
180
+ statute: >-
181
+ § 27 odst. 2 vyhlášky 343/2014 Sb.: "Mezi jednotlivé znaky se nevkládá
182
+ žádné interpunkční znaménko s výjimkou zvláštní registrační značky
183
+ k umístění na nosné zařízení připojitelné k silničnímu vozidlu.
184
+ U registrační značky provedené na tabulce registrační značky v jednom
185
+ řádku je mezi třetím a čtvrtým místem určeným pro znak mezera pro umístění
186
+ nálepky o pravidelné technické prohlídce."
187
+ note: >-
188
+ A rare thing, and worth stating because most jurisdictions leave it to
189
+ inference: the Czech regulation FORBIDS punctuation inside the mark and
190
+ then prescribes a functional GAP at a fixed position. The gap is a sticker
191
+ well, not typography. That is why every single-row `pattern` in this file
192
+ is "xxx yyyy" with a space and why none of them carries a hyphen — and it
193
+ is also why the pre-2001 SPZ, which DID print a hyphen, is a different
194
+ series and not a re-spelling of the same one.
195
+ colours:
196
+ statute: >-
197
+ § 29 odst. 2 vyhlášky 343/2014 Sb. gives the whole colour system as a
198
+ lettered list, and it is quoted per series below. The colours are named in
199
+ WORDS ONLY — "bílý podklad a černé znaky", "žlutý podklad", "zelené
200
+ znaky", "modrý pruh" — with no chromaticity box, no RAL reference and no
201
+ luminance factor anywhere in the instrument. UNLIKE Spain (Anexo XVIII
202
+ Cuadro 3) and Austria (KDV Anlage 5e B.2.5.2), Czech law constrains no
203
+ gamut at all. Every hex in this file is therefore `hex_basis: observed`
204
+ and no hex here is a sourced claim; the sourced claim is the colour WORD,
205
+ which is reproduced beside it.
206
+ retroreflective: >-
207
+ § 29 odst. 6 vyhlášky 343/2014 Sb. (§ 24 odst. 6 of the 2001 vyhláška, same
208
+ words): "Podklad všech tabulek registrační značky vyrobených ze slitin
209
+ lehkých kovů je reflexního provedení a je opatřen ochrannými prvky."
210
+ Unconditional for every light-alloy plate; the paper one-trip plate is the
211
+ single exception.
212
+ source: "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=z&id=27609 # § 29 odst. 2 a 6. Accessed 2026-08-02"
213
+ dimensions:
214
+ plates:
215
+ "520x110": "osobní a nákladní automobil, autobus, speciální vozidlo, přípojné vozidlo, traktor, samojízdný pracovní stroj — the default; also the test and dealer plate for those categories"
216
+ "340x200": "nákladní automobil, autobus, speciální vozidlo, přípojné vozidlo (two-line)"
217
+ "280x200": "osobní automobil, traktor a jeho přípojné vozidlo, samojízdný pracovní stroj (two-line)"
218
+ "200x160": "motocykl, přípojné vozidlo, traktor a jeho přípojné vozidlo, samojízdný pracovní stroj, ostatní silniční vozidla"
219
+ "320x160": "osobní automobil whose technický průkaz records a space for this plate"
220
+ "80x110": "moped se šlapadly; also the sports plate on a sports motorcycle"
221
+ "210x145": "zvláštní registrační značka pro jízdu z místa prodeje do místa registrace (the paper one-trip plate; 210 x 150 under the 2001 vyhláška)"
222
+ "330x85": "front plate on a sports automobile"
223
+ construction: >-
224
+ § 29 odst. 1: "Tabulku s registrační značkou tvoří obdélník se zaoblenými
225
+ rohy s poloměrem zaoblení 10 mm". § 29 odst. 4 (2001 § 24 odst. 4): "Po
226
+ obvodu všech tabulek s registrační značkou je vylisován barevný okraj,
227
+ jehož šírka čáry je 4 mm. Barva okraje je shodná s barvou znaků
228
+ jednotlivých druhů registračních značek." — a 4 mm embossed border IN THE
229
+ CHARACTER COLOUR, which is the single most render-relevant Czech fact: the
230
+ border is green on a historic plate and blue on a diplomatic one.
231
+ sticker_wells: >-
232
+ § 29 odst. 5 (2001 § 24 odst. 5): light-alloy plates carry EMBOSSED
233
+ CIRCULAR RECESSES for the periodic-technical-inspection sticker and the
234
+ emissions sticker. "Na tabulce registrační značky o rozměrech 200 x 160 mm
235
+ je umístěn pouze jeden kruhový prostor. Na tabulce registrační značky
236
+ o rozměrech 80 x 110 mm není kruhový prostor žádný." Two wells on a car
237
+ plate, one on a motorcycle plate, none on a moped plate.
238
+ source: "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=z&id=27609 # § 29 odst. 1, 4, 5, 6. Accessed 2026-08-02"
239
+ font:
240
+ name: null
241
+ statutory_basis: >-
242
+ NO TYPEFACE IS NAMED. What the regulation publishes is per-size GEOMETRY,
243
+ and it is enough to render from. § 24 odst. 10 vyhlášky 243/2001 Sb.,
244
+ verbatim: "a) o rozměrech 520 x 110 mm nebo 340 x 200 mm anebo
245
+ 280 x 200 mm je výška znaku 75 mm a šířka znaku 40 mm; síla čáry je 10 mm,
246
+ b) o rozměrech 200 x 160 mm je výška znaku 56 mm a šířka znaku 30 mm; síla
247
+ čáry je 8 mm, c) o rozměrech 80 x 110 mm je výška znaku 28 mm a šířka
248
+ znaku 15 mm; síla čáry je 5 mm." Characters are EMBOSSED, not printed:
249
+ § 24 odst. 1 / § 29-recital "Registrační značka je vyznačena na tabulce
250
+ registrační značky formou prolisování", with the paper one-trip plate the
251
+ only printed exception ("formou vytištění").
252
+ licence: >-
253
+ PRD-PLATES §6 applies unchanged: derive glyphs from the published
254
+ geometry, never from a third-party TTF. No Czech public-domain-of-statutes
255
+ provision was researched in this pass (the German §5(1) UrhG argument was
256
+ not tested against Czech law) — recorded gap, and one more reason to
257
+ derive rather than embed.
258
+ source: "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=c&id=3670 # vyhláška č. 243/2001 Sb. § 24 odst. 10. Accessed 2026-08-02"
259
+ euro_band:
260
+ side: left
261
+ content: eu-stars+CZ
262
+ statute: >-
263
+ Defined by vyhláška č. 291/2004 Sb. Čl. I bod 2, which inserted a new
264
+ § 2 písm. j) into vyhláška 243/2001 Sb., verbatim: "znak Evropské unie
265
+ s vyznačením rozlišovací značky České republiky je součástí tabulky
266
+ registrační značky a tvoří ho dvanáct žlutých pěticípých hvězd umístěných
267
+ v kruhu a bílá písmena „CZ“ na modrém pruhu."
268
+ two_line_rule: >-
269
+ § 29 odst. 2 písm. a): "je-li tabulka registrační značky uspořádána ve dvou
270
+ řádcích, umísťuje se modrý pruh se znakem Evropské unie s vyznačením
271
+ rozlišovací značky České republiky vlevo před znaky v prvním řádku" — on a
272
+ two-line plate the band sits left of the FIRST ROW only, not down the full
273
+ height. A render-relevant fact that photographs make obvious and text
274
+ sources usually omit.
275
+ geometry: >-
276
+ NOT EXTRACTABLE. Neither vyhláška gives millimetres for the band, the star
277
+ circle or the CZ lettering; the vzory are drawings in přílohy 13 and 15.
278
+ Same finding as Austria (KFG § 49 Abs. 4) and unlike Spain's Cuadro 5,
279
+ which at least prints a titled dimension figure. Recorded gap.
280
+ source: "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=c&id=4399 # vyhláška č. 291/2004 Sb., částka 95, Čl. I body 2 a 3. Accessed 2026-08-02"
281
+ distinguishing_sign:
282
+ statute: >-
283
+ § 25 vyhlášky 243/2001 Sb. specified the SEPARATE oval CZ sticker for
284
+ international traffic: minimum 175 mm wide by 115 mm high, characters at
285
+ least 80 mm high with a line width of at least 10 mm, black on white, with
286
+ a 4 mm black border. Vyhláška 291/2004 Sb. Čl. II odst. 5 then made it
287
+ unnecessary inside the EU for vehicles carrying the new band: owners whose
288
+ plates show the EU emblem "nemusí mít vozidlo označeno rozlišovací značkou
289
+ České republiky podle přílohy č. 15". The Czech analogue of the Spanish
290
+ V-7 reciprocity clause.
291
+ source: "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=c&id=3670 # § 25 odst. 1-3. Accessed 2026-08-02"
292
+ supplementary_plates:
293
+ statute: >-
294
+ § 26 vyhlášky 243/2001 Sb.: the doplňková registrační značka is a separate
295
+ OVAL plate, minimum 175 x 115 mm, blue ground with yellow characters and a
296
+ 4 mm yellow border, bearing "CD" (Corps diplomatique), "CC" (Corps
297
+ consulaire) or "HC" (Consuls honoraires). It is NOT the registration mark
298
+ and carries no serial; it is modelled here as design metadata on the
299
+ diplomatic series rather than as a series of its own.
300
+ source: "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=c&id=3670 # § 26 odst. 1-5. Accessed 2026-08-02"
301
+ absent_classes:
302
+ electric: >-
303
+ NO ELECTRIC SERIES. Searched §§ 23-29 of vyhláška 343/2014 Sb. and the
304
+ whole of vyhláška 154/2023 Sb.: Czechia has no EL/EV prefix (contrast
305
+ Slovakia, § 35 odst. 7 vyhlášky 9/2009), no green-lettered EV plate
306
+ (contrast Austria, § 49 Abs. 4 Z 5 KFG) and no E suffix (contrast
307
+ Germany). Widely-circulated claims that Czech EVs carry "a green strip"
308
+ were not traced to any instrument and are NOT recorded as fact.
309
+ taxi: "No taxi series. Nothing in §§ 23-29 distinguishes a vehicle in for-hire service; contrast Spain's blue rear plate (Anexo XVIII Cuadro 1 note 7)."
310
+ seasonal: "No seasonal series — no Czech analogue of the German Saisonkennzeichen was found."
311
+ police: "No distinct police series in the registration vyhláška; Czech police vehicles carry standard marks. Not asserted beyond the absence."
312
+ military: "Out of scope of vyhláška 343/2014 Sb. Military vehicles register under vyhláška č. 100/2018 Sb.; that instrument was not fetched in this pass and NO military series is asserted. Recorded gap."
313
+ consular: "Not a separate series: § 24 odst. 3 folds consular vehicles into the same four-prefix set (CD, XX, XS, HC) as the diplomatic corps, so this file carries them as one series with the prefix distinction stated."
314
+
315
+ series:
316
+
317
+ # =========================================================================
318
+ # THE CURRENT STANDARD SERIES — "1A2 3456" with the EU band.
319
+ # =========================================================================
320
+ - id: cz-standard-2004
321
+ class: standard
322
+ categories: [car, van, truck, bus, trailer]
323
+ period: { start: 2004 }
324
+ period_evidence: enacted-commencement
325
+ matching: strict
326
+ format:
327
+ pattern: "9L9 9999"
328
+ regex: '\A\d[A-Z][A-Z0-9] \d{4}\z'
329
+ regex_strict: '\A\d[ABCEHJKLMPSTUZ][A-FH-NPR-VXYZ0-9] \d{4}\z'
330
+ regex_statutory: '\A[A-Z0-9]{3} [A-Z0-9]{2,5}\z'
331
+ charset:
332
+ letters_excluded: [G, O, Q, W]
333
+ notes: >-
334
+ See common.serial_grammar. `regex` carries the SHAPE actually issued —
335
+ digit, kraj letter, third character, sticker gap, four digits.
336
+ `regex_strict` adds the two sourced tightenings the round-trip forbids:
337
+ position 2 is restricted to the fourteen kraj letters of § 28 vyhlášky
338
+ 343/2014 Sb., and position 3 to the twenty-two letters of § 27 odst. 3
339
+ plus any digit. `regex_statutory` is the outer bound of § 24 odst. 2 —
340
+ five to eight characters printed as three, the gap, and two to five —
341
+ and it is genuinely wider than what is issued, which is exactly the
342
+ us-fl situation PRD-PLATES §2.7 describes. The statute's further
343
+ requirement of "nejméně 1 písmeno a nejméně 1 číslice" cannot be
344
+ expressed without a lookahead spanning the separator position, which
345
+ §2.8 forbids, so it is recorded here in words and not in the regex.
346
+ progression: >-
347
+ The regulation publishes NO allocation order — neither vyhláška says how
348
+ the digits and the third character advance within a kraj. What is
349
+ sourced is the constraint: § 28 assigns one letter per kraj and § 19
350
+ odst. 3 of the 2001 vyhláška bound each registration office to its own
351
+ kraj's letter ("Registrační místa okresních úřadů vydávají tabulky pouze
352
+ s registrační značkou podle místní příslušnosti svého kraje"). The
353
+ widely-reported progression — a kraj first exhausts "9A9 9999" with a
354
+ digit at position 3, then moves to a LETTER at position 3 ("1AB 2345"),
355
+ Prague reaching that stage first — is corroborating secondary and is
356
+ the reason `regex` spells position 3 as [A-Z0-9] rather than \d.
357
+ progression_evidence: secondary-wikipedia
358
+ progression_source: "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_the_Czech_Republic # 'As capacity expanded, regions added second letters (format 1xa 0000-9xa 9999), with Prague reaching this stage by 2009. By mid-2023, Prague's serial added an additional letter.' Accessed 2026-08-02"
359
+ separator_note: >-
360
+ The space is the § 27 odst. 2 sticker well, not punctuation — see
361
+ common.separator. It is spelled as a literal space rather than as
362
+ `[- ]?` (the Austrian solution) because Czech law does not merely omit a
363
+ glyph, it FORBIDS one: "Mezi jednotlivé znaky se nevkládá žádné
364
+ interpunkční znaménko."
365
+ design:
366
+ plate: { w: 520, h: 110, unit: mm }
367
+ plate_variants:
368
+ - { w: 340, h: 200, unit: mm, note: "nákladní automobil, autobus, speciální vozidlo, přípojné vozidlo — two-line" }
369
+ - { w: 280, h: 200, unit: mm, note: "osobní automobil — two-line" }
370
+ - { w: 320, h: 160, unit: mm, note: "osobní automobil whose technický průkaz records a space for this size" }
371
+ characters: { h: 75, w: 40, stroke: 10, unit: mm, relief: embossed, note: "§ 24 odst. 10 písm. a) vyhlášky 243/2001 Sb., for the 520x110, 340x200 and 280x200 plates" }
372
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, spec_note: "§ 29 odst. 2 písm. a) names only 'bílý podklad'; no chromaticity box exists in Czech law — see common.colours" }
373
+ foreground: "#000000"
374
+ foreground_note: "'černé znaky', embossed ('formou prolisování'), not printed"
375
+ border: { width: 4, unit: mm, color: "#000000", hex_basis: observed, note: "§ 29 odst. 4: a 4 mm embossed border in the SAME colour as the characters — black on this series" }
376
+ corner_radius: { r: 10, unit: mm }
377
+ band: { side: left, color: "#003399", content: eu-stars+CZ, hex_basis: observed, note: "twelve yellow five-pointed stars in a circle and white 'CZ' on a blue stripe; no millimetres are published — see common.euro_band" }
378
+ emblem: { present: false }
379
+ rear_differs: false
380
+ display: "front and rear on road motor vehicles; rear only on mopeds, motorcycles and motor tricycles (category L), centred, and on trailers"
381
+ region_encoding: "plates/_decode/cz-kraj.yml"
382
+ region_encoding_mechanism: >-
383
+ The FIRST LETTER of the mark — position 2 on this series — is the kraj of
384
+ the issuing registration place (§ 24 odst. 2 vyhlášky 243/2001 Sb., quoted
385
+ in the file header). SINCE 1 JANUARY 2015 IT IS AN ISSUE-PLACE CLAIM ONLY:
386
+ vyhláška 343/2014 Sb. dropped the 2001 rule (§ 20 odst. 1) that forced a
387
+ new mark on a move to another kraj, so a vehicle may lawfully carry a
388
+ Prague A mark anywhere in Czechia. The decode file states this in terms.
389
+ variants:
390
+ - class: motorcycle
391
+ format: { pattern: "9L9 9999" }
392
+ design: { plate: { w: 200, h: 160, unit: mm }, characters: { h: 56, w: 30, stroke: 8, unit: mm } }
393
+ note: >-
394
+ Motorcycles carry the SAME mark on a 200 x 160 two-line plate with one
395
+ sticker well instead of two (§ 29 odst. 1 písm. d), odst. 5). A
396
+ size-only variant, hence a sub-entry per PRD-PLATES §2.3; recorded
397
+ with a class so class-keyed queries reach it.
398
+ sources:
399
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=z&id=27609 # § 29 odst. 1 písm. d), odst. 5. Accessed 2026-08-02"
400
+ - class: moped
401
+ format: { pattern: "9L9 9999" }
402
+ design: { plate: { w: 80, h: 110, unit: mm }, characters: { h: 28, w: 15, stroke: 5, unit: mm } }
403
+ note: >-
404
+ "Moped se šlapadly" — a pedal moped — takes an 80 x 110 mm plate with
405
+ NO sticker well at all (§ 29 odst. 5). Size-only variant of the same
406
+ mark. Note this is a registered plate, not a German-style insurance
407
+ plate: Czechia has no Versicherungskennzeichen analogue.
408
+ sources:
409
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=z&id=27609 # § 29 odst. 1 písm. f), odst. 5. Accessed 2026-08-02"
410
+ - class: standard
411
+ format: { pattern: "9L9 9999" }
412
+ note: >-
413
+ THE BICYCLE-CARRIER PLATE, and the one Czech plate this dataset cannot
414
+ spell. § 23 písm. b) bod 6 of vyhláška 343/2014 Sb. creates a mark "k
415
+ umístění na nosné zařízení připojitelné k silničnímu vozidlu"; § 26
416
+ odst. 7: "Na registrační značce k umístění na nosné zařízení
417
+ připojitelné k silničnímu vozidlu je mezi třetím a čtvrtým místem
418
+ určeným pro znak umístěn speciální znak."; § 27 odst. 5: "Pro speciální
419
+ znaky se použije znak *." The serial is the towing vehicle's own mark;
420
+ an ASTERISK replaces the sticker gap. Because * is neither in the
421
+ serial alphabet nor an emitted separator (PRD-PLATES §2.6), the
422
+ `pattern` above prints the ordinary space and the asterisk is recorded
423
+ HERE, in prose. It sits BETWEEN character groups, so it is a
424
+ separator-position glyph and a candidate for the `never_separator`
425
+ list in plates/_meta/separators.yml rather than a serial character —
426
+ flagged for that amendment, not asserted into it.
427
+ sources:
428
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=z&id=27609 # § 23 písm. b) bod 6, § 26 odst. 7, § 27 odst. 2 a 5. Accessed 2026-08-02"
429
+ sources:
430
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=c&id=4399 # vyhláška č. 291/2004 Sb., částka 95 rozeslána 13. května 2004. Čl. I bod 2 inserts the EU-emblem definition; Čl. I bod 3 rewrites § 24 so that § 24 odst. 2 písm. a) reads 'bílý podklad a černé znaky, v levé části je modrý pruh se znakem Evropské unie s vyznačením rozlišovací značky České republiky'; Čl. III 'Tato vyhláška nabývá účinnosti dnem 1. června 2004'. Accessed 2026-08-02"
431
+ - "https://www.psp.cz/sqw/sbirka.sqw?cz=291&r=2004 # official Sbírka index: Částka 96 [sic — the PDF masthead reads částka 95], Účinnost od 1. 6. 2004, zrušeno dnem 1. 1. 2015. Accessed 2026-08-02"
432
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=z&id=27609 # vyhláška č. 343/2014 Sb.: § 23 (the class list), § 24 odst. 2 (5-8 characters), § 27 (layout, no punctuation, the sticker gap, the letter and digit charsets), § 28 (the kraj letters), § 29 (dimensions, colours, border, retroreflection). Accessed 2026-08-02"
433
+ notes: >-
434
+ THE CURRENT CZECH SERIES, and the one nearly every Czech vehicle carries.
435
+ period.start 2004 IS A COMMENCEMENT, NOT AN INSTRUMENT DATE: the mark's
436
+ GRAMMAR is older — unchanged since 17 July 2001, see cz-standard-2001 —
437
+ and what changed on 1 June 2004 is the DESIGN, when vyhláška č. 291/2004
438
+ Sb. put the blue EU band on the plate. The two series are therefore split
439
+ exactly as Austria's at-standard and at-standard-preeu are: same serial,
440
+ different band, both lawful. Czechia acceded to the EU on 1 May 2004 and
441
+ the instrument commenced ONE MONTH LATER, on 1 June 2004 — a real gap, not
442
+ a rounding, and the reason this file does not record 2004-05-01. THE
443
+ PRE-2004 PLATES WERE NEVER RECALLED: vyhláška 291/2004 Sb. Čl. II odst. 1,
444
+ verbatim, "Tabulky s registrační značkou vydané před počátkem účinnosti
445
+ této vyhlášky zůstávají nadále platné", with stock issuable "nejdéle však
446
+ do 31. prosince 2007". So band-less 2001-2004 plates are lawful
447
+ indefinitely and the two series genuinely run in parallel.
448
+
449
+ # =========================================================================
450
+ # ONE SERIES BACK — the same mark WITHOUT the EU band, 2001-2004.
451
+ # =========================================================================
452
+ - id: cz-standard-2001
453
+ class: standard
454
+ categories: [car, van, truck, bus, trailer]
455
+ period: { start: 2001, end: 2004 }
456
+ period_evidence: instrument-dated-both-ends
457
+ matching: strict
458
+ format:
459
+ pattern: "9L9 9999"
460
+ regex: '\A\d[A-Z][A-Z0-9] \d{4}\z'
461
+ regex_strict: '\A\d[ABCEHJKLMPSTUZ][A-EIJ-NPR-VXYZ0-9] \d{4}\z'
462
+ regex_statutory: '\A[A-Z0-9]{3} [A-Z0-9]{2,4}\z'
463
+ charset:
464
+ letters_excluded: [F, G, H, O, Q, W]
465
+ notes: >-
466
+ THE DIFFERENCE FROM cz-standard-2004 IS REAL AND IS IN THE TWINS.
467
+ § 18 odst. 1 vyhlášky 243/2001 Sb. lists TWENTY letters usable after
468
+ the kraj code — "A, B, C, D, E, I, J, K, L, M, N, P, R, S, T, U, V, X,
469
+ Y, Z" — where the 2014 regulation lists twenty-two, having re-admitted
470
+ F and H. And § 16 odst. 2 caps the mark at SEVEN characters where
471
+ § 24 odst. 2 of the 2014 vyhláška allows eight. `regex_strict` and
472
+ `regex_statutory` carry both differences; `regex` is identical to the
473
+ successor's because the printed shape did not change.
474
+ separator_note: "§ 17 odst. 2 vyhlášky 243/2001 Sb. — the same no-punctuation rule and the same sticker gap between positions 3 and 4 as the 2014 successor."
475
+ design:
476
+ plate: { w: 520, h: 110, unit: mm }
477
+ characters: { h: 75, w: 40, stroke: 10, unit: mm, relief: embossed }
478
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, spec_note: "§ 24 odst. 2 písm. a) vyhlášky 243/2001 Sb.: 'bílý podklad a černé znaky'" }
479
+ foreground: "#000000"
480
+ border: { width: 4, unit: mm, color: "#000000", hex_basis: observed }
481
+ corner_radius: { r: 10, unit: mm }
482
+ band: { side: none }
483
+ band_note: >-
484
+ THE DIFFERENCE THAT MAKES THIS A SERIES. § 24 odst. 2 of vyhláška
485
+ 243/2001 Sb. as originally enacted reads, in full, "pro silniční motorová
486
+ vozidla a přípojná vozidla ± bílý podklad a černé znaky" — no blue
487
+ stripe, no EU emblem, no rozlišovací značka. The definition of the EU
488
+ emblem did not exist in Czech registration law until vyhláška 291/2004
489
+ Sb. inserted § 2 písm. j) with effect from 1 June 2004. Diffing the two
490
+ texts of § 24 IS the period evidence, exactly as the two RIS Fassungen of
491
+ Austrian § 49 KFG are for at-standard.
492
+ emblem: { present: false }
493
+ region_encoding: "plates/_decode/cz-kraj.yml"
494
+ region_encoding_mechanism: >-
495
+ Same kraj letter as the successor — and in this era the code DID track the
496
+ vehicle: § 20 odst. 1 vyhlášky 243/2001 Sb., verbatim, "Při převodu vozidla
497
+ do obvodu registračního místa, pro něž je určen jiný kód kraje, přidělí
498
+ nové registrační místo vždy novou registrační značku a vydá novou tabulku
499
+ registrační značky." A mark issued in this period, still on its original
500
+ vehicle, is a reliable geographic claim in a way a post-2015 mark is not.
501
+ sources:
502
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=c&id=3670 # vyhláška č. 243/2001 Sb., o registraci vozidel, částka 92 rozeslána 17. července 2001. § 15 (druhy registračních značek), § 16 odst. 2 (5-7 characters, the kraj-letter rule), § 17 (layout and the sticker gap), § 18 odst. 1-2 (charsets), § 19 odst. 2 (the fourteen kraj letters), § 20 odst. 1 (new mark on a cross-kraj transfer), § 24 (dimensions and colours), § 32 ('Tato vyhláška nabývá účinnosti dnem vyhlášení'). Accessed 2026-08-02"
503
+ - "https://www.psp.cz/sqw/sbirka.sqw?cz=243&r=2001 # official Sbírka index: Částka 92, Účinnost od 17. 7. 2001, zrušeno dnem 1. 1. 2015; the seven amendments (496/2001, 368/2002, 98/2003, 401/2003, 291/2004, 244/2005, 334/2006) and the repealing instrument 343/2014. Accessed 2026-08-02"
504
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=c&id=4399 # vyhláška č. 291/2004 Sb. Čl. II odst. 1: pre-existing plates 'zůstávají nadále platné', stock issuable to 31 December 2007 — the reason this series has no hard end on the road. Accessed 2026-08-02"
505
+ notes: >-
506
+ THE 2001 CUTOVER SERIES — the mark that replaced the okres-coded
507
+ Czechoslovak SPZ, without the EU band it acquired three years later.
508
+ period.start 17 July 2001 is the day částka 92 was distributed, which
509
+ § 32 makes the day the vyhláška took effect; it is NOT 29 June 2001, the
510
+ signature date that secondary sources pair with it to produce a spurious
511
+ "introduced between 29 June and 17 July" window. period.end is 1 June
512
+ 2004, the commencement of vyhláška 291/2004 Sb.; both bounds are
513
+ instrument dates for real events, which is why period_evidence is
514
+ instrument-dated-both-ends. Distinct from cz-standard-2004 by the absent
515
+ blue field and by the two sourced grammar tightenings in its twins.
516
+
517
+ # =========================================================================
518
+ # THE SHARED CZECHOSLOVAK ERA — the okres-coded SPZ. Recorded in BOTH this
519
+ # file and plates/sk.yml, with each successor state's own end date.
520
+ # =========================================================================
521
+ - id: cz-spz-czechoslovak
522
+ class: standard
523
+ categories: [car, van, truck, bus, motorcycle, trailer]
524
+ period: { start: 1984, end: 2001 }
525
+ period_evidence: instrument-in-force
526
+ matching: strict
527
+ format:
528
+ pattern: "LLL 99-99"
529
+ regex: '\A[A-Z]{2,3} \d{2}-\d{2}\z'
530
+ charset:
531
+ notes: >-
532
+ FORMAT EVIDENCE IS SECONDARY AND SAYS SO. Two or three letters
533
+ identifying the okres, then two groups of two digits separated by a
534
+ HYPHEN — the one Czech(oslovak) mark that really does print a
535
+ hyphen, which is why it cannot be folded into the post-2001 series.
536
+ The composition lived in §§ 90-91 of vyhláška ministerstva vnitra
537
+ č. 145/1956 Ú. l., o provozu na silnicích, published in the ÚŘEDNÍ
538
+ LIST rather than the Sbírka zákonů and therefore absent from the
539
+ mv.gov.cz gazette archive. Vyhláška 34/1984 Sb. was fetched and
540
+ OCR'd from the scan and amends only § 91 and § 94 — colours and the
541
+ zvláštní SPZ — so it does not supply the composition either.
542
+ evidence: secondary-wikipedia
543
+ evidence_source: "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_the_Czech_Republic # 'Format (1960-1984): XX-NN-NN or XXX-NN-NN. Format (1984-2001): XX NN-NN or XXX NN-NN. ... two first letters represented the district (okres).' Accessed 2026-08-02"
544
+ okres_codes: >-
545
+ NOT AUTHORED. The okres letter table is a genuine decode candidate and a
546
+ genuine gap: its instrument (145/1956 Ú. l.) was not reached, and this
547
+ pass declines to reconstruct a ~90-row table from secondary text. A
548
+ parse API must treat the leading letters of a pre-2001 Czech mark as
549
+ UNRESOLVED, never as invalid, and must NOT route them through
550
+ cz-kraj.yml, which maps single kraj letters and does not apply.
551
+ prefix_note: >-
552
+ One prefix IS primary-sourced, from the 2001 vyhláška's own repeal
553
+ context rather than from the 1956 text: Prague marks began with A and
554
+ government vehicles with AA. That claim is secondary-wikipedia and is
555
+ recorded as a lead, not as data.
556
+ design:
557
+ plate: { w: null, h: null, unit: mm }
558
+ dimensions_note: "No dimensions secured: the 2001 vyhláška's § 24 table post-dates the series and 34/1984 Sb. gives none, stating only that 'rozměry písmen a číslic stanoví federální ministerstvo vnitra'. Recorded gap."
559
+ background: { color: "#FFFFFF", finish: painted, hex_basis: observed }
560
+ foreground: "#000000"
561
+ band: { side: none }
562
+ emblem: { present: false }
563
+ colour_note: >-
564
+ Black on white for ordinary vehicles; YELLOW ground with black characters
565
+ for commercial and heavy goods vehicles; BLUE ground with yellow
566
+ characters for foreign-owned vehicles. All three are secondary-wikipedia.
567
+ The one PRIMARY colour fact recovered for this era is in the variant
568
+ below, and it is the rental-fleet red.
569
+ region_encoding: "okres letters — decode table NOT authored, see format.okres_codes"
570
+ variants:
571
+ - class: dealer
572
+ format: { pattern: "LLL 99-99" }
573
+ design: { background: { color: "#FFFFFF", hex_basis: observed }, foreground: "#CC0000" }
574
+ note: >-
575
+ THE RENTAL-FLEET RED MARK, and the only pre-2001 colour claim in this
576
+ file with a primary behind it. Vyhláška federálního ministerstva vnitra
577
+ č. 34/1984 Sb. ze dne 16. února 1984, Čl. I bod 1, inserted a new
578
+ § 91 odst. 1 písm. d) into vyhláška 145/1956 Ú. l., verbatim: "u
579
+ vozidel, jejichž držiteli jsou organizace zabývající se půjčováním
580
+ vozidel a která jsou určena k poskytování této služby, červenými
581
+ písmeny a číslicemi na barvě podkladu stanovené podle písm. a) a b)."
582
+ Red characters on the ordinary ground, for vehicles held by
583
+ car-hire organisations. Recorded as class `dealer` because the mark
584
+ attaches to a hire BUSINESS's fleet; the hex is observed, the statute
585
+ says only "červenými". Text recovered by OCR from the gazette scan
586
+ (the 1984 PDF has no text layer), so the transcription is this pass's
587
+ own reading of an image and is flagged accordingly for the verifier.
588
+ sources:
589
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=c&id=2105 # částka 6/1984, vydána dne 4. dubna 1984, položka 34 — vyhláška federálního ministerstva vnitra ze dne 16. února 1984, Čl. I bod 1 (§ 91 odst. 1 písm. d)) and bod 2 (§ 94, zvláštní státní poznávací značka). Scanned, no text layer; read by OCR. Accessed 2026-08-02"
590
+ sources:
591
+ - "https://www.psp.cz/sqw/sbirka.sqw?cz=34&r=1984 # official Sbírka index: 'Vyhláška federálního ministerstva vnitra, kterou se mění a doplňuje vyhláška ministerstva vnitra č. 145/1956 Ú.l. (Ú.v.), o provozu na silnicích, ve znění pozdějších předpisů', Částka 6 (4. 4. 1984), Účinnost od 1. 8. 1984, zrušeno dnem 17. 7. 2001, repealed by 243/2001. THE DATES ON THIS SERIES COME FROM HERE. Accessed 2026-08-02"
592
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=c&id=3670 # vyhláška č. 243/2001 Sb. § 31 (Zrušovací ustanovení) repeals 'vyhláška č. 145/1956 Ú. l., o provozu na silnicích' together with vyhlášky 69/1981 Sb., 34/1984 Sb. and 64/1998 Sb.; § 28 odst. 2 fixes the last assignment: 'Tabulky státních poznávacích značek vyrobené před účinností vyhlášky se přidělují na vozidla do vyčerpání zásob, nejdéle však do 31. prosince 2001.' Accessed 2026-08-02"
593
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=c&id=2105 # částka 6/1984 as scanned by the Ministry of the Interior — the gazette text of 34/1984 Sb. Accessed 2026-08-02"
594
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_the_Czech_Republic # the FORMAT claim only (okres letters + NN-NN, space-separated from 1984, hyphen-separated 1960-1984) and the commercial-yellow / foreign-blue colour claims. secondary-wikipedia; every date on this series is primary. Accessed 2026-08-02"
595
+ notes: >-
596
+ THE CZECHOSLOVAK STÁTNÍ POZNÁVACÍ ZNAČKA — the system both successor
597
+ states inherited in 1993 and the reason this file and plates/sk.yml
598
+ overlap in history. READ period.start AS AN INSTRUMENT DATE AND NOTHING
599
+ MORE: 1984 is the commencement of vyhláška 34/1984 Sb. (1 August 1984),
600
+ the youngest primary in the 145/1956 Ú. l. chain that this pass could
601
+ reach, and the SPZ system is very much older. Secondary sources put the
602
+ hyphenated form at 1960 and the space-separated form at 1984, which is
603
+ consistent with that commencement but is not proved by it, and the
604
+ 1932-1954 and 1954-1960 designs behind them are recorded as a known
605
+ unmodelled era rather than guessed at. period.end IS SOURCED TO THE DAY at
606
+ both the legal and the practical end: vyhláška 243/2001 Sb. § 31 repealed
607
+ the whole 145/1956 chain on 17 July 2001, and its § 28 odst. 2 let
608
+ already-manufactured SPZ plates keep being ASSIGNED until 31 December
609
+ 2001. How long they remained VALID ON THE ROAD in Czechia was NOT
610
+ established — no exchange deadline was located in either vyhláška — and
611
+ that is a recorded gap and a real contrast with Slovakia, where the
612
+ deadline is expressly 31 December 2004. The two successor states thus
613
+ close the same era on different dates by different instruments, which is
614
+ precisely why this file records it rather than deferring to a shared
615
+ pre-1993 file.
616
+
617
+ # =========================================================================
618
+ # DIPLOMATIC AND CIZINECKÁ — white ground, blue characters, since 2004.
619
+ # =========================================================================
620
+ - id: cz-diplomatic-2004
621
+ class: diplomatic
622
+ categories: [car, van, motorcycle, moped]
623
+ period: { start: 2004 }
624
+ period_evidence: enacted-commencement
625
+ matching: strict
626
+ format:
627
+ pattern: "CD9 9999"
628
+ regex: '\A(?:CD|XX|XS|HC)\d \d{4}\z'
629
+ charset:
630
+ notes: >-
631
+ § 24 odst. 3 vyhlášky 343/2014 Sb., verbatim: "Registrační značka
632
+ diplomatická nebo cizinecká je složena z velkých písmen latinské
633
+ abecedy „CD“, „XX“, „XS“ nebo „HC“ a u automobilů z 5, u motocyklů ze 4
634
+ a u mopedů se šlapadly ze 3 arabských číslic." FOUR prefixes, and the
635
+ digit count varies by vehicle type. `pattern` and `regex` carry the
636
+ SEVEN-CHARACTER car form; the motorcycle (six) and moped (five) forms
637
+ are stated here rather than given their own series because only the
638
+ digit count differs.
639
+ prefix_meanings: >-
640
+ The four prefixes are not glossed in § 24 odst. 3 itself. § 29 odst. 2
641
+ písm. c) enumerates the four entitlement classes that share the colour
642
+ — persons enjoying diplomatic or consular privileges and immunities,
643
+ administrative-technical staff with limited privileges, service staff
644
+ of a mission or members of an international organisation, and honorary
645
+ consuls — but does not map them one-to-one onto CD/XX/XS/HC. WHICH
646
+ PREFIX GOES WITH WHICH CLASS IS A RECORDED GAP; the OVAL supplementary
647
+ plate (common.supplementary_plates) does gloss its own three letters
648
+ (CD = Corps diplomatique, CC = Corps consulaire, HC = Consuls
649
+ honoraires) and that is a different plate. PRD-PLATES puts diplomatic
650
+ decode tables at L4 and none is authored here.
651
+ separator_note: "the § 27 odst. 2 sticker gap after position 3, as on every single-row Czech plate"
652
+ design:
653
+ plate: { w: 520, h: 110, unit: mm }
654
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, spec_note: "§ 29 odst. 2 písm. c): 'bílý podklad a modré znaky'" }
655
+ foreground: "#0000CC"
656
+ foreground_note: "'modré znaky' — blue characters; no colour value is given anywhere in Czech law, so the hex is observed"
657
+ border: { width: 4, unit: mm, color: "#0000CC", hex_basis: observed, note: "§ 29 odst. 4: the border takes the CHARACTER colour, so a diplomatic plate has a blue border" }
658
+ band: { side: left, color: "#003399", content: eu-stars+CZ, hex_basis: observed }
659
+ supplementary_plate: { shape: oval, w_min: 175, h_min: 115, unit: mm, background: "#003399", foreground: "#FFCC00", content: "CD, CC or HC", note: "the doplňková registrační značka of § 26 vyhlášky 243/2001 Sb. — a SEPARATE oval plate, blue ground, yellow characters, 4 mm yellow border, carried alongside the registration plate" }
660
+ emblem: { present: false }
661
+ region_encoding: none
662
+ region_encoding_note: "expressly excluded from the kraj rule by § 24 odst. 2 vyhlášky 243/2001 Sb.; a diplomatic mark carries no geography"
663
+ sources:
664
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=z&id=27609 # vyhláška č. 343/2014 Sb. § 24 odst. 3 (the four prefixes and the per-category digit counts), § 29 odst. 2 písm. c) (white ground, blue characters, EU band, and the four entitlement classes). Accessed 2026-08-02"
665
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=c&id=4399 # vyhláška č. 291/2004 Sb. Čl. I bod 3, which is where the colour INVERTED — § 24 odst. 2 písm. c) as rewritten reads 'bílý podklad a modré znaky', replacing the 2001 text's 'modrý podklad a žluté znaky'. Čl. III commences it 1 June 2004; Čl. II odst. 4 gave existing diplomatic keepers until 31 December 2005 to exchange. Accessed 2026-08-02"
666
+ notes: >-
667
+ A FOLKLORE CORRECTION, and a clean one. Secondary sources date the Czech
668
+ diplomatic plate's switch from blue-on-yellow to blue-on-white to 2001. THE
669
+ INSTRUMENT DATES IT TO 1 JUNE 2004: vyhláška 243/2001 Sb. § 24 odst. 2
670
+ písm. c) and d) both read "modrý podklad a žluté znaky" for diplomatic and
671
+ cizinecká vehicles, and it was vyhláška 291/2004 Sb. Čl. I bod 3 that
672
+ replaced the whole of § 24 with a version reading "bílý podklad a modré
673
+ znaky". The prefix set changed at the same reform: 2001 knew only "DD" and
674
+ "XX" (§ 16 odst. 3), the current regulation knows CD, XX, XS and HC. The
675
+ predecessor is recorded separately as cz-diplomatic-2001. Čl. II odst. 4 of
676
+ the 2004 vyhláška set an exchange deadline of 31 December 2005 for this
677
+ class specifically — the ONLY compulsory plate exchange this pass found in
678
+ Czech law, and it is why the diplomatic series, unlike the standard one,
679
+ does not run in parallel with its predecessor indefinitely.
680
+
681
+ - id: cz-diplomatic-2001
682
+ class: diplomatic
683
+ categories: [car, van, motorcycle]
684
+ period: { start: 2001, end: 2005 }
685
+ period_evidence: transitional-provision
686
+ matching: strict
687
+ format:
688
+ pattern: "DD9 9999"
689
+ regex: '\A(?:DD|XX)[A-Z0-9] [A-Z0-9]{4}\z'
690
+ charset:
691
+ notes: >-
692
+ § 16 odst. 3 vyhlášky 243/2001 Sb., verbatim: "Registrační značka
693
+ diplomatická začíná vždy dvěma písmeny v provedení „DD“ nebo „XX“, za
694
+ nimiž se umíst'uje pět znaků složených z velkých písmen latinské
695
+ abecedy a arabských číslic." TWO prefixes, not four, and the five
696
+ following characters may be LETTERS OR DIGITS — a looser tail than the
697
+ 2014 successor's five arabic numerals, which is why `regex` here
698
+ spells [A-Z0-9] where cz-diplomatic-2004 spells \d.
699
+ design:
700
+ plate: { w: 520, h: 110, unit: mm }
701
+ background: { color: "#003399", finish: retroreflective, hex_basis: observed, spec_note: "§ 24 odst. 2 písm. c) a d) vyhlášky 243/2001 Sb.: 'modrý podklad a žluté znaky'" }
702
+ foreground: "#FFCC00"
703
+ border: { width: 4, unit: mm, color: "#FFCC00", hex_basis: observed }
704
+ band: { side: none }
705
+ emblem: { present: false }
706
+ region_encoding: none
707
+ sources:
708
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=c&id=3670 # vyhláška č. 243/2001 Sb. § 16 odst. 3 (DD / XX + five characters), § 24 odst. 2 písm. c) a d) ('modrý podklad a žluté znaky' for both diplomatická and cizinecká). Accessed 2026-08-02"
709
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=c&id=4399 # vyhláška č. 291/2004 Sb. Čl. II odst. 4: diplomatic and consular keepers were given an exchange deadline of 31 December 2005 — the source of period.end on this series. Accessed 2026-08-02"
710
+ notes: >-
711
+ THE BLUE DIPLOMATIC PLATE — yellow characters on a blue ground, no EU band,
712
+ two prefixes. period.end 2005 is NOT the date the successor started; it is
713
+ the EXCHANGE DEADLINE in vyhláška 291/2004 Sb. Čl. II odst. 4, which is why
714
+ period_evidence is transitional-provision and not instrument-in-force. The
715
+ overlap with cz-diplomatic-2004 between June 2004 and December 2005 is a
716
+ real transition window in which both designs were lawfully on the road, and
717
+ it is recorded rather than collapsed to a single switchover date.
718
+
719
+ # =========================================================================
720
+ # HISTORIC VEHICLES — green on white, and a kraj code that changed alphabet.
721
+ # =========================================================================
722
+ - id: cz-historic-2015
723
+ class: historic
724
+ categories: [car, van, truck, bus, motorcycle, moped]
725
+ period: { start: 2015 }
726
+ period_evidence: enacted-commencement
727
+ matching: strict
728
+ format:
729
+ pattern: "99V 9999"
730
+ regex: '\A\d{2}V [A-Z0-9]{4}\z'
731
+ regex_strict: '\A(?:0[1-9]|1[0-4])V [A-Z0-9]{4}\z'
732
+ charset:
733
+ notes: >-
734
+ § 26 odst. 1 vyhlášky 343/2014 Sb., verbatim: "Registrační značka pro
735
+ historická vozidla začíná vždy dvoumístným číselným znakem arabských
736
+ číslic registračního místa, které zajišťuje registraci historických
737
+ vozidel na správním území kraje, a velkým písmenem „V“, za nímž se
738
+ u historických automobilů umísťují 4, u historických motocyklů 3
739
+ a u historických mopedů se šlapadel 2 arabské číslice nebo písmena."
740
+ `regex_strict` restricts the leading pair to the FOURTEEN numeric kraj
741
+ codes 01 to 14 of § 26 odst. 6 — a sourced tightening the round-trip
742
+ cannot carry. `pattern` and `regex` give the seven-character
743
+ automobile form; motorcycles take three trailing characters and pedal
744
+ mopeds two.
745
+ design:
746
+ plate: { w: 520, h: 110, unit: mm }
747
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, spec_note: "§ 29 odst. 2 písm. e): 'bílý podklad a zelené znaky'" }
748
+ foreground: "#009933"
749
+ border: { width: 4, unit: mm, color: "#009933", hex_basis: observed, note: "green border, per the § 29 odst. 4 character-colour rule" }
750
+ band: { side: left, color: "#003399", content: eu-stars+CZ, hex_basis: observed }
751
+ emblem: { present: false }
752
+ region_encoding: "plates/_decode/cz-kraj.yml"
753
+ region_encoding_mechanism: >-
754
+ THE NUMERIC ALPHABET, NOT THE LETTER ONE — the single most trap-laden fact
755
+ in Czech decoding. The two leading digits are the kraj code of § 26 odst. 6
756
+ (01 Praha, 02 Jihomoravský, 03 Jihočeský ...), which is ordered
757
+ ALPHABETICALLY BY KRAJ NAME and agrees with the letter table on Praha and
758
+ on nothing else. A parse API that mapped 02 to the second letter-table row
759
+ would return Středočeský instead of Jihomoravský. Both tables are in
760
+ cz-kraj.yml for exactly this reason.
761
+ sources:
762
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=z&id=27609 # vyhláška č. 343/2014 Sb. § 26 odst. 1 (the numeral + V + digits form), § 26 odst. 6 (the fourteen numeric kraj codes), § 29 odst. 2 písm. e) (white ground, green characters, EU band). Účinnost 1. 1. 2015. Accessed 2026-08-02"
763
+ notes: >-
764
+ THE CURRENT HISTORIC-VEHICLE MARK. period.start 2015 is the commencement of
765
+ vyhláška 343/2014 Sb. and marks a REAL format change, not a re-enactment:
766
+ the 2001 regulation's historic mark was V + four digits with NO kraj code
767
+ at all (see cz-historic-2001), and the 2014 regulation prefixed the
768
+ two-digit registration-place code. A bare-V historic plate is therefore
769
+ diagnostic of the earlier era and carries no geography whatsoever. The
770
+ mark is issued to vehicles holding a "průkaz historického nebo sportovně
771
+ historického vozidla" and NOT otherwise registered — it is a regime, not a
772
+ decoration, which is why it is a series and not a specialty variant.
773
+
774
+ - id: cz-historic-2001
775
+ class: historic
776
+ categories: [car, van, truck, bus, motorcycle]
777
+ period: { start: 2001, end: 2015 }
778
+ period_evidence: instrument-dated-both-ends
779
+ matching: strict
780
+ format:
781
+ pattern: "V99 99"
782
+ regex: '\AV\d{2} \d{2}\z'
783
+ charset:
784
+ notes: >-
785
+ § 16 odst. 5 vyhlášky 243/2001 Sb., verbatim: "Zvláštní registrační
786
+ značka pro historická vozidla začíná vždy znakem vyjadřujícím písmeno
787
+ „V“, za nímž se umíst'ují čtyři arabské číslice." Five characters: V
788
+ and four digits, and no kraj code.
789
+ grouping_caveat: >-
790
+ THE PRINTED GROUPING IS DERIVED, NOT QUOTED. § 16 odst. 5 gives the
791
+ character sequence and says nothing about where the gap falls; the space
792
+ after position 3 in `pattern` is this pass's application of the GENERAL
793
+ rule in § 17 odst. 2 ("mezi třetím a čtvrtým místem určeným pro znak
794
+ mezera"), which is written for single-row plates without excepting this
795
+ series. If a physical specimen or příloha č. 13 shows a different
796
+ grouping, this pattern is what changes. Flagged for the verifier rather
797
+ than presented as sourced.
798
+ design:
799
+ plate: { w: 520, h: 110, unit: mm }
800
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, spec_note: "§ 24 odst. 2 písm. f) vyhlášky 243/2001 Sb.: 'bílý podklad a zelené znaky'" }
801
+ foreground: "#009933"
802
+ border: { width: 4, unit: mm, color: "#009933", hex_basis: observed }
803
+ band: { side: none, note: "no EU band before 1 June 2004; vyhláška 291/2004 Sb. Čl. I bod 3 added it to this class too (§ 24 odst. 2 písm. e) as rewritten)" }
804
+ emblem: { present: false }
805
+ region_encoding: none
806
+ region_encoding_note: "expressly excluded from the kraj rule by § 16 odst. 2 vyhlášky 243/2001 Sb., and structurally so — the mark opens with the literal V"
807
+ sources:
808
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=c&id=3670 # vyhláška č. 243/2001 Sb. § 15 písm. b) bod 4, § 16 odst. 5, § 17 odst. 2, § 24 odst. 2 písm. f). Accessed 2026-08-02"
809
+ notes: >-
810
+ THE FIRST CZECH HISTORIC MARK — V plus four digits, green on white, no kraj
811
+ code and, until June 2004, no EU band. period runs from the commencement of
812
+ vyhláška 243/2001 Sb. on 17 July 2001 to the commencement of its successor
813
+ on 1 January 2015, when the two-digit kraj code was prefixed. Distinct from
814
+ cz-historic-2015 by that prefix and by nothing else; distinct from
815
+ cz-standard-2001 by class, colour and format.
816
+
817
+ # =========================================================================
818
+ # SPORTS VEHICLES — the R mark. New in the 2014 regulation.
819
+ # =========================================================================
820
+ - id: cz-sport
821
+ class: sport
822
+ categories: [car, motorcycle]
823
+ period: { start: 2015 }
824
+ period_evidence: enacted-commencement
825
+ matching: strict
826
+ format:
827
+ pattern: "99R 9999"
828
+ regex: '\A\d{2}R \d{4}\z'
829
+ regex_strict: '\A(?:0[1-9]|1[0-4])R \d{4}\z'
830
+ charset:
831
+ notes: >-
832
+ § 26 odst. 5 vyhlášky 343/2014 Sb., verbatim: "Registrační značka pro
833
+ sportovní vozidla začíná vždy dvoumístným číselným znakem arabských
834
+ číslic registračního místa, které zajišťuje registraci sportovních
835
+ vozidel na správním území kraje, a velkým písmenem „R“, za nímž se
836
+ u sportovních automobilů umísťují 4 a u sportovních motocyklů
837
+ 3 arabské číslice." Structurally the twin of the historic mark with R
838
+ for V, and — unlike the historic mark — the trailing characters are
839
+ DIGITS ONLY, not "číslice nebo písmena".
840
+ design:
841
+ plate: { w: 330, h: 85, unit: mm }
842
+ plate_variants:
843
+ - { w: 80, h: 110, unit: mm, note: "§ 29 odst. 1 písm. f): the sports plate on a sports MOTORCYCLE takes the moped-sized plate" }
844
+ plate_note: "§ 29 odst. 1 písm. q): 330 x 85 mm 'pro tabulku s registrační značkou pro sportovní vozidlo, jedná-li se o přední tabulku umístěnou na přední části sportovního automobilu' — a FRONT plate size that exists nowhere else in Czech law and is the narrowest plate in this file"
845
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
846
+ foreground: "#000000"
847
+ colour_caveat: >-
848
+ NOT SEPARATELY SPECIFIED. § 29 odst. 2 enumerates colours for road
849
+ vehicles, tractors, diplomatic, export, historic, one-trip, dealer and
850
+ test marks — and does NOT list the sports mark. The white/black recorded
851
+ here is the § 29 odst. 2 písm. a) default applied by elimination, which
852
+ is an inference and is flagged as one. Recorded gap.
853
+ band: { side: left, color: "#003399", content: eu-stars+CZ, hex_basis: observed }
854
+ emblem: { present: false }
855
+ region_encoding: "plates/_decode/cz-kraj.yml"
856
+ region_encoding_mechanism: "the NUMERIC kraj codes of § 26 odst. 6, identically to cz-historic-2015 — see that series' warning about the two incompatible Czech kraj alphabets"
857
+ sources:
858
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=z&id=27609 # vyhláška č. 343/2014 Sb. § 23 písm. b) bod 5 (the class), § 26 odst. 5 (the format), § 26 odst. 6 (the numeric kraj codes), § 29 odst. 1 písm. f) a q) (the two plate sizes). Accessed 2026-08-02"
859
+ notes: >-
860
+ THE SPORTS-VEHICLE MARK, issued against a "průkaz sportovního vozidla".
861
+ Absent from vyhláška 243/2001 Sb. entirely — § 15 of the 2001 regulation
862
+ lists four zvláštní classes and this is not one of them — so period.start
863
+ 2015 is a genuine creation date, the commencement of vyhláška 343/2014 Sb.
864
+ Its class is `sport`, which this PR adds to plates/_meta/classes.yml with a
865
+ definition, because both jurisdictions in this slice have one (Slovakia's
866
+ is the S zvláštne evidenčné číslo of § 127 odst. 9 zákona 8/2009 Z. z.) and
867
+ neither fits `specialty`, which the vocabulary defines as an
868
+ optional-design programme on a standard serial.
869
+
870
+ # =========================================================================
871
+ # REGISTRAČNÍ ZNAČKA NA PŘÁNÍ — the personalized mark.
872
+ # =========================================================================
873
+ - id: cz-personalized
874
+ class: personalized
875
+ categories: [car, van, truck, bus, motorcycle, moped, trailer]
876
+ period: { start: 2015 }
877
+ period_evidence: enacted-commencement
878
+ matching: strict
879
+ format:
880
+ pattern: "LL9 9999"
881
+ regex: '\A[A-Z0-9]{3} [A-Z0-9]{4,5}\z'
882
+ charset:
883
+ notes: >-
884
+ § 25 vyhlášky 343/2014 Sb., verbatim: "Znaky registrační značky na
885
+ přání jsou provedeny s nejméně 7 a nejvíce 8 velkými písmeny latinské
886
+ abecedy a arabskými číslicemi. Registrační značka na přání pro mopedy
887
+ je provedena v 5 velkých písmenech latinské abecedy nebo arabskými
888
+ číslicemi. V registrační značce na přání se mohou písmena a číslice
889
+ použít libovolně." SEVEN OR EIGHT characters — one or two MORE than an
890
+ ordinary mark's minimum — and, expressly, letters and digits in any
891
+ arrangement. There is no kraj code, no reserved position and no
892
+ exclusion of G, O, Q or W in § 25: the § 27 odst. 3 alphabet binds
893
+ characters "které se přidávají za kód kraje nebo za první povinný
894
+ znak", and a personalized mark has neither. This series is therefore
895
+ the one place in Czech law where the full 36-character alphabet is
896
+ available, and `regex` says so.
897
+ secondary_restrictions: >-
898
+ Secondary sources report further limits — that G, CH, O, Q and W are
899
+ barred, that the mark must contain at least one numeral, and that it
900
+ costs 5,000 CZK per plate. NONE of these is in § 25 or in § 27, and the
901
+ statutory conditions live in § 7b zákona č. 56/2001 Sb., which this
902
+ pass did not fetch. They are recorded as secondary-wikipedia and are
903
+ NOT encoded in any regex here. Recorded gap.
904
+ secondary_source: "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_the_Czech_Republic # 'Available since 2017; format XXX-XXXXX ... Restrictions: letters G, CH, O, Q, W prohibited; must contain at least one numeral; cannot display abusive content.' Accessed 2026-08-02"
905
+ design:
906
+ plate: { w: 520, h: 110, unit: mm }
907
+ plate_variants:
908
+ - { w: 340, h: 200, unit: mm, note: "§ 29 odst. 1 písm. i): truck, bus, special and trailer" }
909
+ - { w: 280, h: 200, unit: mm, note: "§ 29 odst. 1 písm. j): car, two-line" }
910
+ - { w: 200, h: 160, unit: mm, note: "§ 29 odst. 1 písm. k): motorcycle and trailer" }
911
+ - { w: 320, h: 160, unit: mm, note: "§ 29 odst. 1 písm. l)" }
912
+ - { w: 80, h: 110, unit: mm, note: "§ 29 odst. 1 písm. m): pedal moped" }
913
+ plate_note: "§ 29 odst. 1 gives the personalized mark its OWN six-size table (písm. h) to m)), separate from and parallel to the standard one — the clearest sign in the regulation that it is a distinct series rather than a variant"
914
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
915
+ foreground: "#000000"
916
+ band: { side: left, color: "#003399", content: eu-stars+CZ, hex_basis: observed }
917
+ emblem: { present: false }
918
+ region_encoding: none
919
+ region_encoding_note: "no kraj code — § 25 imposes no positional structure at all, so a personalized Czech mark carries no geography even by accident"
920
+ sources:
921
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=z&id=27609 # vyhláška č. 343/2014 Sb. § 25 (K § 7b odst. 6 zákona) — 7 to 8 characters, mopeds 5, letters and digits used freely; § 29 odst. 1 písm. h) to m) (the six plate sizes). Účinnost 1. 1. 2015. Accessed 2026-08-02"
922
+ notes: >-
923
+ THE PERSONALIZED MARK, and a DATE CORRECTION. Secondary sources say custom
924
+ plates became available in 2017; § 25 is in vyhláška 343/2014 Sb. AS
925
+ ORIGINALLY PROMULGATED in částka 136 of 31 December 2014 and recites its
926
+ enabling provision as § 7b odst. 6 zákona č. 56/2001 Sb., so the mark
927
+ existed in Czech law from 1 January 2015. The 2017 date may well be when
928
+ issuance actually began or when § 7b was amended — vyhlášky č. 10/2017 Sb.,
929
+ 86/2017 Sb. and 158/2017 Sb. all amended 343/2014 Sb. and none was fetched
930
+ — but it is not the date the series was created, and this file records the
931
+ instrument rather than the report. period_evidence is enacted-commencement
932
+ on that basis; the first-issue date is a recorded gap.
933
+
934
+ # =========================================================================
935
+ # ZVLÁŠTNÍ REGISTRAČNÍ ZNAČKY — dealer, one-trip and test.
936
+ # =========================================================================
937
+ - id: cz-dealer
938
+ class: dealer
939
+ categories: [car, van, truck, bus, motorcycle, trailer, machine]
940
+ period: { start: 2001 }
941
+ period_evidence: instrument-in-force
942
+ matching: strict
943
+ format:
944
+ pattern: "L99 999"
945
+ regex: '\A[A-Z][A-Z0-9]{2} [A-Z0-9]{2,3}\z'
946
+ regex_strict: '\A[ABCEHJKLMPSTUZ][A-Z0-9]{2} [A-Z0-9]{2,3}\z'
947
+ charset:
948
+ notes: >-
949
+ § 26 odst. 2 vyhlášky 343/2014 Sb. (§ 16 odst. 6 of the 2001 vyhláška,
950
+ same words), verbatim: "Zvláštní registrační značka pro manipulační
951
+ provoz se skládá nejméně z 5 znaků a nejvíce z 6 znaků a začíná vždy
952
+ písmenem kódu kraje, ostatní znaky jsou složeny z velkých písmen
953
+ latinské abecedy a arabských číslic." The kraj letter is at POSITION 1
954
+ here, not position 2 — this series and cz-transfer are the only Czech
955
+ marks where the naive first-character decode is the correct one, and
956
+ `regex_strict` restricts that position to the fourteen kraj letters
957
+ accordingly.
958
+ design:
959
+ plate: { w: 520, h: 110, unit: mm }
960
+ plate_variants:
961
+ - { w: 280, h: 200, unit: mm, note: "§ 29 odst. 1 písm. o)" }
962
+ - { w: 200, h: 160, unit: mm, note: "§ 29 odst. 1 písm. p): motorcycle, tractor, self-propelled machine" }
963
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, spec_note: "§ 29 odst. 2: 'bílý podklad a zelené znaky'" }
964
+ foreground: "#009933"
965
+ border: { width: 4, unit: mm, color: "#009933", hex_basis: observed }
966
+ band: { side: left, color: "#003399", content: eu-stars+CZ, hex_basis: observed, note: "added by vyhláška 291/2004 Sb.; absent 2001-2004" }
967
+ emblem: { present: false }
968
+ region_encoding: "plates/_decode/cz-kraj.yml"
969
+ region_encoding_mechanism: "the kraj LETTER, at position 1 — see charset.notes"
970
+ binding: business
971
+ binding_note: >-
972
+ § 21 odst. 1 vyhlášky 243/2001 Sb.: the plates are issued "osobě, která
973
+ zabezpečuje jízdy vozidel dosud neregistrovaných" — manufacturers,
974
+ importers and dealers moving unregistered vehicles. § 21 odst. 2 forbids
975
+ their use on a vehicle already in the register, with one express exception:
976
+ test drives during repairs, where the special plate is placed OVER the
977
+ vehicle's own plate. The binding is to the BUSINESS, so a vehicle-keyed
978
+ consumer must not join on it.
979
+ sources:
980
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=z&id=27609 # vyhláška č. 343/2014 Sb. § 26 odst. 2, § 29 odst. 1 písm. n) až p), § 29 odst. 2. Accessed 2026-08-02"
981
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=c&id=3670 # vyhláška č. 243/2001 Sb. § 16 odst. 6 (the format, unchanged since), § 21 odst. 1-2 (who gets them and the repair-test exception), § 22 (the per-plate journey log 'záznamy jízd'). Accessed 2026-08-02"
982
+ notes: >-
983
+ THE MANIPULAČNÍ (TRADE) PLATE — Czechia's dealer plate. period.start 2001
984
+ is instrument-in-force on vyhláška 243/2001 Sb.: the class existed before
985
+ 2001 under § 94 of vyhláška 145/1956 Ú. l. as rewritten by 34/1984 Sb.
986
+ (which is titled "Zvláštní státní poznávací značka" and describes the same
987
+ arrangement, including the "záznam jízd" log book), so 2001 is the date of
988
+ the instrument that STATES this format, not the date the class began. Its
989
+ pre-2001 form is a recorded gap for the same reason as
990
+ cz-spz-czechoslovak's. Distinct from cz-test by its recipients, its serial
991
+ grammar and its purpose, and from cz-transfer by everything but colour.
992
+
993
+ - id: cz-test
994
+ class: dealer
995
+ categories: [car, van, truck, bus, motorcycle, trailer, machine]
996
+ period: { start: 2001 }
997
+ period_evidence: instrument-in-force
998
+ matching: strict
999
+ format:
1000
+ pattern: "F99 99"
1001
+ regex: '\AF\d{2} \d{2}\z'
1002
+ charset:
1003
+ notes: >-
1004
+ § 26 odst. 4 vyhlášky 343/2014 Sb. (§ 16 odst. 8 of the 2001 vyhláška,
1005
+ same words), verbatim: "Zvláštní registrační značka pro zkušební provoz
1006
+ se skládá z 5 znaků a začíná vždy písmenem „F“, ostatní znaky jsou
1007
+ vyjádřeny arabskými číslicemi." Exactly five characters: the literal F
1008
+ and four digits. No kraj code — this is the only Czech special mark
1009
+ with no geography in it, because it is issued only with the ministry's
1010
+ prior consent and is national.
1011
+ grouping_caveat: "as on cz-historic-2001, the gap after position 3 is the general § 27 odst. 2 rule applied to a five-character mark, not a quoted grouping. Flagged."
1012
+ design:
1013
+ plate: { w: 520, h: 110, unit: mm }
1014
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, spec_note: "§ 29 odst. 2: 'bílý podklad a zelené znaky'" }
1015
+ foreground: "#009933"
1016
+ border: { width: 4, unit: mm, color: "#009933", hex_basis: observed }
1017
+ band: { side: left, color: "#003399", content: eu-stars+CZ, hex_basis: observed }
1018
+ emblem: { present: false }
1019
+ region_encoding: none
1020
+ binding: business
1021
+ sources:
1022
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=z&id=27609 # vyhláška č. 343/2014 Sb. § 26 odst. 4, § 29 odst. 2. Accessed 2026-08-02"
1023
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=c&id=3670 # vyhláška č. 243/2001 Sb. § 16 odst. 8 (F + four digits); § 21 odst. 3, which restricts issue to vehicles 'u nichž nebyla dosud schválena technická způsobilost' or carrying unapproved parts, and only 'po předchozím souhlasu ministerstva'. Accessed 2026-08-02"
1024
+ notes: >-
1025
+ THE TEST PLATE — F plus four digits, green on white, issued only with the
1026
+ Ministry of Transport's prior consent and only for vehicles whose technical
1027
+ fitness has not yet been approved or which are carrying unapproved parts.
1028
+ Shares the class `dealer` and the colour scheme with cz-dealer and is a
1029
+ different series because its serial grammar, its recipients and its legal
1030
+ trigger all differ: the dealer plate moves APPROVED unregistered vehicles,
1031
+ this one moves UNAPPROVED ones. The reservation of the letter F is why
1032
+ vyhláška 243/2001 Sb. kept F out of the ordinary letter alphabet
1033
+ altogether; when the 2014 regulation re-admitted F to that alphabet it kept
1034
+ the reservation here too, so F is now positionally ambiguous and a parse
1035
+ API must use the five-character length to disambiguate.
1036
+
1037
+ - id: cz-transfer
1038
+ class: temporary
1039
+ categories: [car, van, truck, bus, motorcycle, trailer]
1040
+ period: { start: 2001 }
1041
+ period_evidence: instrument-in-force
1042
+ matching: strict
1043
+ format:
1044
+ pattern: "L999999"
1045
+ regex: '\A[A-Z]\d{6}\z'
1046
+ regex_strict: '\A[ABCEHJKLMPSTUZ]\d{6}\z'
1047
+ charset:
1048
+ notes: >-
1049
+ § 26 odst. 3 vyhlášky 343/2014 Sb. (§ 16 odst. 7 of the 2001 vyhláška,
1050
+ same words), verbatim: "Zvláštní registrační značka pro jízdu z místa
1051
+ prodeje do místa registrace silničního vozidla se skládá ze 7 znaků
1052
+ a začíná vždy písmenem kódu kraje, ostatní znaky jsou vyjádřeny
1053
+ arabskými číslicemi." Kraj letter at position 1, then six digits.
1054
+ separator_note: >-
1055
+ NO SEPARATOR AT ALL, and that is sourced rather than assumed. This is the
1056
+ one Czech mark expressly EXCLUDED from the single-row sticker-gap rule:
1057
+ § 27 odst. 1 provides that the three-and-five row split "neplatí pro
1058
+ zvláštní registrační značku pro jízdu z místa prodeje do místa registrace
1059
+ silničního vozidla, kde je v prvním řádku umístěn 1 znak a v druhém řádku
1060
+ maximálně 6 znaků" — this plate is always TWO ROWS, one character over
1061
+ six, so there is no in-line gap to spell.
1062
+ design:
1063
+ plate: { w: 210, h: 145, unit: mm }
1064
+ plate_note: "210 x 145 mm under § 29 odst. 1 písm. g); 210 x 150 mm under § 24 odst. 1 písm. g) of the 2001 vyhláška — a 5 mm reduction at the 2015 recut, recorded because it is the only Czech plate whose dimensions changed"
1065
+ background: { color: "#00A550", finish: printed, hex_basis: observed, spec_note: "§ 24 odst. 2 písm. g) vyhlášky 243/2001 Sb.: 'zelený podklad a černé znaky'" }
1066
+ foreground: "#000000"
1067
+ border: { width: 4, unit: mm, color: "#000000", hex_basis: observed, note: "§ 24 odst. 4: PRINTED, not embossed, on this plate alone — 'Na zvláštní registrační značce pro jednorázové použití s omezenou platností je natištěn černý okraj'" }
1068
+ band: { side: none }
1069
+ emblem: { present: false }
1070
+ material: "TVRDÝ PAPÍR — hard paper, not light alloy. § 24 odst. 3 vyhlášky 243/2001 Sb.: 'Toto neplatí pro tabulku zvláštní registrační značky jednorázové s omezenou platností, která je vyrobena z tvrdého papíru.' The characters are PRINTED ('formou vytištění'), not embossed, and the plate carries no retroreflection and no sticker well."
1071
+ printed_fields: "the validity period, the date of assignment, a space for a stamp and a space for an authorised signature are all PRINTED ON THE PLATE (§ 24 odst. 2 písm. g))"
1072
+ region_encoding: "plates/_decode/cz-kraj.yml"
1073
+ region_encoding_mechanism: "the kraj LETTER, at position 1"
1074
+ validity: "10 days from issue — § 21 odst. 4 vyhlášky 243/2001 Sb.: 'Na tabulce je vyznačena platnost registrační značky, která je stanovena na 10 dnů od jejího vydání.'"
1075
+ sources:
1076
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=z&id=27609 # vyhláška č. 343/2014 Sb. § 26 odst. 3, § 27 odst. 1 (the one-over-six two-row exception), § 29 odst. 1 písm. g). Accessed 2026-08-02"
1077
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=c&id=3670 # vyhláška č. 243/2001 Sb. § 16 odst. 7, § 17 odst. 1, § 21 odst. 4 (10-day validity, dealer issues them, the 'kniha vydání' register), § 24 odst. 1 písm. g), odst. 2 písm. g), odst. 3, odst. 4. Accessed 2026-08-02"
1078
+ notes: >-
1079
+ THE PAPER ONE-TRIP PLATE — green ground, black printed characters, issued
1080
+ by the DEALER to a buyer for the single journey from the point of sale to
1081
+ the place of registration, valid ten days. Called "zvláštní registrační
1082
+ značka pro jednorázové použití s omezenou platností" in 2001 and renamed
1083
+ "pro jízdu z místa prodeje do místa registrace silničního vozidla" in 2014
1084
+ without changing its grammar. It is the only Czech plate made of paper, the
1085
+ only one with printed rather than embossed characters, the only one with a
1086
+ printed border, and the only one whose layout the regulation expressly
1087
+ exempts from the single-row rule — four exceptions in one series, which is
1088
+ why it is modelled separately rather than as a variant.
1089
+
1090
+ # =========================================================================
1091
+ # EXPORT AND AGRICULTURAL — standard grammar, different plate.
1092
+ # =========================================================================
1093
+ - id: cz-export
1094
+ class: export
1095
+ categories: [car, van, truck, bus, motorcycle, trailer]
1096
+ period: { start: 2001 }
1097
+ period_evidence: instrument-in-force
1098
+ matching: strict
1099
+ format:
1100
+ pattern: "9L9 9999"
1101
+ regex: '\A\d[A-Z][A-Z0-9] \d{4}\z'
1102
+ charset:
1103
+ notes: >-
1104
+ The SERIAL is an ordinary standard mark; what distinguishes the series
1105
+ is the plate. § 24 odst. 4 vyhlášky 343/2014 Sb. (§ 16 odst. 4 of the
1106
+ 2001 vyhláška, same words): "Registrační značka pro vývoz je doplněna
1107
+ o červené pole sloužící k vyznačení její platnosti." No separate
1108
+ grammar is prescribed, so no separate grammar is asserted here.
1109
+ design:
1110
+ plate: { w: 520, h: 110, unit: mm }
1111
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
1112
+ foreground: "#000000"
1113
+ validity_field: { side: right, color: "#CC0000", hex_basis: observed, content: "the expiry of the mark", note: "§ 29 odst. 2 písm. d): 'tabulka je na pravé straně doplněna červeným polem, ve kterém se vyznačuje její platnost'; on a two-line plate the red field moves LEFT of the first row ('umísťuje se červené pole vlevo před znaky v prvním řádku')" }
1114
+ band: { side: none }
1115
+ band_note: >-
1116
+ A DELIBERATE ABSENCE, and it is the one place where the 2004 EU-band
1117
+ amendment did NOT reach. § 29 odst. 2 písm. d) describes the export plate
1118
+ as "bílý podklad a černé znaky, tabulka je na pravé straně doplněna
1119
+ červeným polem" and — alone among the lettered paragraphs a) to i) — says
1120
+ nothing about a modrý pruh. The red validity field occupies the position
1121
+ the band would take on a two-line plate, which is presumably why. Stated
1122
+ as a reading of the enumeration, not as an express exclusion.
1123
+ emblem: { present: false }
1124
+ region_encoding: "plates/_decode/cz-kraj.yml"
1125
+ validity: "maximum 3 months from assignment — § 29 odst. 2 písm. d): 'Platnost se stanovuje maximálně na 3 měsíce od jejího přidělení'"
1126
+ sources:
1127
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=z&id=27609 # vyhláška č. 343/2014 Sb. § 23 písm. a) bod 4 ('pro vozidla vyvezená do jiného státu'), § 24 odst. 4, § 29 odst. 2 písm. d). Accessed 2026-08-02"
1128
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=c&id=3670 # vyhláška č. 243/2001 Sb. § 15 písm. a) bod 4 ('pro vozidla odhlášená k trvalému vývozu do zahraničí'), § 16 odst. 4, § 24 odst. 2 písm. e). Accessed 2026-08-02"
1129
+ notes: >-
1130
+ THE EXPORT MARK — an ordinary Czech mark on a plate carrying a red validity
1131
+ field at the right-hand end, valid at most three months. Czechia, unlike
1132
+ Austria, has a genuine export class rather than folding the job into a
1133
+ transfer plate. period.start 2001 is instrument-in-force on vyhláška
1134
+ 243/2001 Sb.; whether an equivalent existed under the 145/1956 chain was
1135
+ not established. Note the difference in wording between the two
1136
+ regulations, which is a real narrowing: 2001 said "odhlášená k trvalému
1137
+ vývozu do zahraničí" (deregistered for PERMANENT export), 2014 says simply
1138
+ "vyvezená do jiného státu".
1139
+
1140
+ - id: cz-agricultural
1141
+ class: agricultural
1142
+ categories: [tractor, machine, trailer]
1143
+ period: { start: 2001 }
1144
+ period_evidence: instrument-in-force
1145
+ matching: strict
1146
+ format:
1147
+ pattern: "9L9 9999"
1148
+ regex: '\A\d[A-Z][A-Z0-9] \d{4}\z'
1149
+ charset:
1150
+ notes: "the ordinary § 24 odst. 2 grammar; the series is distinguished by plate colour, not by serial"
1151
+ design:
1152
+ plate: { w: 280, h: 200, unit: mm }
1153
+ plate_variants:
1154
+ - { w: 520, h: 110, unit: mm, note: "§ 29 odst. 1 písm. a), where the vehicle has no space for the two-line plate" }
1155
+ - { w: 200, h: 160, unit: mm, note: "§ 29 odst. 1 písm. d)" }
1156
+ background: { color: "#FFCC00", finish: retroreflective, hex_basis: observed, spec_note: "§ 29 odst. 2 písm. b): 'žlutý podklad a černé znaky'" }
1157
+ foreground: "#000000"
1158
+ border: { width: 4, unit: mm, color: "#000000", hex_basis: observed }
1159
+ band: { side: none }
1160
+ band_note: "§ 29 odst. 2 písm. b) describes only 'žlutý podklad a černé znaky' with no modrý pruh — the yellow plate carries no EU band. Same reading-of-the-enumeration caveat as cz-export."
1161
+ emblem: { present: false }
1162
+ region_encoding: "plates/_decode/cz-kraj.yml"
1163
+ sources:
1164
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=z&id=27609 # vyhláška č. 343/2014 Sb. § 29 odst. 2 písm. b): 'pro traktor a jeho přípojné vozidlo nebo samojízdný pracovní stroj — žlutý podklad a černé znaky'. Accessed 2026-08-02"
1165
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=c&id=3670 # vyhláška č. 243/2001 Sb. § 24 odst. 2 písm. b), whose SCOPE was wider: 'pro zvláštní motorová vozidla a zemědělské a lesnické traktory a jejich přípojná vozidla'. Accessed 2026-08-02"
1166
+ - "https://aplikace.mv.gov.cz/sbirka-zakonu/ViewFile.aspx?type=c&id=4399 # vyhláška č. 291/2004 Sb. Čl. I bod 3, which narrowed the yellow class to 'traktor a jeho přípojné vozidlo nebo samojízdný pracovní stroj' with effect from 1 June 2004. Accessed 2026-08-02"
1167
+ notes: >-
1168
+ THE YELLOW PLATE. Czechia colour-codes agricultural and works machinery
1169
+ rather than serialising it separately — the mark is an ordinary one and
1170
+ only the ground is different, which under PRD-PLATES §2.3 would make it a
1171
+ sub-entry were the CLASS not different; it is recorded as its own series
1172
+ because the class is the point. A SCOPE CHANGE, dated: under vyhláška
1173
+ 243/2001 Sb. the yellow plate covered all "zvláštní motorová vozidla" plus
1174
+ agricultural and forestry tractors and their trailers, and vyhláška
1175
+ 291/2004 Sb. narrowed it on 1 June 2004 to tractors, tractor trailers and
1176
+ self-propelled works machines. Vehicles that left the yellow class on that
1177
+ date moved to the white one; no exchange was required, so yellow plates
1178
+ outside the current scope are lawfully on the road and a parse API must not
1179
+ infer the current scope from an old plate.