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,1647 @@
1
+ # plates/dk.yml — Denmark (PRD-PLATES gate L1, wave 2).
2
+ #
3
+ # WHAT IS PRIMARY HERE, AND WHAT IS NOT. Every claim in this file names its
4
+ # layer, and the layers are:
5
+ #
6
+ # 1. registreringsbekendtgørelsen — bekendtgørelse om registrering af
7
+ # køretøjer, currently BEK nr 663 af 10/06/2025 (Skatteministeriet), in
8
+ # force 16 June 2025, as amended by BEK nr 1826 af 29/12/2025. It carries
9
+ # the registration-number RULE (§ 68), the plate-type list (§ 68, stk. 4),
10
+ # the number of plates and where they go (§ 69), the diplomatic BLUE
11
+ # background (§ 76), the ønskenummer grammar (§ 74), the historic-plate
12
+ # rule (§ 75) and the papegøjenummerplade date (§ 82). Its enabling
13
+ # statute is lov om registrering af køretøjer, jf. LBK nr 179 af
14
+ # 22/02/2023, recited in the bekendtgørelse's own indledning.
15
+ # 2. ITS DATED ANCESTORS, which are where the era boundaries actually live.
16
+ # The whole 2007->2025 chain is machine-readable on retsinformation.dk and
17
+ # was read, not summarised: BEK 1567/2007, 673/2008, 633/2009, 811/2010,
18
+ # 651/2011, 504/2012, 20/2013, 1315/2014, 599/2017, 1498/2017, 818/2018,
19
+ # 1643/2018, 2523/2021, 866/2023, 663/2025. Four dates in this file come
20
+ # from ikrafttrædelses- and virkningsbestemmelser in that chain and from
21
+ # nowhere else — see THE FOUR DATES below.
22
+ # 3. SKAT's own plate catalogue — "Liste over alle pladetyper i Danmark pr.
23
+ # 06.06.2012", the authority's complete plate-stock poster, and the
24
+ # per-plate pages of skat.dk's "Billeder af nutidige nummerplader"
25
+ # section. These are the ONLY source, primary or otherwise, for Danish
26
+ # plate DIMENSIONS, COLOURS and per-type NUMBER RANGES: the
27
+ # bekendtgørelse specifies no size and no colour at all except the
28
+ # diplomatic plate's blue background.
29
+ # 4. Wikipedia (en + da), tagged `secondary-wikipedia` wherever it is load-
30
+ # bearing, never dressed as an instrument. It supplies the pre-2012
31
+ # serial-block detail below the SKAT catalogue's resolution, the issued
32
+ # letter alphabet, the blocked two-letter combinations, and the
33
+ # ønskenummerplade's 1992 start.
34
+ #
35
+ # THE FOUR DATES THIS FILE EXISTS TO GET RIGHT (PRD-PLATES §9: era boundaries
36
+ # are folklore-prone; each of these is dated to the DAY by an instrument's own
37
+ # commencement clause, and each replaces a vaguer number in circulation):
38
+ #
39
+ # * 1 APRIL 1976 — the current registration-number guidelines. Not folklore:
40
+ # BEK 663/2025 § 72, stk. 4, nr. 4 says a replacement plate is not issued
41
+ # where the number does not follow "de retningslinjer for udformning af
42
+ # registreringsnumre, der har været gældende siden den 1. april 1976", and
43
+ # §§ 70, stk. 3 and 75, stk. 1 both cut at the same day. Three independent
44
+ # references inside one instrument.
45
+ # * 12 OCTOBER 2009 — the EU-band plate. BEK 633/2009 § 100: "Bekendtgørelsen
46
+ # træder i kraft den 1. juli 2009 bortset fra § 69, stk. 5, der træder i
47
+ # kraft den 12. oktober 2009", and § 69, stk. 5 IS the EU-symbol chooser.
48
+ # SKAT's own catalogue page is headed "Aktuelle EU-nummerplader pr. 12.
49
+ # oktober 2009". The commonly repeated "2009" and "July 2009" are both
50
+ # wrong for the band: 1 July 2009 is when the rest of that bekendtgørelse
51
+ # commenced, and the band clause was carved out by ninety-nine days.
52
+ # * 6 JUNE 2012 — the day per-vehicle-type number blocks were consolidated.
53
+ # BEK 504/2012 § 118: "Bekendtgørelsen træder i kraft den 6. juni 2012",
54
+ # and SKAT dated its complete plate catalogue "pr. 06.06.2012" to the same
55
+ # day. Danish Wikipedia says the digital register came in "i 2011" and
56
+ # English Wikipedia says "2012"; the instrument says 6 June 2012.
57
+ # * 1 APRIL 2011 — the historic-plate eligibility cut moved from before
58
+ # 1 April 1958 to before 1 April 1976. BEK 811/2010 § 103, stk. 3: "§ 79
59
+ # har virkning fra den 1. april 2011. Indtil da finder § 76 i bekendt-
60
+ # gørelse nr. 633 af 26. juni 2009 anvendelse." Two historic series, not
61
+ # one, and the boundary is a virkningsbestemmelse rather than the
62
+ # bekendtgørelse's own commencement — exactly the trap the wave is about.
63
+ #
64
+ # WHAT THE INSTRUMENT DOES *NOT* SAY, RECORDED SO NOBODY INFERS IT
65
+ #
66
+ # * NO DIMENSIONS. Not one millimetre of plate geometry appears in BEK
67
+ # 663/2025. The only millimetres in it belong to the
68
+ # LANDEKENDINGSMÆRKE — the oval distinguishing sign — and § 37, which
69
+ # prescribes it (at least 175x115 mm, letters at least 80 mm high, 10 mm
70
+ # strokes), is addressed to FOREIGN vehicles in Denmark, not to Danish
71
+ # vehicles abroad. It is not a plate either way.
72
+ # * NO COLOURS, with one exception. § 76, stk. 1 requires diplomatic vehicles
73
+ # to be issued plates "hvor registreringsnummeret vises på en blå
74
+ # baggrund", and § 76, stk. 2 lets Skatteforvaltningen dispense and issue
75
+ # white ones instead. Every other colour in this file — the white plate's
76
+ # red border, the yellow goods-vehicle plate, the yellow/white papegøje-
77
+ # plade, the red-on-white prøveskilt — comes from SKAT's catalogue, which
78
+ # names colours in WORDS ("hvid/sort/rød") and never gives a value.
79
+ # Consequently EVERY hex below is `hex_basis: observed` and indicative.
80
+ # * NO FONT. No typeface is named or drawn anywhere in the instrument, so
81
+ # per PRD-PLATES §6 there is no licensable font to clear and no statutory
82
+ # Schriftmuster to derive glyphs from; the schematic fallback applies.
83
+ # * NO PUBLISHED SERIES REGISTER. § 68, stk. 3 delegates: "Skatteforvaltningen
84
+ # kan inddele registreringsnumre i serier efter køretøjers art eller
85
+ # anvendelse." The delegation is primary; the resulting division is
86
+ # published only in SKAT's plate catalogue, not in any instrument. That is
87
+ # why plates/_decode/dk-serial-blocks.yml exists and why its pre-2012 rows
88
+ # are tiered below its post-2012 rows.
89
+ #
90
+ # THE COLOUR-CODED TAX CLASSES — the distinctive Danish fact, stated from the
91
+ # instrument rather than from the enthusiast web. The bekendtgørelse does not
92
+ # say "yellow" or "parrot"; what it does is establish the three REGISTERED
93
+ # USES that the colours track, and name the parrot plate once:
94
+ # * § 85, stk. 1 — a vare- or lastbil of not more than 4 t "registreret til
95
+ # udelukkende erhvervsmæssig brug" must carry the owner's CVR number and
96
+ # name on both sides. That is the yellow-plate category.
97
+ # * § 82, stk. 1 — a vare- or lastbil of not more than 4 t "registreret til
98
+ # privat eller til blandet privat og erhvervsmæssig brug, jf. § 2 a i lov
99
+ # om vægtafgift af motorkøretøjer m.v." must carry a rear-window mærke.
100
+ # * § 82, stk. 2 — that mærke duty does NOT apply to such a bil "registreret
101
+ # første gang ... efter den 31. december 2008", nor to one first registered
102
+ # between 3 June 1998 and 1 January 2009 "hvis bilen efter den 31. december
103
+ # 2008 er registreret med nummerpladen for vare- og lastbiler, der er
104
+ # anmeldt til privat eller til blandet privat og erhvervsmæssig brug
105
+ # (papegøjenummerplade)".
106
+ # So the sticker regime ran 3 June 1998 - 31 December 2008 and the PLATE took
107
+ # over on 1 January 2009, both dates from the instrument's own words. The
108
+ # enabling power is § 1, nr. 9 of lov nr. 1338 af 19/12/2008: "Skatteministeren
109
+ # kan, for at styrke håndhævelsen af skatte- eller miljølovgivningen, fastsætte
110
+ # regler om mærkning af køretøjer med særlige nummerplader eller mærkater."
111
+ #
112
+ # SEPARATOR POLICY: the printed gaps on a Danish plate are GAPS, not glyphs —
113
+ # no Danish instrument prescribes any separator character. Per PRD-PLATES §2.6
114
+ # they are written as the emitted SPACE in `pattern` and as an optional " ?" in
115
+ # every regex. SKAT's catalogue renders the five-digit car number as two groups
116
+ # ("AF 22 454"), which is why the canonical printed form here is "LL 99 999".
117
+ #
118
+ # REGEX POLICY: `format.regex` is the lint-round-trippable regex over the full
119
+ # A-Z/0-9 alphabet in printed form; `format.regex_strict` carries the issued
120
+ # letter alphabet and the number block where those are sourced. There is no
121
+ # `regex_statutory` anywhere in this file: the Danish statute (§ 68, stk. 2 —
122
+ # two Latin letters and one to five Arabic numerals) is WIDER than every
123
+ # individual series, but it is the union of the series rather than a legal
124
+ # outer bound on any one of them, so it is recorded once in `common.number_rule`
125
+ # instead of being smuggled into a per-series twin.
126
+ #
127
+ # SCOPE, FROM THE INSTRUMENT: § 1, stk. 4 — "I denne bekendtgørelse bruges
128
+ # betegnelsen »her i landet« om Kongeriget Danmark, bortset fra Færøerne og
129
+ # Grønland." The Faroe Islands (ISO FO) and Greenland (ISO GL) are therefore
130
+ # OUTSIDE this file by the instrument's own definition, not by our omission;
131
+ # they are separate jurisdictions for this dataset and neither is covered here.
132
+ jurisdiction: dk
133
+ authority:
134
+ name: Skatteforvaltningen (Motorstyrelsen) — Køretøjsregisteret
135
+ url: "https://motorst.dk/borger/nummerplader"
136
+ binding: vehicle
137
+ binding_note: >-
138
+ `vehicle`, with one sourced exception. BEK 663/2025 § 67, stk. 3: "Nummer-
139
+ pladen tilhører staten" — the plate is state property attached to the
140
+ vehicle's registration, and the registered owner must surrender it when the
141
+ vehicle is deregistered. The exception is the ønskenummerplade, which tracks
142
+ the RIGHTS-HOLDER (§ 74, stk. 5: the number "kan inden for rettighedsperioden
143
+ overføres til et andet køretøj, som registreres til den, der har retten");
144
+ that series carries `binding: owner` of its own.
145
+ instrument:
146
+ citation: "Bekendtgørelse nr. 663 af 10. juni 2025 om registrering af køretøjer (registreringsbekendtgørelsen), som ændret ved BEK nr 1826 af 29/12/2025"
147
+ in_force: "2025-06-16"
148
+ ministry: Skatteministeriet
149
+ enabling_statute: "Lov om registrering af køretøjer, jf. lovbekendtgørelse nr. 179 af 22. februar 2023 — recited in the indledning of BEK 663/2025: '§ 1, stk. 3, § 2, stk. 5, § 5, § 6, stk. 2, § 7, stk. 2-5 og 7, § 7 e, stk. 4, § 7 h, § 14, stk. 2 og 3, § 15, stk. 5, § 17, stk. 2, og § 20, stk. 2'"
150
+ replaces: "BEK nr 866 af 19/06/2023 om registrering af køretøjer (out of force 2025-06-16)"
151
+ source: "https://www.retsinformation.dk/eli/lta/2025/663 # full text via the ELI XML embodiment /eli/lta/2025/663/dan/xml; ELI metadata gives date_document 2025-06-10, date_publication 2025-06-16, in_force; accessed 2026-08-02"
152
+
153
+ # ---------------------------------------------------------------------------
154
+ # Jurisdiction-wide facts, cited once and referenced per series.
155
+ # ---------------------------------------------------------------------------
156
+ common:
157
+ number_rule:
158
+ text: >-
159
+ BEK 663/2025 § 68, stk. 2, verbatim: "Nummerpladen har, bortset fra
160
+ nummerplader som nævnt i stk. 4, nr. 2, 3 og 5, et registreringsnummer,
161
+ der består af to latinske bogstaver efterfulgt af et til fem arabiske
162
+ tal." The carve-outs are the ønskenummerplade (nr. 2), the historic plate
163
+ (nr. 3) and the prøveskilt (nr. 5) — each of which has its own grammar
164
+ and its own series below.
165
+ digit_count_note: >-
166
+ ONE TO FIVE, not five. Danish Wikipedia says "to bogstaver og tre til fem
167
+ cifre" and English Wikipedia says "two letters and five digits"; the
168
+ instrument says one to five, and SKAT's own catalogue shows two-digit
169
+ prøveskilt numbers (10-99), three-digit moped and tractor numbers
170
+ (100-999) and four-digit trailer numbers (1.000-9.999). The five-digit
171
+ form is the CAR form, not the rule. Each series below carries the digit
172
+ count its own number block dictates.
173
+ series_delegation: >-
174
+ § 68, stk. 3: "Skatteforvaltningen kan inddele registreringsnumre i serier
175
+ efter køretøjers art eller anvendelse." The power to divide numbers into
176
+ series by vehicle kind or use is primary; the division itself is published
177
+ only in SKAT's plate catalogue — see plates/_decode/dk-serial-blocks.yml.
178
+ sources:
179
+ - "https://www.retsinformation.dk/eli/lta/2025/663/dan/xml # § 68, stk. 2-4; § 69 (how many plates and where); accessed 2026-08-02"
180
+ plate_types_catalogue:
181
+ text: >-
182
+ SKAT, "Liste over alle pladetyper i Danmark pr. 06.06.2012" — the
183
+ authority's own complete plate-stock poster, laid out as NONE EU and EU
184
+ columns with, per row, an internal stock number (PSTK), an internal item
185
+ number, the Danish designation, the size, the colour words, the number
186
+ range and a rendering of the format. This is the source for every
187
+ dimension, every colour word and every post-2012 number range in this
188
+ file. It is dated to the same day BEK 504/2012 came into force.
189
+ dimension_caveat: >-
190
+ The poster's size column is headed "Størrelse centimeter højde x længde"
191
+ but its values are MILLIMETRES height x length (120x504, 165x240,
192
+ 125x145, 207x504). The header is an error in the source; it is recorded
193
+ here rather than silently corrected, and this file writes the values as
194
+ w/h in mm in the dataset's own order.
195
+ colour_convention: >-
196
+ The poster's colour cells hold two to four words. Read as
197
+ background/characters/border, they reproduce the known plates exactly and
198
+ are corroborated by the one colour statement the instrument does make:
199
+ the diplomatic row reads "blå/hvid blå" and § 76, stk. 1 requires the
200
+ number to appear "på en blå baggrund". The reading is an INFERENCE from
201
+ the cell order, corroborated, and is flagged as such on every design
202
+ below rather than presented as the poster's own words.
203
+ sources:
204
+ - "https://web.archive.org/web/20170917063422/https://www.skat.dk/getFiles.aspx?Id=e6c2c7e8-e7a7-4b5e-b15e-4b67e27d3f66&name=planche_nummerplader_2012.pdf # SKAT, 'Liste over alle pladetyper i Danmark pr. 06.06.2012'; archived capture 2017-09-17 (the live skat.dk copy is gone); accessed 2026-08-02"
205
+ - "https://web.archive.org/web/20110716080639/http://www.skat.dk/SKAT.aspx?oId=1826647 # skat.dk 'Personbil - EU': Serie 61, størrelse 120 x 504, farve Hvid/sort/rød, nummerrække 20.000-59.999, format '@@ ## ###' with the authority's own key (@ = bogstav, # = tal, $ = vilkårligt, Dkåå = Dk + årstal i rød kasse); page footer 'Senest redigeret 02 sep 2009'; archived capture 2011-07-16; accessed 2026-08-02"
206
+ - "https://web.archive.org/web/20120127070602/http://www.skat.dk/SKAT.aspx?oId=1826638 # skat.dk 'Nummerplader med EU-symbol', headed 'Aktuelle EU-nummerplader pr. 12. oktober 2009', indexing the twenty-odd EU plate types; archived capture 2012-01-27; accessed 2026-08-02"
207
+ eu_band:
208
+ side: left
209
+ content: eu-stars+DK
210
+ optional: true
211
+ rule: >-
212
+ THE BAND IS A CHOICE, NOT A MANDATE, AND IT STILL IS. BEK 663/2025 § 68,
213
+ stk. 5: "Den, der anmelder et køretøj til indregistrering, vælger, om
214
+ nummerpladen skal vise EU-symbolet (EU-nummerplade). Grænsenummerplade og
215
+ diplomatnummerplade udfærdiges dog kun med EU-symbolet. Historisk
216
+ nummerplade og nummerplade til en knallert eller traktor udfærdiges ikke
217
+ med EU-symbolet." So: compulsory on border and diplomatic plates,
218
+ forbidden on historic, moped and tractor plates, optional everywhere else
219
+ — which means a Danish plate WITHOUT a band is not evidence of age.
220
+ start: "2009-10-12"
221
+ start_evidence: >-
222
+ BEK 633/2009 § 100, verbatim: "Bekendtgørelsen træder i kraft den 1. juli
223
+ 2009 bortset fra § 69, stk. 5, der træder i kraft den 12. oktober 2009."
224
+ § 69, stk. 5 of that bekendtgørelse is word-for-word the chooser now in
225
+ § 68, stk. 5. The band clause was carved out of the general 1 July 2009
226
+ commencement and given its own day.
227
+ corroboration: >-
228
+ SKAT's catalogue index page is headed "Aktuelle EU-nummerplader pr. 12.
229
+ oktober 2009". English Wikipedia reports the same day from a Danish EU
230
+ information-centre page ("expected in 2008, but was thereafter delayed to
231
+ 12 October 2009"); that is corroboration of an instrument date, not the
232
+ source of it.
233
+ national_sign_alternative: >-
234
+ CORRECTED DIRECTION, RECORDED BECAUSE IT IS EASY TO GET BACKWARDS. The
235
+ oval distinguishing-sign geometry in BEK 663/2025 is § 37, and § 37 is
236
+ addressed to FOREIGN vehicles in Denmark rather than to Danish vehicles
237
+ abroad: "Et udenlandsk motorkøretøj og et udenlandsk påhængskøretøj til
238
+ et motorkøretøj skal bag på vise registreringslandets
239
+ landekendingsmærke", the mark being one to three Latin letters painted
240
+ black on a white ellipse, letters at least 80 mm high with strokes at
241
+ least 10 mm, the ellipse at least 175x115 mm on a motorcycle and at
242
+ least 240x145 mm elsewhere for a three-letter mark, reducible to
243
+ 175x115 mm for one or two letters. The duty on a BANDLESS DANISH plate
244
+ to carry a "DK" oval when driven abroad is imposed by the destination
245
+ state and by the 1968 Vienna Convention, NOT by this bekendtgørelse;
246
+ English Wikipedia asserts it and cites a motoring-club page. Tagged
247
+ secondary-wikipedia; the § 37 geometry is given because it is what the
248
+ Danish instrument actually prescribes.
249
+ hex_basis: observed
250
+ sources:
251
+ - "https://www.retsinformation.dk/eli/lta/2009/633/dan/xml # § 69, stk. 5 (the chooser) and § 100 (the split commencement, 1 July 2009 / 12 October 2009); accessed 2026-08-02"
252
+ - "https://www.retsinformation.dk/eli/lta/2025/663/dan/xml # § 68, stk. 5 as it stands today, incl. the compulsory/forbidden lists; § 37 (the landekendingsmærke geometry — for FOREIGN vehicles in Denmark); accessed 2026-08-02"
253
+ - "https://web.archive.org/web/20120127070602/http://www.skat.dk/SKAT.aspx?oId=1826638 # 'Aktuelle EU-nummerplader pr. 12. oktober 2009'; accessed 2026-08-02"
254
+ charset:
255
+ letters_excluded: ["I", "Q", "Æ", "Ø", "Å"]
256
+ letters_issued: [A, B, C, D, E, F, G, H, J, K, L, M, N, O, P, R, S, T, U, V, W, X, Y, Z]
257
+ second_letter_extra_exclusion: ["O"]
258
+ blocked_combinations: [BH, BU, CC, CD, DK, DU, EU, KZ, MU, PU, PY, SS, UD, UN, VC]
259
+ basis: secondary-wikipedia
260
+ note: >-
261
+ NO DANISH INSTRUMENT RESTRICTS THE LETTERS. Neither BEK 663/2025 nor any
262
+ of its ancestors names an excluded letter or an excluded combination, and
263
+ SKAT publishes no alphabet. The restriction is reported by Danish
264
+ Wikipedia, which cites the enthusiast register nrpl.dk for it: the letters
265
+ I, Q, Æ, Ø and Å are not used on ordinary plates; O is used only as the
266
+ FIRST letter of a pair; and fifteen combinations are skipped as
267
+ unsuitable. Æ, Ø and Å are outside this dataset's serial alphabet
268
+ (_meta/separators.yml) in any case, so only I and Q bite everywhere, plus
269
+ O in second position. That — and nothing else — is what `regex_strict`
270
+ encodes on the ordinary series.
271
+ blocked_note: >-
272
+ The fifteen blocked pairs are deliberately NOT compiled into any regex,
273
+ following the nl.yml and se.yml precedent: a blocked combination is a
274
+ NON-ISSUANCE rule, not a well-formedness rule. Danish Wikipedia adds that
275
+ more than a hundred further pairs used by the individual police districts
276
+ before the Centralregisteret for Motorkøretøjer took over registration in
277
+ the late 1960s are also skipped; that list is not reproduced here and no
278
+ claim is made about its membership.
279
+ reuse_rule: >-
280
+ Danish numbers are RE-USED, so no letter block gives an age. Danish
281
+ Wikipedia reports that on the digital register's introduction allocation
282
+ restarted at AA and that combinations free for at least twelve years are
283
+ recycled. The twelve years is corroborated by the instrument: BEK
284
+ 663/2025 § 2, stk. 6 — "Skatteforvaltningen kan slette registrerede
285
+ oplysninger om et køretøj 12 år efter, at køretøjet er afmeldt, hvis
286
+ køretøjet ikke siden da er indregistreret på ny i Køretøjsregisteret."
287
+ sources:
288
+ - "https://da.wikipedia.org/wiki/Nummerplade # 'På almindelige nummerplader anvendes bogstaverne I, Q, Æ, Ø og Å ikke. Bogstavet O bruges kun som første bogstav i en kombination.' and the fifteen blocked pairs; the article cites nrpl.dk; secondary-wikipedia; accessed 2026-08-02"
289
+ - "https://www.retsinformation.dk/eli/lta/2025/663/dan/xml # § 2, stk. 6 — the twelve-year deletion rule that the re-use claim rests on; accessed 2026-08-02"
290
+ registration_scope:
291
+ text: >-
292
+ BEK 663/2025 § 3, stk. 1 lists what must be registered and plated before
293
+ use on a road: motorkøretøj; traktor or blokvogn; knallert; påhængs- or
294
+ sættevogn to a registrable vehicle; campingvogn; other påhængsredskab
295
+ capable of being towed above 30 km/h; and a motorredskab fitted for
296
+ carrying goods. § 3, stk. 3 adds the moped cut-off (below), and § 3,
297
+ stk. 4 the municipal plate (see the GAPS block at the end of this file).
298
+ source: "https://www.retsinformation.dk/eli/lta/2025/663/dan/xml # § 3; accessed 2026-08-02"
299
+ design_sources:
300
+ hex_note: >-
301
+ EVERY hex in this file is `hex_basis: observed` and INDICATIVE. No Danish
302
+ instrument gives an RAL, a CIE box or an RGB value for any plate colour,
303
+ and SKAT's catalogue names colours only in words — "hvid", "gul", "sort",
304
+ "rød", "blå". The values below were read off SKAT's own plate renderings
305
+ in that catalogue, which are flat illustrations rather than measured
306
+ swatches. This is the posture se.yml records for Sweden and de.yml for
307
+ the German "grünes Kennzeichen"; it is not a defect in the pass.
308
+ font_note: >-
309
+ NO TYPEFACE IS MANDATED and no statutory drawing exists. Per PRD-PLATES
310
+ §6 the render layer therefore has neither a licence to clear nor a
311
+ Schriftmuster to derive from; the schematic fallback applies and the gap
312
+ is recorded here rather than papered over with a lookalike TTF.
313
+ mounting_rules: >-
314
+ BEK 663/2025 § 70: the plate is mounted outside the vehicle, visible and
315
+ easily legible, vertical or near-vertical, in a plane perpendicular to
316
+ the longitudinal axis. § 70, stk. 3: plates on a person- or varebil —
317
+ "bortset fra nummerplader fra før den 1. april 1976 og historiske
318
+ nummerplader" — must be fixed with at least two screws or bolts, capped
319
+ in the same colour as the plate at that point, the caps removable only
320
+ with a tool, and no decorative screws. § 70, stk. 4: the plate's form may
321
+ not be altered, no stickers, no frame covering any part of the plate
322
+ inside the embossed edge. § 70, stk. 6: the rear plate is lit at
323
+ lighting-up time, except on a knallert.
324
+ plate_count: >-
325
+ BEK 663/2025 § 69: two plates, front and rear, except — one rear plate
326
+ only on a registered motorcykel, knallert or påhængskøretøj (never on the
327
+ side); one FRONT plate only on a godkendt traktor; and an EXTRA rear
328
+ plate where the rear plate is wholly or partly covered by load, mounted
329
+ on the load or on a carrier so that it can be read directly. That extra
330
+ plate is SKAT's "3. nummerplade (cykelplade)" and carries the vehicle's
331
+ own number; it is recorded on the standard series below as a plate
332
+ variant rather than as a series of its own, because it is not a separate
333
+ issuance system.
334
+ source: "https://www.retsinformation.dk/eli/lta/2025/663/dan/xml # §§ 69-70; accessed 2026-08-02"
335
+
336
+ series:
337
+
338
+ # =========================================================================
339
+ # THE STANDARD PLATE. White ground, black characters, red border, two
340
+ # letters and five digits — the plate on a Danish private car since the
341
+ # 1 April 1976 numbering guidelines.
342
+ # =========================================================================
343
+ - id: dk-standard-1976
344
+ class: standard
345
+ categories: [car]
346
+ period: { start: 1976 }
347
+ period_evidence: statutory-date
348
+ period_note: >-
349
+ 1976 is 1 APRIL 1976, and it is dated by the instrument in force today
350
+ rather than by an enthusiast page: BEK 663/2025 § 72, stk. 4, nr. 4
351
+ refuses a replacement plate where the number does not follow "de
352
+ retningslinjer for udformning af registreringsnumre, der har været
353
+ gældende siden den 1. april 1976"; § 70, stk. 3 exempts "nummerplader fra
354
+ før den 1. april 1976" from the two-screw rule; § 75, stk. 1 opens the
355
+ historic plate to vehicles "registreret første gang før den 1. april
356
+ 1976". The instrument that ENACTED the 1976 guidelines was not reached —
357
+ see the GAPS block — so this is `statutory-date` (a date stated in a
358
+ statute) and not `instrument-in-force` (a commencement clause read).
359
+ matching: strict
360
+ format:
361
+ pattern: "LL 99 999"
362
+ regex: '\A[A-Z]{2} ?\d{2} ?\d{3}\z'
363
+ regex_strict: '\A[ABCDEFGHJKLMNOPRSTUVWXYZ][ABCDEFGHJKLMNPRSTUVWXYZ] ?(?:[1-6]\d|7[0-5]|7[89]|8\d|9[0-7]) ?\d{3}\z'
364
+ characters: 7
365
+ charset:
366
+ letters_excluded: ["I", "Q", "Æ", "Ø", "Å"]
367
+ second_letter_extra_exclusion: ["O"]
368
+ basis: secondary-wikipedia
369
+ notes: >-
370
+ See common.charset. The alphabet is NOT in any instrument; it is
371
+ reported by Danish Wikipedia from nrpl.dk and is tagged
372
+ secondary-wikipedia wherever it appears. `regex_strict` also carries
373
+ the NUMBER BLOCK — 10.000-75.999 and 78.000-97.999 — which IS primary,
374
+ from SKAT's catalogue row "Personbiler - Hvid rektangulær". It
375
+ excludes 76.000-77.999 (diplomatic) and 98.000-99.999 (taxi), which
376
+ are their own series below.
377
+ progression: >-
378
+ NO AGE SIGNAL, NO GEOGRAPHY. The two letters are a serial, not a
379
+ region: the pre-1958 single letter was the county marker and it is long
380
+ gone. Numbers freed by deregistration are re-used (common.charset.
381
+ reuse_rule; twelve years, corroborated by § 2, stk. 6), and allocation
382
+ restarted from AA when the digital register came in, so a letter pair
383
+ dates nothing. The one thing a Danish number still encodes is VEHICLE
384
+ KIND, and only through its digit block — see
385
+ plates/_decode/dk-serial-blocks.yml, and note that the blocks were
386
+ consolidated on 6 June 2012.
387
+ separator_note: >-
388
+ The printed gaps are gaps, not glyphs: no Danish instrument prescribes
389
+ a separator character. SKAT's catalogue renders the five-digit number
390
+ as two groups ("AF 22 454"), which is the canonical printed form used
391
+ here; the regex accepts the space or its absence at both positions per
392
+ PRD-PLATES §2.6.
393
+ design:
394
+ plate: { w: 504, h: 120, unit: mm }
395
+ plate_variants:
396
+ - { w: 240, h: 165, unit: mm, note: "'kvadratisk' — the square rear plate; SKAT stocks it as its own type ('Personbiler - Hvid kvadratisk', 120x504/165x240, i.e. a 504x120 front plate with a 240x165 rear)" }
397
+ - { w: 240, h: 165, unit: mm, note: "'amerikaner' — SKAT type 76/77 'Personbiler - Hvid amerikaner', for US-market mountings" }
398
+ - { w: 504, h: 120, unit: mm, note: "'3. nummerplade (cykelplade)' — the extra rear plate required by § 69, stk. 4 where load or a cycle carrier covers the rear plate. Carries the vehicle's own number; SKAT colour cell 'hvid/rød'" }
399
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, spec: hvid }
400
+ foreground: "#000000"
401
+ border: { color: "#C8102E", hex_basis: observed, spec: rød, note: "the red border is the Danish plate's signature and is the third word in SKAT's colour cell 'hvid/sort/rød'; no instrument mentions it" }
402
+ band: { side: left, color: "#003399", content: eu-stars+DK, hex_basis: observed, optional: true, note: "OPTIONAL — chosen at issuance under § 68, stk. 5; available since 12 October 2009 (common.eu_band). Absence of a band is not evidence of age" }
403
+ emblem: { present: false }
404
+ rear_differs: false
405
+ display: "two plates, front and rear (§ 69, stk. 1)"
406
+ extra_markings: "a security hologram is fitted to new plates; it is not mentioned in the instrument and is recorded as an observed physical feature, not a sourced specification"
407
+ region_encoding: "plates/_decode/dk-serial-blocks.yml"
408
+ region_encoding_file: dk-serial-blocks.yml
409
+ region_encoding_note: >-
410
+ NOT geography — Denmark encodes VEHICLE KIND in the digit block and has
411
+ encoded no region since the single-letter county plates ended. The decode
412
+ file is named for what it actually decodes.
413
+ sources:
414
+ - "https://www.retsinformation.dk/eli/lta/2025/663/dan/xml # § 68, stk. 2 (two Latin letters + one to five Arabic numerals); § 69, stk. 1 (two plates); § 70 (mounting); § 72, stk. 4, nr. 4 and § 70, stk. 3 and § 75, stk. 1 (the 1 April 1976 line); accessed 2026-08-02"
415
+ - "https://web.archive.org/web/20170917063422/https://www.skat.dk/getFiles.aspx?Id=e6c2c7e8-e7a7-4b5e-b15e-4b67e27d3f66&name=planche_nummerplader_2012.pdf # SKAT 'Liste over alle pladetyper i Danmark pr. 06.06.2012', rows 13/14 'Personbiler - Hvid rektangulær' 120x504 hvid/sort/rød 10.000-75.999 og 78.000-97.999, rows 15/16 kvadratisk, rows 76/77 amerikaner, rows 29/30 '3. nummerplader (cykelplade)'; accessed 2026-08-02"
416
+ - "https://web.archive.org/web/20110716080639/http://www.skat.dk/SKAT.aspx?oId=1826647 # skat.dk 'Personbil - EU' Serie 61: 120 x 504, Hvid/sort/rød, 20.000-59.999, format '@@ ## ###' — the PRE-2012 car block, from the authority; accessed 2026-08-02"
417
+ - "https://da.wikipedia.org/wiki/Nummerplade # secondary-wikipedia: the issued letter alphabet (I, Q, Æ, Ø, Å unused; O first-position only), the fifteen blocked pairs, and the restart-at-AA / twelve-year re-use practice; accessed 2026-08-02"
418
+ notes: >-
419
+ THE DANISH STANDARD PLATE. Two things about it are unusual and both are
420
+ sourced. First, the SIZE: 504 x 120 mm, not the 520 x 110 mm that the
421
+ rest of Europe uses and that both Wikipedia infoboxes assert — SKAT's own
422
+ catalogue says "120x504" in every white-plate row, and the archived
423
+ skat.dk series page says "120 x 504" for Serie 61. The 520 x 110 figure
424
+ is corrected away here. Second, the EU BAND IS OPTIONAL and has been
425
+ since it appeared: § 68, stk. 5 gives the choice to whoever registers the
426
+ vehicle, so a bandless Danish plate may be brand new. Colour is white
427
+ ground / black characters / red border throughout; the red border is what
428
+ makes the plate recognisable and it appears in no instrument.
429
+ DELIBERATE NARROWNESS OF `categories`: SKAT names this type "Personbiler",
430
+ so this series claims cars and nothing else. Vans and lorries of not more
431
+ than 4 t are on the yellow or the parrot plate according to their
432
+ registered use; what plate a bus or a lorry ABOVE 4 t carries is not
433
+ established by any source reached in this pass and is filed as a gap
434
+ rather than guessed at.
435
+
436
+ # =========================================================================
437
+ # THE YELLOW GOODS-VEHICLE PLATE — "gulpladebil". Exclusively commercial use;
438
+ # private use of the vehicle is a tax offence, which is the whole point of
439
+ # the colour.
440
+ # =========================================================================
441
+ - id: dk-van-commercial-yellow
442
+ class: standard
443
+ categories: [van, truck]
444
+ period: { start: 1976 }
445
+ period_evidence: statutory-date
446
+ period_caveat: >-
447
+ READ THIS BEFORE USING THE START YEAR. 1976 is the date of the NUMBERING
448
+ guidelines that this plate's number follows (§ 72, stk. 4, nr. 4 — see
449
+ dk-standard-1976), NOT a sourced date for the yellow COLOUR. No Danish
450
+ instrument specifies plate colours at all, so nothing dates the yellow
451
+ plate's introduction; the earliest evidence of it reached in this pass is
452
+ SKAT's own catalogue, which shows it in 2009 and again in 2012. Treat the
453
+ colour as attested from 2009 and the number format from 1976. This is a
454
+ known, deliberate gap, not an oversight.
455
+ matching: strict
456
+ format:
457
+ pattern: "LL 99 999"
458
+ regex: '\A[A-Z]{2} ?\d{2} ?\d{3}\z'
459
+ regex_strict: '\A[ABCDEFGHJKLMNOPRSTUVWXYZ][ABCDEFGHJKLMNPRSTUVWXYZ] ?(?:[1-6]\d|7[0-5]|7[89]|8\d|9[0-7]) ?\d{3}\z'
460
+ characters: 7
461
+ charset:
462
+ basis: secondary-wikipedia
463
+ notes: "same alphabet and same number block as dk-standard-1976; see common.charset"
464
+ design:
465
+ plate: { w: 504, h: 120, unit: mm }
466
+ plate_variants:
467
+ - { w: 240, h: 165, unit: mm, note: "'kvadratisk' rear plate — SKAT 'Vare-lastbiler - kvadratisk (gul)'" }
468
+ background: { color: "#FFCC00", finish: retroreflective, hex_basis: observed, spec: gul }
469
+ foreground: "#000000"
470
+ border: { color: "#000000", hex_basis: observed, spec: sort, note: "SKAT colour cell 'gul/sort/sort' — a BLACK border, unlike the white plate's red one" }
471
+ band: { side: left, color: "#003399", content: eu-stars+DK, hex_basis: observed, optional: true }
472
+ emblem: { present: false }
473
+ rear_differs: false
474
+ tax_class:
475
+ registered_use: "udelukkende erhvervsmæssig brug"
476
+ instrument_hook: >-
477
+ BEK 663/2025 § 85, stk. 1 — a vare- or lastbil of not more than 4 t
478
+ "registreret til udelukkende erhvervsmæssig brug" must display the
479
+ registered owner's CVR number and name (or an unambiguous logo) on both
480
+ sides, in a clearly contrasting colour, letters at least 3 cm high, not
481
+ on removable signs. This is the instrument's handle on the yellow-plate
482
+ category; the instrument does not itself say "yellow".
483
+ note: >-
484
+ Registration tax and VAT treatment follow from the registered use under
485
+ registreringsafgiftsloven and lov om vægtafgift af motorkøretøjer m.v.
486
+ This file records the REGISTERED USE, which is what the plate colour
487
+ tracks, and does not restate rates — rates change and are outside
488
+ PRD-PLATES §2.5's scope.
489
+ region_encoding: "plates/_decode/dk-serial-blocks.yml"
490
+ region_encoding_file: dk-serial-blocks.yml
491
+ sources:
492
+ - "https://web.archive.org/web/20170917063422/https://www.skat.dk/getFiles.aspx?Id=e6c2c7e8-e7a7-4b5e-b15e-4b67e27d3f66&name=planche_nummerplader_2012.pdf # SKAT rows 17/18 'Vare-lastbiler - rektangulære (gul)' 120x504 gul/sort 10.000-75.999 og 78.000-97.999, rows 19/20 kvadratisk; accessed 2026-08-02"
493
+ - "https://www.retsinformation.dk/eli/lta/2025/663/dan/xml # § 85 (CVR marking on exclusively-commercial vans and lorries up to 4 t); § 68, stk. 2; accessed 2026-08-02"
494
+ notes: >-
495
+ THE GULPLADE. Yellow ground, black characters, BLACK border — the border
496
+ colour is the quickest way to tell a Danish commercial plate from a
497
+ private one at a distance, and it is the third word in SKAT's colour cell.
498
+ The plate marks a REGISTERED USE, not a body type: the same van is a
499
+ yellow-plate vehicle, a parrot-plate vehicle or neither depending on what
500
+ it was registered for. Danish enforcement of the "private use is illegal"
501
+ rule is what the CVR-marking duty in § 85 exists to support.
502
+
503
+ # =========================================================================
504
+ # THE PAPEGØJEPLADE — half yellow, half white. Vans and lorries up to 4 t
505
+ # registered for private, or mixed private and commercial, use.
506
+ # =========================================================================
507
+ - id: dk-van-parrot-2009
508
+ class: standard
509
+ categories: [van, truck]
510
+ period: { start: 2009 }
511
+ period_evidence: statutory-date
512
+ period_note: >-
513
+ 1 JANUARY 2009, from the instrument's own words rather than from the
514
+ enthusiast web. BEK 663/2025 § 82, stk. 2 disapplies the rear-window
515
+ mærke for a vare- or lastbil first registered "efter den 31. december
516
+ 2008", and for one first registered between 3 June 1998 and 1 January
517
+ 2009 that has since been re-registered "med nummerpladen for vare- og
518
+ lastbiler, der er anmeldt til privat eller til blandet privat og
519
+ erhvervsmæssig brug (papegøjenummerplade)". The sticker regime therefore
520
+ ran 3 June 1998 - 31 December 2008 and the PLATE took over on 1 January
521
+ 2009. The enabling power is § 1, nr. 9 of lov nr. 1338 af 19. december
522
+ 2008, which inserts a new stk. 6 into § 7 of lov om registrering af
523
+ køretøjer: "Skatteministeren kan, for at
524
+ styrke håndhævelsen af skatte- eller miljølovgivningen, fastsætte regler
525
+ om mærkning af køretøjer med særlige nummerplader eller mærkater."
526
+ `statutory-date` rather than `instrument-in-force`: the 1 January 2009
527
+ line is stated in the registreringsbekendtgørelse but is not that
528
+ bekendtgørelse’s own commencement. NOT RE-DERIVED: the stykke numbering
529
+ of § 7 in the consolidated LBK nr 179 af 22/02/2023 may differ from the
530
+ 2008 insertion, and no claim is made that it does not.
531
+ matching: strict
532
+ format:
533
+ pattern: "LL 99 999"
534
+ regex: '\A[A-Z]{2} ?\d{2} ?\d{3}\z'
535
+ regex_strict: '\A[ABCDEFGHJKLMNOPRSTUVWXYZ][ABCDEFGHJKLMNPRSTUVWXYZ] ?(?:[1-6]\d|7[0-5]|7[89]|8\d|9[0-7]) ?\d{3}\z'
536
+ characters: 7
537
+ charset:
538
+ basis: secondary-wikipedia
539
+ notes: "same alphabet and same number block as dk-standard-1976; see common.charset"
540
+ design:
541
+ plate: { w: 504, h: 120, unit: mm }
542
+ plate_variants:
543
+ - { w: 240, h: 165, unit: mm, note: "'kvadratisk' rear plate — SKAT 'Vare-lastbiler - Papegøje kvadratisk'" }
544
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, spec: "hvid/gul", note: "TWO-TONE: SKAT's colour cell reads 'hvid/gul/sort/sort' — a white field and a yellow field, black characters, black border. Which group sits on which field is OBSERVED from SKAT's own rendering (the yellow field to the left, carrying the letter group, and the white field to the right), not stated by any source; the two-tone fact itself is the catalogue's" }
545
+ background_fields:
546
+ - { part: "letter group", color: "#FFCC00", hex_basis: observed, spec: gul }
547
+ - { part: "digit group", color: "#FFFFFF", hex_basis: observed, spec: hvid }
548
+ foreground: "#000000"
549
+ border: { color: "#000000", hex_basis: observed, spec: sort }
550
+ band: { side: left, color: "#003399", content: eu-stars+DK, hex_basis: observed, optional: true }
551
+ emblem: { present: false }
552
+ rear_differs: false
553
+ tax_class:
554
+ registered_use: "privat eller blandet privat og erhvervsmæssig brug"
555
+ instrument_hook: "BEK 663/2025 § 82, stk. 1-2, citing § 2 a i lov om vægtafgift af motorkøretøjer m.v."
556
+ predecessor_regime: >-
557
+ A REAR-WINDOW STICKER, NOT A PLATE, AND IT IS DATED AT BOTH ENDS.
558
+ Between 3 June 1998 and 31 December 2008 the same vehicles carried a
559
+ mærke issued by the authority and stuck inside the rear window (§ 84:
560
+ on the outside rear where the car has no rear window, has a tinted rear
561
+ window, or is an open-bed pick-up; removed if the car is re-registered
562
+ to another use). Vehicles first registered in that window still carry
563
+ the sticker unless they have since been put on a papegøjeplade. The
564
+ sticker is recorded here as design context; it is not a plate and has
565
+ no series of its own.
566
+ region_encoding: "plates/_decode/dk-serial-blocks.yml"
567
+ region_encoding_file: dk-serial-blocks.yml
568
+ sources:
569
+ - "https://www.retsinformation.dk/eli/lta/2025/663/dan/xml # § 82, stk. 1-2 (the 3 June 1998 / 31 December 2008 / 1 January 2009 lines and the word papegøjenummerplade), §§ 83-84 (the sticker), § 85; accessed 2026-08-02"
570
+ - "https://www.retsinformation.dk/eli/lta/2008/1338/dan/xml # lov nr. 1338 af 19/12/2008, § 1, nr. 9 (new § 7, stk. 6 in lov om registrering af køretøjer): the power to require marking of vehicles 'med særlige nummerplader eller mærkater' to strengthen tax and environmental enforcement — the enabling instrument for this plate; accessed 2026-08-02"
571
+ - "https://web.archive.org/web/20170917063422/https://www.skat.dk/getFiles.aspx?Id=e6c2c7e8-e7a7-4b5e-b15e-4b67e27d3f66&name=planche_nummerplader_2012.pdf # SKAT rows 21/22 'Vare-lastbiler - Papegøje rektangulær' 120x504 hvid/gul/sort/sort, rows 23/24 kvadratisk; accessed 2026-08-02"
572
+ - "https://www.retsinformation.dk/eli/lta/2012/504/dan/xml # BEK 504/2012 § 84, stk. 2 — the same papegøjenummerplade wording, the FIRST appearance of the word in the registreringsbekendtgørelse (it is absent from BEK 633/2009, 811/2010 and 651/2011); accessed 2026-08-02"
573
+ notes: >-
574
+ THE PAPEGØJEPLADE ("parrot plate"), and the reason Danish plates are worth
575
+ modelling at all: the COLOUR ENCODES THE TAX CLASS, not the vehicle. Three
576
+ registered uses, three looks — exclusively commercial is all yellow,
577
+ private or mixed is yellow-and-white, and a car is white. The word appears
578
+ in the instrument exactly once, parenthetically, in § 82, stk. 2, and that
579
+ one parenthesis is what dates the plate to 1 January 2009. Note the
580
+ asymmetry the instrument creates: a van first registered between 3 June
581
+ 1998 and the end of 2008 may still be running on the OLD sticker regime,
582
+ so the absence of a parrot plate on a mixed-use van is not evidence of
583
+ anything.
584
+
585
+ # =========================================================================
586
+ # MOTORCYCLES — the 240 x 165 mm two-row plate.
587
+ # =========================================================================
588
+ - id: dk-motorcycle-1976
589
+ class: motorcycle
590
+ categories: [motorcycle]
591
+ period: { start: 1976 }
592
+ period_evidence: statutory-date
593
+ period_note: "the 1 April 1976 numbering guidelines; see dk-standard-1976"
594
+ matching: strict
595
+ format:
596
+ pattern: "LL 99 999"
597
+ regex: '\A[A-Z]{2} ?\d{2} ?\d{3}\z'
598
+ regex_strict: '\A[ABCDEFGHJKLMNOPRSTUVWXYZ][ABCDEFGHJKLMNPRSTUVWXYZ] ?(?:[1-6]\d|7[0-5]|7[89]|8\d|9[0-7]) ?\d{3}\z'
599
+ characters: 7
600
+ pattern_note: >-
601
+ The plate is TWO-ROW (letters above, digits below). The dataset writes
602
+ the single-line printed form with the emitted space, as everywhere else;
603
+ the two-row layout is a design fact, recorded in `design`.
604
+ charset:
605
+ basis: secondary-wikipedia
606
+ notes: "see common.charset"
607
+ design:
608
+ plate: { w: 240, h: 165, unit: mm }
609
+ rows: 2
610
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, spec: hvid }
611
+ foreground: "#000000"
612
+ border: { color: "#C8102E", hex_basis: observed, spec: rød }
613
+ band: { side: left, color: "#003399", content: eu-stars+DK, hex_basis: observed, optional: true }
614
+ emblem: { present: false }
615
+ rear_differs: false
616
+ display: "ONE plate, mounted at the REAR and never on the side (§ 69, stk. 2)"
617
+ region_encoding: "plates/_decode/dk-serial-blocks.yml"
618
+ region_encoding_file: dk-serial-blocks.yml
619
+ sources:
620
+ - "https://www.retsinformation.dk/eli/lta/2025/663/dan/xml # § 69, stk. 2 (one rear plate, not on the side); § 70, stk. 6 (rear-plate lighting); accessed 2026-08-02"
621
+ - "https://web.archive.org/web/20170917063422/https://www.skat.dk/getFiles.aspx?Id=e6c2c7e8-e7a7-4b5e-b15e-4b67e27d3f66&name=planche_nummerplader_2012.pdf # SKAT rows 25/26 'MC og påhængsvogne til MC (hvid)' 165x240 hvid/sort/rød 10.000-75.999 og 78.000-97.999; accessed 2026-08-02"
622
+ notes: >-
623
+ SKAT stocks one type for motorcycles AND their trailers ("MC og
624
+ påhængsvogne til MC"), which is why a motorcycle trailer does not appear
625
+ as a trailer series here. PRE-2012 the motorcycle block was its own
626
+ (reported as 10.000-18.999 — secondary-wikipedia, see the decode file);
627
+ since 6 June 2012 motorcycles share the general 10.000-75.999 /
628
+ 78.000-97.999 range with cars, vans and approved tractors, so a
629
+ motorcycle number is no longer distinguishable from a car number.
630
+
631
+ # =========================================================================
632
+ # MOPEDS. Two series, two colours, two digit counts — and the small one has
633
+ # a real, dated start.
634
+ # =========================================================================
635
+ - id: dk-moped-large
636
+ class: moped
637
+ categories: [moped]
638
+ period: { start: 2008 }
639
+ period_evidence: instrument-in-force-start-upper-bound
640
+ period_caveat: >-
641
+ THIS START IS AN UPPER BOUND, NOT A FIRST-ISSUE DATE. A "stor knallert"
642
+ (over 30 km/h) has always had to be registered under § 3, stk. 1, nr. 3
643
+ without any of the conditions that apply to the small one, so the
644
+ requirement predates every text reached in this pass. 2008 is the
645
+ commencement of BEK 1567/2007, the OLDEST registreringsbekendtgørelse
646
+ whose full text is machine-readable on retsinformation.dk (pre-2008
647
+ instruments publish ELI metadata only — see the GAPS block), and that text
648
+ already carries the duty. The true start is earlier and is not
649
+ established here.
650
+ matching: strict
651
+ format:
652
+ pattern: "LL 999"
653
+ regex: '\A[A-Z]{2} ?\d{3}\z'
654
+ regex_strict: '\A[ABCDEFGHJKLMNOPRSTUVWXYZ][ABCDEFGHJKLMNPRSTUVWXYZ] ?[1-9]\d{2}\z'
655
+ characters: 5
656
+ charset:
657
+ basis: secondary-wikipedia
658
+ notes: >-
659
+ Alphabet per common.charset. The number block 100-999 is primary,
660
+ from SKAT's catalogue row "Stor Knallert" — which is also why
661
+ regex_strict forbids a leading zero.
662
+ design:
663
+ plate: { w: 145, h: 125, unit: mm }
664
+ rows: 2
665
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, spec: hvid }
666
+ foreground: "#000000"
667
+ band: { side: none }
668
+ band_note: "NO EU BAND, and it is not a choice: § 68, stk. 5, 3. pkt. — 'nummerplade til en knallert eller traktor udfærdiges ikke med EU-symbolet.'"
669
+ emblem: { present: false }
670
+ display: "ONE plate at the rear (§ 69, stk. 2); not lit at night (§ 70, stk. 6, 2. pkt.)"
671
+ region_encoding: "plates/_decode/dk-serial-blocks.yml"
672
+ region_encoding_file: dk-serial-blocks.yml
673
+ sources:
674
+ - "https://www.retsinformation.dk/eli/lta/2025/663/dan/xml # § 3, stk. 1, nr. 3 and stk. 3; § 68, stk. 5 (no EU symbol); § 69, stk. 2; § 70, stk. 6; accessed 2026-08-02"
675
+ - "https://www.retsinformation.dk/eli/lta/2007/1567/dan/xml # BEK 1567/2007, in force 1 January 2008, already requiring knallert registration — the upper bound this period rests on; accessed 2026-08-02"
676
+ - "https://web.archive.org/web/20170917063422/https://www.skat.dk/getFiles.aspx?Id=e6c2c7e8-e7a7-4b5e-b15e-4b67e27d3f66&name=planche_nummerplader_2012.pdf # SKAT row 5 'Stor Knallert' 125x145 hvid/sort 100-999; accessed 2026-08-02"
677
+ notes: >-
678
+ THE 45 KM/H MOPED, on the smallest plate Denmark issues — 145 x 125 mm,
679
+ two rows, white with black characters and no EU band. The lille/stor
680
+ split is the 30 km/h design-speed line, which BEK 663/2025 uses in terms
681
+ ("En knallert med en konstruktivt bestemt maksimal hastighed over 30 km
682
+ i timen") but only in its chapter on FOREIGN vehicles; the domestic
683
+ definition of a knallert is færdselslovens § 2, nr. 7, applied by BEK
684
+ 663/2025 § 33, and neither instrument defines "lille knallert" in so
685
+ many words. Recorded that way rather than tidied. This plate is WHITE
686
+ and the small moped's is YELLOW, which is the reverse of the intuition
687
+ that yellow means commercial, and is why the two are modelled
688
+ separately.
689
+
690
+ - id: dk-moped-small-2006
691
+ class: moped
692
+ categories: [moped]
693
+ period: { start: 2006 }
694
+ period_evidence: statutory-date
695
+ period_note: >-
696
+ 1 JULY 2006, and the instrument in force today still states it: BEK
697
+ 663/2025 § 3, stk. 3 — "En lille knallert skal kun registreres, hvis den
698
+ er erhvervet som fabriksny den 1. juli 2006 eller senere." The same
699
+ sentence stands in BEK 1567/2007, so the rule is at least as old as that
700
+ text and dates itself. A small moped bought new before that day is on the
701
+ road unregistered and unplated, entirely lawfully — which a parse API
702
+ must not read as an anomaly.
703
+ matching: strict
704
+ format:
705
+ pattern: "LL 9999"
706
+ regex: '\A[A-Z]{2} ?\d{4}\z'
707
+ regex_strict: '\A[ABCDEFGHJKLMNOPRSTUVWXYZ][ABCDEFGHJKLMNPRSTUVWXYZ] ?[1-9]\d{3}\z'
708
+ characters: 6
709
+ charset:
710
+ basis: secondary-wikipedia
711
+ notes: "alphabet per common.charset; the 1.000-9.999 block is primary from SKAT's catalogue row 'Lille knallert (gul)', hence no leading zero in regex_strict"
712
+ design:
713
+ plate: { w: 145, h: 125, unit: mm }
714
+ rows: 2
715
+ background: { color: "#FFCC00", finish: retroreflective, hex_basis: observed, spec: gul }
716
+ foreground: "#000000"
717
+ border: { color: "#000000", hex_basis: observed, spec: sort }
718
+ band: { side: none }
719
+ band_note: "NO EU BAND — § 68, stk. 5, 3. pkt."
720
+ emblem: { present: false }
721
+ display: "ONE plate at the rear (§ 69, stk. 2); not lit at night (§ 70, stk. 6, 2. pkt.)"
722
+ region_encoding: "plates/_decode/dk-serial-blocks.yml"
723
+ region_encoding_file: dk-serial-blocks.yml
724
+ sources:
725
+ - "https://www.retsinformation.dk/eli/lta/2025/663/dan/xml # § 3, stk. 3 (the 1 July 2006 cut-off, plus the invalideknallert and speed-pedelec exemptions); § 68, stk. 5; accessed 2026-08-02"
726
+ - "https://www.retsinformation.dk/eli/lta/2007/1567/dan/xml # the identical 1 July 2006 sentence in BEK 1567/2007 — the rule is at least that old; accessed 2026-08-02"
727
+ - "https://web.archive.org/web/20170917063422/https://www.skat.dk/getFiles.aspx?Id=e6c2c7e8-e7a7-4b5e-b15e-4b67e27d3f66&name=planche_nummerplader_2012.pdf # SKAT row 12 'Lille knallert (gul)' 125x145 gul/sort 1.000-9.999; accessed 2026-08-02"
728
+ notes: >-
729
+ THE 30 KM/H MOPED. YELLOW, and for once the yellow has nothing to do with
730
+ tax — it distinguishes the small moped from the large one, whose plate is
731
+ white. Registration is conditional on the purchase date rather than on the
732
+ vehicle: only a lille knallert acquired factory-new on or after 1 July
733
+ 2006 must be registered. Invalideknallerter are exempt outright, and a
734
+ speed pedelec under the trial scheme in BEK nr 878 af 25/06/2018 is not
735
+ registered at all.
736
+
737
+ # =========================================================================
738
+ # TRAILERS — yellow, four digits.
739
+ # =========================================================================
740
+ - id: dk-trailer-1976
741
+ class: trailer
742
+ categories: [trailer, semitrailer, caravan]
743
+ period: { start: 1976 }
744
+ period_evidence: statutory-date
745
+ period_note: "the 1 April 1976 numbering guidelines; see dk-standard-1976. The yellow colour itself is undated — same caveat as dk-van-commercial-yellow"
746
+ matching: strict
747
+ format:
748
+ pattern: "LL 99 99"
749
+ regex: '\A[A-Z]{2} ?\d{2} ?\d{2}\z'
750
+ regex_strict: '\A[ABCDEFGHJKLMNOPRSTUVWXYZ][ABCDEFGHJKLMNPRSTUVWXYZ] ?[1-9]\d ?\d{2}\z'
751
+ characters: 6
752
+ charset:
753
+ basis: secondary-wikipedia
754
+ notes: "alphabet per common.charset; the 1.000-9.999 block is primary from SKAT's catalogue"
755
+ design:
756
+ plate: { w: 504, h: 120, unit: mm }
757
+ background: { color: "#FFCC00", finish: retroreflective, hex_basis: observed, spec: gul }
758
+ foreground: "#000000"
759
+ border: { color: "#000000", hex_basis: observed, spec: sort }
760
+ band: { side: left, color: "#003399", content: eu-stars+DK, hex_basis: observed, optional: true }
761
+ emblem: { present: false }
762
+ display: "ONE plate at the rear (§ 69, stk. 2)"
763
+ region_encoding: "plates/_decode/dk-serial-blocks.yml"
764
+ region_encoding_file: dk-serial-blocks.yml
765
+ sources:
766
+ - "https://www.retsinformation.dk/eli/lta/2025/663/dan/xml # § 3, stk. 1, nr. 4-6 (which trailers must be registered, incl. the 30 km/h construction test for a påhængsredskab); § 69, stk. 2; accessed 2026-08-02"
767
+ - "https://web.archive.org/web/20170917063422/https://www.skat.dk/getFiles.aspx?Id=e6c2c7e8-e7a7-4b5e-b15e-4b67e27d3f66&name=planche_nummerplader_2012.pdf # SKAT rows 10/11 'Påhængsvogne, sættevogne og påhængsredskaber (gul)' 120x504 gul/sort 1.000-9.999; accessed 2026-08-02"
768
+ notes: >-
769
+ One SKAT type covers påhængsvogne, sættevogne and påhængsredskaber
770
+ (caravans included) on a four-digit yellow plate. Registration is not
771
+ universal: § 3, stk. 1, nr. 6 catches a non-caravan påhængsredskab only
772
+ where "påhængsredskabets konstruktion gør det muligt at trække det med en
773
+ højere hastighed end 30 km/t". Motorcycle trailers are NOT here — SKAT
774
+ stocks them with the motorcycle plate (see dk-motorcycle-1976). Before
775
+ 6 June 2012 trailers were split across two blocks by kind; the decode file
776
+ records that, tiered.
777
+
778
+ # =========================================================================
779
+ # TRACTORS. Two series because the digit count differs, which is the
780
+ # sharpest evidence that the two are different registrations.
781
+ # =========================================================================
782
+ - id: dk-tractor-registered
783
+ class: agricultural
784
+ categories: [tractor, machine]
785
+ period: { start: 2008 }
786
+ period_evidence: instrument-in-force-start-upper-bound
787
+ period_caveat: >-
788
+ UPPER BOUND, as for dk-moped-large: 2008 is the commencement of BEK
789
+ 1567/2007, the oldest full text reachable, which already requires
790
+ registration of traktorer and blokvogne. The regime is older and is not
791
+ dated here.
792
+ matching: strict
793
+ format:
794
+ pattern: "LL 999"
795
+ regex: '\A[A-Z]{2} ?\d{3}\z'
796
+ regex_strict: '\A[ABCDEFGHJKLMNOPRSTUVWXYZ][ABCDEFGHJKLMNPRSTUVWXYZ] ?[1-9]\d{2}\z'
797
+ characters: 5
798
+ charset:
799
+ basis: secondary-wikipedia
800
+ notes: "alphabet per common.charset; the 100-999 block is primary from SKAT's catalogue row 'Traktorer'"
801
+ design:
802
+ plate: { w: 240, h: 165, unit: mm }
803
+ rows: 2
804
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, spec: hvid }
805
+ foreground: "#000000"
806
+ border: { color: "#C8102E", hex_basis: observed, spec: rød }
807
+ band: { side: none }
808
+ band_note: "NO EU BAND — § 68, stk. 5, 3. pkt. puts tractors alongside mopeds and historic plates"
809
+ emblem: { present: false }
810
+ region_encoding: "plates/_decode/dk-serial-blocks.yml"
811
+ region_encoding_file: dk-serial-blocks.yml
812
+ sources:
813
+ - "https://www.retsinformation.dk/eli/lta/2025/663/dan/xml # § 3, stk. 1, nr. 2 and stk. 2; § 68, stk. 5; accessed 2026-08-02"
814
+ - "https://web.archive.org/web/20170917063422/https://www.skat.dk/getFiles.aspx?Id=e6c2c7e8-e7a7-4b5e-b15e-4b67e27d3f66&name=planche_nummerplader_2012.pdf # SKAT row 6 'Traktorer' 165x240 hvid/sort/rød 100-999; accessed 2026-08-02"
815
+ notes: >-
816
+ THE THREE-DIGIT TRACTOR PLATE. Distinguished from dk-tractor-approved by
817
+ digit count alone, which is the point: a Danish tractor number of three
818
+ digits is a registered tractor and a five-digit one is a godkendt
819
+ traktor. § 3, stk. 2 sends tractors and blokvogne down two different
820
+ routes by reference to §§ 3 and 4 of lov om registrering af køretøjer —
821
+ some need no registration at all, others must be registered "som
822
+ godkendt". Historical curiosity with a primary source: BEK 651/2011 § 102
823
+ keeps alive "nummerplader af den tidligere anvendte cirkulære type" on
824
+ approved tractors and sidecars, so a genuinely ROUND Danish plate is
825
+ lawful on the road and has no replacement path (§ 102, stk. 3).
826
+
827
+ - id: dk-tractor-approved
828
+ class: agricultural
829
+ categories: [tractor, machine]
830
+ period: { start: 2008 }
831
+ period_evidence: instrument-in-force-start-upper-bound
832
+ period_caveat: "UPPER BOUND, as for dk-tractor-registered"
833
+ matching: strict
834
+ format:
835
+ pattern: "LL 99 999"
836
+ regex: '\A[A-Z]{2} ?\d{2} ?\d{3}\z'
837
+ regex_strict: '\A[ABCDEFGHJKLMNOPRSTUVWXYZ][ABCDEFGHJKLMNPRSTUVWXYZ] ?(?:[1-6]\d|7[0-5]|7[89]|8\d|9[0-7]) ?\d{3}\z'
838
+ characters: 7
839
+ charset:
840
+ basis: secondary-wikipedia
841
+ notes: "alphabet per common.charset; the block is primary from SKAT's catalogue row 'Traktorer - Godkendt (hvid)'"
842
+ design:
843
+ plate: { w: 240, h: 165, unit: mm }
844
+ rows: 2
845
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, spec: hvid }
846
+ foreground: "#000000"
847
+ border: { color: "#C8102E", hex_basis: observed, spec: rød }
848
+ band: { side: none }
849
+ band_note: "NO EU BAND — § 68, stk. 5, 3. pkt."
850
+ emblem: { present: false }
851
+ display: "ONE plate, at the FRONT — the only Danish vehicle plated at the front only (§ 69, stk. 3)"
852
+ region_encoding: "plates/_decode/dk-serial-blocks.yml"
853
+ region_encoding_file: dk-serial-blocks.yml
854
+ sources:
855
+ - "https://www.retsinformation.dk/eli/lta/2025/663/dan/xml # § 69, stk. 3 (single FRONT plate on a godkendt traktor); § 3, stk. 2; accessed 2026-08-02"
856
+ - "https://web.archive.org/web/20170917063422/https://www.skat.dk/getFiles.aspx?Id=e6c2c7e8-e7a7-4b5e-b15e-4b67e27d3f66&name=planche_nummerplader_2012.pdf # SKAT row 27 'Traktorer - Godkendt (hvid)' 165x240 hvid/sort/rød 10.000-75.999 og 78.000-97.999; accessed 2026-08-02"
857
+ notes: >-
858
+ THE GODKENDT TRAKTOR — five digits, and the single plate goes on the
859
+ FRONT, which is unique in the Danish system (§ 69, stk. 3). Before
860
+ 6 June 2012 approved tractors had their own narrow block (reported as
861
+ 19.000-19.499 — secondary-wikipedia); since then they share the general
862
+ range with cars, vans and motorcycles.
863
+
864
+ # =========================================================================
865
+ # TAXIS AND PATIENT-TRANSPORT VEHICLES — the 98/99 block. A white plate whose
866
+ # NUMBER, not whose look, marks the class.
867
+ # =========================================================================
868
+ - id: dk-taxi
869
+ class: taxi
870
+ categories: [car, van]
871
+ period: { start: 1976 }
872
+ period_evidence: statutory-date
873
+ period_caveat: >-
874
+ As elsewhere, 1976 dates the NUMBERING guidelines the plate follows, not
875
+ the 98/99 block itself. The block is attested by SKAT's catalogue in 2012
876
+ and by both Wikipedias for the pre-2012 era; nothing dates its creation.
877
+ matching: recall-only
878
+ format:
879
+ pattern: "LL 99 999"
880
+ regex: '\A[A-Z]{2} ?\d{2} ?\d{3}\z'
881
+ characters: 7
882
+ block: "98.000-99.999"
883
+ pattern_note: >-
884
+ RECALL-ONLY, AND THE REASON IS A SCHEMA LIMIT WORTH RECORDING. This
885
+ series issues only the 98.000-99.999 block, so its true grammar is
886
+ narrower than the regex above — and that grammar cannot be written.
887
+ The human-pattern DSL spells a digit position as "9", so a LITERAL 9
888
+ is unspellable, and any regex fixing the leading 9 fails the
889
+ round-trip against every pattern the DSL can express (PRD-PLATES
890
+ §5.2). The diplomatic series escape the same trap only because their
891
+ block starts 76/77, whose digits are not the token. `regex` is
892
+ therefore deliberately wider than what this series issues — a match
893
+ is a shape hit, not a taxi claim — and per PRD-PLATES §2.7 that is
894
+ `recall-only`, which in turn forbids a `regex_strict`. The block
895
+ lives in `format.block` and in plates/_decode/dk-serial-blocks.yml,
896
+ where a parse API should read it.
897
+ charset:
898
+ basis: secondary-wikipedia
899
+ notes: "alphabet per common.charset; the 98.000-99.999 block is primary from SKAT's catalogue"
900
+ design:
901
+ plate: { w: 504, h: 120, unit: mm }
902
+ plate_variants:
903
+ - { w: 240, h: 165, unit: mm, note: "'kvadratisk' rear plate — SKAT 'Taxa (kvadratisk)'" }
904
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, spec: hvid }
905
+ foreground: "#000000"
906
+ border: { color: "#C8102E", hex_basis: observed, spec: rød }
907
+ band: { side: left, color: "#003399", content: eu-stars+DK, hex_basis: observed, optional: true }
908
+ emblem: { present: false }
909
+ rear_differs: false
910
+ region_encoding: "plates/_decode/dk-serial-blocks.yml"
911
+ region_encoding_file: dk-serial-blocks.yml
912
+ sources:
913
+ - "https://web.archive.org/web/20170917063422/https://www.skat.dk/getFiles.aspx?Id=e6c2c7e8-e7a7-4b5e-b15e-4b67e27d3f66&name=planche_nummerplader_2012.pdf # SKAT rows 60/61 '20% (Taxi og sygetransportere)' 120x504 hvid/sort/rød 98.000-99.999; accessed 2026-08-02"
914
+ - "https://www.retsinformation.dk/eli/lta/2025/663/dan/xml # § 68, stk. 2-3 (the number rule and the series delegation this block is issued under); accessed 2026-08-02"
915
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Denmark # secondary-wikipedia: taxis and hire limousines retained the 98/99 block through the 2012 consolidation; accessed 2026-08-02"
916
+ notes: >-
917
+ SKAT does not call this a taxi plate — it calls it "20% (Taxi og
918
+ sygetransportere)", after the reduced registration-tax rate, and the
919
+ class therefore covers patient-transport vehicles as well as taxis and
920
+ hire limousines. The plate is a WHITE plate: it is the NUMBER that marks
921
+ the class, which is why it deserves a series rather than a colour note.
922
+ It is also one of the two survivors of the 6 June 2012 consolidation —
923
+ 98/99 for this class and 76/77 for diplomats stayed put while every other
924
+ per-kind block was merged.
925
+
926
+ # =========================================================================
927
+ # DIPLOMATIC AND CONSULAR — the one plate whose colour the instrument states.
928
+ # Two series because the instrument's series delegation splits the block, and
929
+ # a parse API needs to tell a mission from an international organisation.
930
+ # =========================================================================
931
+ - id: dk-diplomatic-mission
932
+ class: diplomatic
933
+ categories: [car, van, motorcycle]
934
+ period: { start: 1976 }
935
+ period_evidence: statutory-date
936
+ period_caveat: >-
937
+ 1976 dates the numbering guidelines the plate follows. The BLUE ground is
938
+ primary and current (§ 76, stk. 1) but undated: it is present in every
939
+ registreringsbekendtgørelse reached back to BEK 1567/2007 and its
940
+ introduction is not established here.
941
+ matching: strict
942
+ format:
943
+ pattern: "LL 76 999"
944
+ regex: '\A[A-Z]{2} ?76 ?\d{3}\z'
945
+ characters: 7
946
+ block: "76.000-76.999"
947
+ charset:
948
+ basis: primary-authority
949
+ notes: >-
950
+ No letter restriction is claimed for diplomatic plates. The Swedish
951
+ lesson applies (se-diplomatic: the landskod alphabet is NOT the
952
+ ordinary one), and nothing in the Danish sources says the ordinary
953
+ exclusions carry over here, so no `regex_strict` is written.
954
+ design:
955
+ plate: { w: 504, h: 120, unit: mm }
956
+ background: { color: "#0057A8", finish: retroreflective, hex_basis: observed, spec: blå, spec_note: "the ONE colour the instrument states: BEK 663/2025 § 76, stk. 1 — plates 'hvor registreringsnummeret vises på en blå baggrund'" }
957
+ foreground: "#FFFFFF"
958
+ border: { color: "#0057A8", hex_basis: observed, spec: blå, note: "SKAT colour cell 'blå/hvid blå'" }
959
+ band: { side: left, color: "#003399", content: eu-stars+DK, hex_basis: observed, optional: false, note: "COMPULSORY here: § 68, stk. 5, 2. pkt. — 'Grænsenummerplade og diplomatnummerplade udfærdiges dog kun med EU-symbolet.'" }
960
+ emblem: { present: false }
961
+ rear_differs: false
962
+ region_encoding: "plates/_decode/dk-serial-blocks.yml"
963
+ region_encoding_file: dk-serial-blocks.yml
964
+ sources:
965
+ - "https://www.retsinformation.dk/eli/lta/2025/663/dan/xml # § 76, stk. 1 (who gets blue plates: foreign states' diplomatic and consular missions, international organisations and institutions under registreringsafgiftslovens § 2, stk. 2, and persons accorded diplomatic status by Udenrigsministeriet) and stk. 2 (Skatteforvaltningen may dispense and issue WHITE plates instead); § 68, stk. 5 (EU symbol compulsory); accessed 2026-08-02"
966
+ - "https://web.archive.org/web/20170917063422/https://www.skat.dk/getFiles.aspx?Id=e6c2c7e8-e7a7-4b5e-b15e-4b67e27d3f66&name=planche_nummerplader_2012.pdf # SKAT row 65 'Diplomatplader - rektangulære (blå) - EU' 120x504 blå/hvid blå 76.000-77.999; accessed 2026-08-02"
967
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Denmark # secondary-wikipedia: the split of the SKAT block into 76.000-76.999 for states' missions and 77.000-77.999 for international organisations; accessed 2026-08-02"
968
+ notes: >-
969
+ DIPLOMATIC MISSIONS OF STATES. The SKAT catalogue gives the whole
970
+ diplomatic block as 76.000-77.999 in one row; the split into 76 for
971
+ states' missions and 77 for international organisations is
972
+ secondary-wikipedia (both the English and the Danish article give it, and
973
+ it is consistent across them). Only the SPLIT is secondary — the block,
974
+ the colours and the compulsory EU band are primary. A NEGATIVE FINDING
975
+ worth recording for any claims model: § 76, stk. 2 lets Skatteforvaltningen
976
+ dispense from the blue plate and issue a white one, so the absence of a
977
+ blue plate does not disprove diplomatic status — the same trap se.yml
978
+ records for the Swedish security exemption.
979
+
980
+ - id: dk-diplomatic-organisation
981
+ class: diplomatic
982
+ categories: [car, van, motorcycle]
983
+ period: { start: 1976 }
984
+ period_evidence: statutory-date
985
+ period_caveat: "as dk-diplomatic-mission"
986
+ matching: strict
987
+ format:
988
+ pattern: "LL 77 999"
989
+ regex: '\A[A-Z]{2} ?77 ?\d{3}\z'
990
+ characters: 7
991
+ block: "77.000-77.999"
992
+ charset:
993
+ basis: primary-authority
994
+ notes: "as dk-diplomatic-mission — no letter restriction claimed"
995
+ design:
996
+ plate: { w: 504, h: 120, unit: mm }
997
+ background: { color: "#0057A8", finish: retroreflective, hex_basis: observed, spec: blå }
998
+ foreground: "#FFFFFF"
999
+ border: { color: "#0057A8", hex_basis: observed, spec: blå }
1000
+ band: { side: left, color: "#003399", content: eu-stars+DK, hex_basis: observed, optional: false }
1001
+ emblem: { present: false }
1002
+ rear_differs: false
1003
+ region_encoding: "plates/_decode/dk-serial-blocks.yml"
1004
+ region_encoding_file: dk-serial-blocks.yml
1005
+ sources:
1006
+ - "https://www.retsinformation.dk/eli/lta/2025/663/dan/xml # § 76; § 68, stk. 5; accessed 2026-08-02"
1007
+ - "https://web.archive.org/web/20170917063422/https://www.skat.dk/getFiles.aspx?Id=e6c2c7e8-e7a7-4b5e-b15e-4b67e27d3f66&name=planche_nummerplader_2012.pdf # SKAT row 65, block 76.000-77.999; accessed 2026-08-02"
1008
+ - "https://da.wikipedia.org/wiki/Nummerplade # secondary-wikipedia: '77 000-77 999 Diplomatbiler, internationale organisationer mv.'; accessed 2026-08-02"
1009
+ notes: >-
1010
+ INTERNATIONAL ORGANISATIONS AND INSTITUTIONS — the upper half of the blue
1011
+ block. Identical in law and in appearance to dk-diplomatic-mission; the
1012
+ only difference is the number, which is exactly why it is modelled as its
1013
+ own series rather than as a note. The 77 assignment is
1014
+ secondary-wikipedia; the blue plate and its statutory basis are primary.
1015
+
1016
+ # =========================================================================
1017
+ # ØNSKENUMMERPLADE — the personalised plate, and the only Danish plate bound
1018
+ # to a PERSON rather than to a vehicle.
1019
+ # =========================================================================
1020
+ - id: dk-personalized-1992
1021
+ class: personalized
1022
+ categories: [car, van, truck, motorcycle, trailer]
1023
+ period: { start: 1992 }
1024
+ period_evidence: secondary-wikipedia
1025
+ period_note: >-
1026
+ 2 MARCH 1992, reported by Danish Wikipedia, which also attributes the
1027
+ authorising legislation to a law of 8 May 1991 without giving its number.
1028
+ NEITHER was verified against an instrument in this pass: the
1029
+ registreringsbekendtgørelser whose full text is machine-readable start in
1030
+ 2007, and BEK nr 18 af 10/01/1992 om registrering af motorkøretøjer m.v.
1031
+ — the obvious candidate — publishes ELI metadata only, with a StartDate
1032
+ of 1997-10-01 that is plainly a register artefact rather than that
1033
+ bekendtgørelse's commencement. The GRAMMAR below is primary; the DATE is
1034
+ not, and is tagged accordingly.
1035
+ matching: strict
1036
+ binding: owner
1037
+ binding_note: >-
1038
+ The one Danish plate that follows a person. § 74, stk. 5: the number "kan
1039
+ inden for rettighedsperioden overføres til et andet køretøj, som
1040
+ registreres til den, der har retten til at anvende ønskenummeret."
1041
+ § 74, stk. 7-8: the right runs EIGHT YEARS from the first registration of
1042
+ a vehicle with the number and is renewable for a further eight against
1043
+ payment, applied for before expiry and not earlier than three months
1044
+ before it. § 74, stk. 6 closes the transfer list to a spouse, a partner of
1045
+ five years' shared residence, or a survivor on death — so an ønskenummer
1046
+ cannot simply be sold on.
1047
+ format:
1048
+ pattern: "LLLLLLL"
1049
+ regex: '\A[A-Z0-9]{2,7}\z'
1050
+ characters: "2-7"
1051
+ charset:
1052
+ basis: primary-instrument
1053
+ notes: >-
1054
+ BEK 663/2025 § 74, stk. 2, verbatim: "Ønskenummeret skal bestå af
1055
+ mindst to og højst syv latinske bogstaver eller arabiske tal. Et
1056
+ ønskenummer må ikke være egnet til at vække anstød eller medføre
1057
+ ulempe for nogen." Letters and digits may be mixed in any order and
1058
+ any proportion — the regex is the instrument's grammar, not an
1059
+ approximation of it. The anstød test is a NON-ISSUANCE rule and is
1060
+ deliberately not compiled into the regex, following the treatment of
1061
+ blocked combinations in nl.yml and se.yml.
1062
+ Æ, Ø and Å: Danish Wikipedia and English Wikipedia both report that
1063
+ the Danish letters may be used. They are outside this dataset's
1064
+ serial alphabet (_meta/separators.yml) and so cannot be written here;
1065
+ this is a KNOWN under-coverage of the Danish ønskenummer space,
1066
+ recorded rather than hidden. The instrument's own words — "latinske
1067
+ bogstaver" — do not obviously include them, and no primary resolves
1068
+ it.
1069
+ separator_note: >-
1070
+ SKAT's catalogue renders examples with a layout gap ("BONNY 11",
1071
+ "HANSEN1", "HANS 1"). § 74, stk. 2 admits only letters and digits, so
1072
+ the gap is a RENDERING gap and not part of the ønskenummer; the regex
1073
+ therefore carries no separator. A consumer matching a photographed
1074
+ plate should strip the forgiving set first, which _meta/separators.yml
1075
+ makes safe by construction.
1076
+ design:
1077
+ plate: { w: 504, h: 120, unit: mm }
1078
+ plate_variants:
1079
+ - { w: 240, h: 165, unit: mm, note: "'kvadratisk' rear plate, and a separate 'amerikaner' variant — SKAT rows 33/34 and 78/79" }
1080
+ - { w: 240, h: 165, unit: mm, note: "motorcycle ønskeplade — SKAT rows 35/36 'Ønskeplader MC (hvid)'" }
1081
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, spec: hvid }
1082
+ foreground: "#000000"
1083
+ border: { color: "#C8102E", hex_basis: observed, spec: rød }
1084
+ band: { side: left, color: "#003399", content: eu-stars+DK, hex_basis: observed, optional: true }
1085
+ emblem: { present: false }
1086
+ rear_differs: false
1087
+ region_encoding: none
1088
+ region_encoding_note: "an ønskenummer is chosen by its holder and encodes nothing"
1089
+ sources:
1090
+ - "https://www.retsinformation.dk/eli/lta/2025/663/dan/xml # § 68, stk. 4, nr. 2 (the plate type) and § 74 in full: the 2-7 character grammar, the anstød test, first-come allocation, the six-month registration deadline, transfer between vehicles, the closed transfer list, the eight-year right and its renewal; accessed 2026-08-02"
1091
+ - "https://web.archive.org/web/20170917063422/https://www.skat.dk/getFiles.aspx?Id=e6c2c7e8-e7a7-4b5e-b15e-4b67e27d3f66&name=planche_nummerplader_2012.pdf # SKAT rows 31-36 and 78/79 'Ønskeplader', 120x504 and 165x240, hvid/sort/rød, 'Mindst 2 og maksimalt 7 karakterer'; accessed 2026-08-02"
1092
+ - "https://da.wikipedia.org/wiki/Nummerplade # secondary-wikipedia: introduced 2 March 1992; a law of 8 May 1991 named without a number; roughly 4,000 in use; accessed 2026-08-02"
1093
+ notes: >-
1094
+ THE ØNSKENUMMERPLADE. Its grammar is entirely primary — two to seven
1095
+ Latin letters or Arabic numerals, § 74, stk. 2 — and it is the reason
1096
+ `regex` here is a length-quantified class rather than a shape. Everything
1097
+ procedural about it is primary too, including the parts that matter to a
1098
+ dataset: the right lasts eight years and is renewable, it moves between
1099
+ the holder's vehicles rather than staying with a car, and it may be
1100
+ transferred to another person only within a closed family list. Only the
1101
+ 1992 START is secondary. English Wikipedia adds that an ønskenummer may
1102
+ not take the same form as a standard number; that restriction is NOT in
1103
+ § 74 and is not encoded here.
1104
+
1105
+ # =========================================================================
1106
+ # HISTORIC PLATES. Two series, because the eligibility cut moved on a date
1107
+ # the instruments give exactly.
1108
+ # =========================================================================
1109
+ - id: dk-historic-pre1958
1110
+ class: historic
1111
+ categories: [car, van, truck, bus, motorcycle]
1112
+ period: { start: 2008, end: 2011 }
1113
+ period_evidence: transitional-provision
1114
+ period_note: >-
1115
+ END IS EXACT, START IS AN UPPER BOUND. The end: BEK 811/2010 § 103,
1116
+ stk. 3 — "§ 79 har virkning fra den 1. april 2011. Indtil da finder § 76 i
1117
+ bekendtgørelse nr. 633 af 26. juni 2009 anvendelse." § 76 of BEK 633/2009
1118
+ is the 1958-cut historic plate, so this regime ran to 31 March 2011 and
1119
+ the 1976-cut one began on 1 April 2011. The start: BEK 1567/2007, in force
1120
+ 1 January 2008, is the oldest text reachable and already carries the
1121
+ 1958-cut rule (§ 76), so 2008 bounds the start from above rather than
1122
+ fixing it.
1123
+ matching: recall-only
1124
+ format:
1125
+ pattern: "LL 999"
1126
+ regex: '\A[A-Z]{1,2} ?\d{1,6}\z'
1127
+ characters: "2-8"
1128
+ pattern_note: >-
1129
+ A UNION, deliberately. BEK 1567/2007 § 76, stk. 2: "En historisk korrekt
1130
+ nummerplade er en nummerplade af en type og med et registreringsnummer
1131
+ fra før den 1. april 1958" — the plate REPLICATES whatever the vehicle
1132
+ would have carried, so the regex is the union of the pre-1958 Danish
1133
+ shapes and a match against it is a shape hit and nothing more. Hence
1134
+ `matching: recall-only` and no `regex_strict`.
1135
+ shapes_covered: >-
1136
+ One letter plus digits (the county plate) and two letters plus digits.
1137
+ The single-letter form is attested PRIMARILY, not from the enthusiast
1138
+ web: BEK 633/2009 § 101, stk. 2 and BEK 651/2011 § 102, stk. 2 both
1139
+ provide that "Køretøjer med nummerplader med enkelt bogstav kan
1140
+ fortsat anvende disse", and stk. 3 of each adds that no replacement is
1141
+ supplied for them. The digit counts are not stated in any instrument
1142
+ and the 1-6 range here is a deliberately generous recall bound.
1143
+ design:
1144
+ plate: { w: 504, h: 120, unit: mm }
1145
+ plate_note: >-
1146
+ SIZE AND COLOUR ARE NOT SPECIFIED for a historic plate — it is "af en
1147
+ type ... der svarer til køretøjets art og tidspunktet for køretøjets
1148
+ første registrering", i.e. period-correct by definition. The 504x120
1149
+ entry is the modern default and should not be read as a claim about any
1150
+ particular era's plate. Pre-1976 Danish plates are reported as black
1151
+ with white characters (secondary-wikipedia); that is recorded below and
1152
+ not asserted as a spec.
1153
+ background: { color: "#000000", finish: painted, hex_basis: observed, spec: sort, note: "secondary-wikipedia: the pre-1976 style is black ground with white characters" }
1154
+ foreground: "#FFFFFF"
1155
+ band: { side: none }
1156
+ band_note: "NO EU BAND, and not by choice: § 68, stk. 5, 3. pkt. — 'Historisk nummerplade ... udfærdiges ikke med EU-symbolet.'"
1157
+ emblem: { present: false }
1158
+ region_encoding: none
1159
+ region_encoding_note: >-
1160
+ The single letter on a pre-1958 plate WAS a county/city marker
1161
+ (secondary-wikipedia). No decode table is shipped for it — see the GAPS
1162
+ block and plates/_decode/dk-serial-blocks.yml.
1163
+ sources:
1164
+ - "https://www.retsinformation.dk/eli/lta/2007/1567/dan/xml # BEK 1567/2007 § 76: 'SKAT kan tillade brug af en historisk korrekt nummerplade på et køretøj, der er registreret første gang før den 1. april 1958. En historisk korrekt nummerplade er en nummerplade af en type og med et registreringsnummer fra før den 1. april 1958.'; accessed 2026-08-02"
1165
+ - "https://www.retsinformation.dk/eli/lta/2010/811/dan/xml # BEK 811/2010 § 103, stk. 3 — the virkningsbestemmelse that ends this regime on 31 March 2011; § 79 (the successor rule); accessed 2026-08-02"
1166
+ - "https://www.retsinformation.dk/eli/lta/2009/633/dan/xml # BEK 633/2009 § 76 (the 1958 cut as it stood) and § 101, stk. 1-2 (circular tractor/sidecar plates and single-letter plates remain lawful, with no replacement path); accessed 2026-08-02"
1167
+ - "https://da.wikipedia.org/wiki/Nummerplade # secondary-wikipedia: pre-1958 systems — one letter plus digits, the letter marking the amt; accessed 2026-08-02"
1168
+ notes: >-
1169
+ THE 1958-CUT HISTORIC PLATE, and the reason Denmark needs two historic
1170
+ series instead of one. Between 2008 (at the latest) and 31 March 2011 the
1171
+ permit was open only to vehicles first registered before 1 APRIL 1958 and
1172
+ the plate had to be a pre-1958 type. That date is not decorative: read
1173
+ with the 1 April 1976 line in the current instrument, the two together are
1174
+ the only primary evidence in this file that Denmark's numbering changed
1175
+ twice in the twentieth century, on 1 April 1958 and on 1 April 1976.
1176
+ Neither reform's own instrument was reached.
1177
+
1178
+ - id: dk-historic-pre1976
1179
+ class: historic
1180
+ categories: [car, van, truck, bus, motorcycle]
1181
+ period: { start: 2011 }
1182
+ period_evidence: transitional-provision
1183
+ period_note: >-
1184
+ 1 APRIL 2011, dated to the day by a virkningsbestemmelse rather than by a
1185
+ commencement clause — which is exactly the distinction this wave exists to
1186
+ police. BEK 811/2010 came into force on 1 July 2010 (§ 103, stk. 1), but
1187
+ § 103, stk. 3 held its historic-plate section back: "§ 79 har virkning fra
1188
+ den 1. april 2011." Shipping 2010 here, from the bekendtgørelse's own
1189
+ date, would have been the Spanish defect in miniature.
1190
+ matching: recall-only
1191
+ format:
1192
+ pattern: "LL 999"
1193
+ regex: '\A[A-Z]{1,2} ?\d{1,6}\z'
1194
+ characters: "2-8"
1195
+ pattern_note: >-
1196
+ A UNION, as for dk-historic-pre1958, but a wider one: the eligibility
1197
+ window now reaches to 31 March 1976, so the replicated plate may be
1198
+ either a pre-1958 single-letter type or a 1958-1976 two-letter type.
1199
+ `matching: recall-only`; no `regex_strict`.
1200
+ design:
1201
+ plate: { w: 504, h: 120, unit: mm }
1202
+ plate_note: "period-correct by definition (§ 75, stk. 2); the entry is a default, not a claim"
1203
+ background: { color: "#000000", finish: painted, hex_basis: observed, spec: sort, note: "secondary-wikipedia: pre-1976 style, black ground with white characters" }
1204
+ foreground: "#FFFFFF"
1205
+ band: { side: none }
1206
+ band_note: "NO EU BAND — § 68, stk. 5, 3. pkt."
1207
+ emblem: { present: false }
1208
+ mounting_exemption: "§ 70, stk. 3 exempts historic plates (and any plate from before 1 April 1976) from the two-screw rule"
1209
+ region_encoding: none
1210
+ sources:
1211
+ - "https://www.retsinformation.dk/eli/lta/2025/663/dan/xml # § 75 in full: eligibility (first registered before 1 April 1976), the period-correct type-and-number rule with § 56, the six-month deadline, and that the plate FOLLOWS THE VEHICLE and must be surrendered on deregistration or renumbering; § 68, stk. 4, nr. 3 and stk. 5; § 70, stk. 3; § 72, stk. 4 (a historic plate IS replaceable, unlike an ordinary lost plate); accessed 2026-08-02"
1212
+ - "https://www.retsinformation.dk/eli/lta/2010/811/dan/xml # § 103, stk. 3: '§ 79 har virkning fra den 1. april 2011'; § 79 carries the 1976 cut; accessed 2026-08-02"
1213
+ - "https://www.retsinformation.dk/eli/lta/2018/1643/dan/xml # BEK 1643/2018 — the 1976 cut unchanged mid-chain, confirming the boundary moved once and stayed; accessed 2026-08-02"
1214
+ notes: >-
1215
+ THE HISTORIC PLATE AS IT STANDS. Eligibility: first registered before
1216
+ 1 April 1976. The plate must match the vehicle's kind and the time of its
1217
+ first registration "eller senere" (§ 75, stk. 2), so a 1960s car may
1218
+ lawfully wear a 1970s plate but not the reverse, and a specific number may
1219
+ be requested in the application. Unlike an ønskenummerplade it FOLLOWS THE
1220
+ VEHICLE (§ 75, stk. 4). Note the separate veteran regime it is often
1221
+ confused with: § 4 lets a vehicle first registered more than thirty years
1222
+ ago be registered "til veterankørsel", which restricts USE (occasional
1223
+ only, no commercial passenger transport, no dangerous goods, no emergency
1224
+ driving, no hire without driver) and has nothing to do with plates.
1225
+
1226
+ # =========================================================================
1227
+ # GRÆNSENUMMERPLADE — the Danish export/emigration plate, dated by a red
1228
+ # field carrying DK and the expiry year.
1229
+ # =========================================================================
1230
+ - id: dk-export-border
1231
+ class: export
1232
+ categories: [car, van, truck, motorcycle]
1233
+ period: { start: 2008 }
1234
+ period_evidence: instrument-in-force-start-upper-bound
1235
+ period_caveat: >-
1236
+ UPPER BOUND. BEK 1567/2007, in force 1 January 2008, already carries the
1237
+ grænsenummerplade regime; so does lov nr. 1338 af 19/12/2008 by reference,
1238
+ and registreringsafgiftsloven exempts vehicles registered on them. The
1239
+ series is older than any text reached and its start is not established.
1240
+ matching: strict
1241
+ format:
1242
+ pattern: "99 999"
1243
+ regex: '\A\d{2} ?\d{3}\z'
1244
+ characters: 5
1245
+ pattern_note: >-
1246
+ NO LETTERS. § 68, stk. 2's two-letters-plus-digits rule applies to the
1247
+ ordinary plate; SKAT's catalogue renders the grænseplade as five digits
1248
+ alone ("12 045"), with the country and year carried in the red field
1249
+ rather than in the serial.
1250
+ charset:
1251
+ basis: primary-authority
1252
+ notes: "digits only; SKAT's own format key writes '#' for a numeral and 'Dkåå' for the red year box, which it defines as 'Dk + årstal i rød kasse'"
1253
+ design:
1254
+ plate: { w: 504, h: 120, unit: mm }
1255
+ plate_variants:
1256
+ - { w: 240, h: 165, unit: mm, note: "motorcycle grænseplade — SKAT rows 51/55/59" }
1257
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, spec: hvid }
1258
+ foreground: "#000000"
1259
+ border: { color: "#C8102E", hex_basis: observed, spec: rød }
1260
+ validity_field: { side: left, color: "#C8102E", hex_basis: observed, content: "DK over the two-digit expiry year, in white on red", note: "SKAT stocks three variants at any time — 'løbende år', 'løbende år + 1' and 'løbende år + 2' (rows 49-59), which is how the year on the plate is always in stock ahead of demand" }
1261
+ band: { side: left, color: "#003399", content: eu-stars+DK, hex_basis: observed, optional: false, note: "COMPULSORY: § 68, stk. 5, 2. pkt." }
1262
+ emblem: { present: false }
1263
+ region_encoding: none
1264
+ sources:
1265
+ - "https://www.retsinformation.dk/eli/lta/2025/663/dan/xml # § 60 in full: who may have one (a resident emigrating or going abroad long-term, taking the vehicle with them), the 21-days-before-departure and 6-months-abroad limits, the 24-hour collection permit for someone already abroad, the syn-linked outer limits in stk. 3, that a grænsenummerplade vehicle cannot be re-registered to another owner and the plates cannot move to another vehicle; § 68, stk. 4, nr. 1 and stk. 5; accessed 2026-08-02"
1266
+ - "https://web.archive.org/web/20170917063422/https://www.skat.dk/getFiles.aspx?Id=e6c2c7e8-e7a7-4b5e-b15e-4b67e27d3f66&name=planche_nummerplader_2012.pdf # SKAT rows 49-59 'Grænseplader - bil/MC (hvid) løbende år / +1 / +2 EU', 120x504 and 165x240, hvid/sort/rød; accessed 2026-08-02"
1267
+ - "https://www.retsinformation.dk/eli/lta/2007/1567/dan/xml # the grænsenummerplade regime already present in the oldest full text reachable; accessed 2026-08-02"
1268
+ notes: >-
1269
+ DENMARK'S EXPORT PLATE, and its shape is unusual enough to be worth
1270
+ spelling out: a white plate with a RED FIELD on the left carrying "DK"
1271
+ over the two-digit year the registration expires, then a bare five-digit
1272
+ serial with no letters at all. The EU band is compulsory on it. The
1273
+ regime is narrower than "export" suggests — § 60 is written for a resident
1274
+ who is emigrating or going abroad for an extended period and taking the
1275
+ car, not for the trade, and the vehicle can be neither re-registered to
1276
+ anyone else nor have its plates moved. English Wikipedia calls it a
1277
+ "temporary export plate", which is close enough to be worth noting and
1278
+ loose enough not to be adopted as the definition.
1279
+
1280
+ # =========================================================================
1281
+ # THE NORDIC BORDER PLATE — abolished, and dated at the end.
1282
+ # =========================================================================
1283
+ - id: dk-border-nordic
1284
+ class: temporary
1285
+ categories: [car, van, truck, motorcycle]
1286
+ period: { start: 2008, end: 2011 }
1287
+ period_evidence: instrument-in-force-upper-bound
1288
+ period_note: >-
1289
+ END IS INSTRUMENT-DATED: the nordiske grænsenummerplade survives as § 99
1290
+ of BEK 811/2010 and is GONE from BEK 651/2011, which came into force on
1291
+ 18 June 2011 and repealed BEK 811/2010 the same day (§ 101). The regime
1292
+ therefore ended on 17 June 2011. START IS AN UPPER BOUND: BEK 1567/2007,
1293
+ in force 1 January 2008, already carries it, and nothing earlier was
1294
+ reachable.
1295
+ matching: strict
1296
+ format:
1297
+ pattern: "9999"
1298
+ regex: '\A\d{4}\z'
1299
+ characters: 4
1300
+ evidence: secondary-wikipedia
1301
+ charset:
1302
+ basis: secondary-wikipedia
1303
+ notes: >-
1304
+ THE FORMAT IS THE ONLY SECONDARY THING HERE. Danish Wikipedia
1305
+ describes the plate as four red digits, the first two identifying the
1306
+ motor office, followed by a red "DK". The instruments that create and
1307
+ abolish the regime say nothing about its appearance, and SKAT's 2012
1308
+ catalogue postdates its abolition, so nothing primary describes it.
1309
+ The regex covers the four digits only; the "DK" is recorded as a
1310
+ design legend rather than as part of the serial, because no source
1311
+ establishes whether it sits inside the serial field.
1312
+ design:
1313
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, spec: hvid }
1314
+ foreground: "#C8102E"
1315
+ legend: "DK, in red, following the four digits (secondary-wikipedia)"
1316
+ band: { side: none }
1317
+ emblem: { present: false }
1318
+ region_encoding: none
1319
+ region_encoding_note: >-
1320
+ Danish Wikipedia reports that the first two digits identified the issuing
1321
+ motor office. That is a REAL decode claim and it is deliberately NOT
1322
+ shipped as a table: no source, primary or secondary, enumerates the
1323
+ office codes, and a decode table with no rows is worse than none.
1324
+ sources:
1325
+ - "https://www.retsinformation.dk/eli/lta/2010/811/dan/xml # BEK 811/2010 §§ 99-100: temporary registration on nordiske grænsenummerplader of a non-EU/EEA foreign vehicle for up to a year, and the duty to surrender the plates and permit to the police or SKAT on leaving Denmark for anywhere but Finland, Norway or Sweden; accessed 2026-08-02"
1326
+ - "https://www.retsinformation.dk/eli/lta/2011/651/dan/xml # BEK 651/2011 § 101: in force 18 June 2011, repealing BEK 811/2010 — and containing no nordisk grænsenummerplade; accessed 2026-08-02"
1327
+ - "https://www.retsinformation.dk/eli/lta/2007/1567/dan/xml # the regime present in the oldest full text reachable; accessed 2026-08-02"
1328
+ - "https://da.wikipedia.org/wiki/Nummerplade # secondary-wikipedia: four red digits, the first two indicating the motor office, followed by DK in red; accessed 2026-08-02"
1329
+ notes: >-
1330
+ AN ENDED SERIES, kept because its end is exactly dated and because a
1331
+ parse API meeting one of these plates should be told the last one was
1332
+ issued no later than 17 June 2011. It was the Nordic reciprocal
1333
+ arrangement: a foreign vehicle from outside the EU/EEA could be
1334
+ temporarily registered on Danish nordiske grænsenummerplader for up to a
1335
+ year, and the plates and permit had to be handed in at the border on
1336
+ leaving for anywhere other than Finland, Norway or Sweden. BEK 651/2011
1337
+ dropped the whole thing without a transitional provision.
1338
+
1339
+ # =========================================================================
1340
+ # FASTE PRØVESKILTE — trade plates. Red characters on white, two digits.
1341
+ # =========================================================================
1342
+ - id: dk-dealer-testplate
1343
+ class: dealer
1344
+ categories: [car, van, truck, bus, motorcycle, trailer]
1345
+ period: { start: 2008 }
1346
+ period_evidence: instrument-in-force-start-upper-bound
1347
+ period_caveat: >-
1348
+ UPPER BOUND, but a well-evidenced one. BEK 633/2009 § 103 required holders
1349
+ of a fast prøveskilt "der er udleveret før den 1. januar 2008" to have
1350
+ their right renewed by the end of 2013 — so the regime is older than the
1351
+ SKAT era and older than every text reached. 2008 is the commencement of
1352
+ BEK 1567/2007, the oldest full text reachable, and bounds the start from
1353
+ above.
1354
+ matching: strict
1355
+ format:
1356
+ pattern: "LL 99"
1357
+ regex: '\A[A-Z]{2} ?\d{2}\z'
1358
+ regex_strict: '\A[ABCDEFGHJKLMNOPRSTUVWXYZ][ABCDEFGHJKLMNPRSTUVWXYZ] ?[1-9]\d\z'
1359
+ characters: 4
1360
+ charset:
1361
+ basis: secondary-wikipedia
1362
+ notes: "alphabet per common.charset; the 10-99 block is primary from SKAT's catalogue, hence no leading zero in regex_strict"
1363
+ design:
1364
+ plate: { w: 504, h: 120, unit: mm }
1365
+ plate_variants:
1366
+ - { w: 240, h: 165, unit: mm, note: "motorcycle prøveskilt — SKAT rows 3/4 'Faste prøveskilte - MC (hvid)'" }
1367
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, spec: hvid }
1368
+ foreground: "#C8102E"
1369
+ foreground_note: "RED characters on white — SKAT colour cell 'hvid/rød rød', i.e. white ground, red characters, red border. Danish Wikipedia describes the fixed prøveskilt as white with red letters and four black digits; the black digits are not in SKAT's catalogue and are not adopted here"
1370
+ border: { color: "#C8102E", hex_basis: observed, spec: rød }
1371
+ band: { side: left, color: "#003399", content: eu-stars+DK, hex_basis: observed, optional: true }
1372
+ emblem: { present: false }
1373
+ region_encoding: none
1374
+ sources:
1375
+ - "https://www.retsinformation.dk/eli/lta/2025/663/dan/xml # § 68, stk. 4, nr. 5 (the plate type, by reference to §§ 7 a-7 e i lov om registrering af køretøjer); § 77 (§§ 69-71 apply to prøveskilte, except the two-screw rule); accessed 2026-08-02"
1376
+ - "https://web.archive.org/web/20170917063422/https://www.skat.dk/getFiles.aspx?Id=e6c2c7e8-e7a7-4b5e-b15e-4b67e27d3f66&name=planche_nummerplader_2012.pdf # SKAT rows 1-4 'Faste prøveskilte - Biler (hvid)' 120x504 and '- MC (hvid)' 165x240, hvid/rød, 10-99; accessed 2026-08-02"
1377
+ - "https://www.retsinformation.dk/eli/lta/2009/633/dan/xml # § 103: renewal of rights to prøveskilte issued before 1 January 2008 — evidence the regime predates the reachable texts; accessed 2026-08-02"
1378
+ notes: >-
1379
+ THE FAST PRØVESKILT — a trade plate for manufacturers, importers,
1380
+ dealers and repairers, bound to the business rather than to a vehicle,
1381
+ and the shortest Danish number at four characters. Its statutory home is
1382
+ §§ 7 a-7 e of lov om registrering af køretøjer rather than the
1383
+ bekendtgørelse. NOT MODELLED AS A SERIES, deliberately: the LØSE
1384
+ PRØVESKILT was replaced by the PRØVEMÆRKE (§§ 78-81), which is
1385
+ self-adhesive plastic film bearing a løbenummer and a validity period,
1386
+ issued at most fourteen days before that period begins and not returned
1387
+ afterwards. It is a sticker with a running number, not a plate with a
1388
+ registration number, so it has no format this schema can honestly carry
1389
+ and it is recorded here instead.
1390
+
1391
+ # =========================================================================
1392
+ # BLOKVOGN — heavy-haulage. The tallest plate Denmark issues, with a word
1393
+ # printed on it.
1394
+ # =========================================================================
1395
+ - id: dk-blokvogn
1396
+ class: standard
1397
+ categories: [truck, trailer, machine]
1398
+ period: { start: 2008 }
1399
+ period_evidence: instrument-in-force-start-upper-bound
1400
+ period_caveat: "UPPER BOUND, as for dk-tractor-registered: BEK 1567/2007 already requires blokvogne to be registered"
1401
+ matching: strict
1402
+ format:
1403
+ pattern: "99 99 99"
1404
+ regex: '\A\d{2} ?\d{2} ?\d{2}\z'
1405
+ characters: 6
1406
+ pattern_note: >-
1407
+ NO LETTERS, and a six-digit number — the only Danish plate with more
1408
+ than five digits. SKAT's catalogue gives the range as 100000-999999 and
1409
+ renders it in three pairs. The word BLOKVOGN is printed above the
1410
+ number and is a LEGEND, not part of the serial; it is recorded in
1411
+ `design.legend`.
1412
+ charset:
1413
+ basis: primary-authority
1414
+ notes: "digits only, 100000-999999, from SKAT's catalogue"
1415
+ design:
1416
+ plate: { w: 504, h: 207, unit: mm }
1417
+ rows: 2
1418
+ legend: "BLOKVOGN, printed above the number"
1419
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed, spec: hvid }
1420
+ foreground: "#000000"
1421
+ border: { color: "#C8102E", hex_basis: observed, spec: rød }
1422
+ band: { side: left, color: "#003399", content: eu-stars+DK, hex_basis: observed, optional: true }
1423
+ emblem: { present: false }
1424
+ region_encoding: none
1425
+ sources:
1426
+ - "https://web.archive.org/web/20170917063422/https://www.skat.dk/getFiles.aspx?Id=e6c2c7e8-e7a7-4b5e-b15e-4b67e27d3f66&name=planche_nummerplader_2012.pdf # SKAT row 68 'Blokvogne (hvid) EU' 207x504 hvid/sort rød, 'Blokvogn 100000-999999', format rendered 'BLOKVOGN 55 22 25'; accessed 2026-08-02"
1427
+ - "https://www.retsinformation.dk/eli/lta/2025/663/dan/xml # § 3, stk. 1, nr. 2 and stk. 2 (blokvogne must be registered, by reference to §§ 3-4 i lov om registrering af køretøjer); accessed 2026-08-02"
1428
+ notes: >-
1429
+ THE BLOKVOGN PLATE — 504 x 207 mm, nearly twice the height of an ordinary
1430
+ plate, with the word BLOKVOGN printed above a six-digit number and no
1431
+ letters at all. A blokvogn is the Danish heavy-haulage category (§ 3 sends
1432
+ it and tractors down two routes by reference to lov om registrering af
1433
+ køretøjer §§ 3-4). Danish Wikipedia reports that blokvogne are now
1434
+ registered on ordinary yellow commercial plates; SKAT's 2012 catalogue
1435
+ still stocks the dedicated plate, so this file records the dedicated plate
1436
+ as open and flags the conflict rather than resolving it — the sources
1437
+ disagree and PRD-PLATES §5.3 says record, do not average.
1438
+
1439
+ # =========================================================================
1440
+ # LUFTHAVNSPLADER — airside-only plates. Included because SKAT stocks them,
1441
+ # flagged because the class vocabulary has no home for them.
1442
+ # =========================================================================
1443
+ - id: dk-airport-rf
1444
+ class: specialty
1445
+ class_caveat: >-
1446
+ NO CLASS IN _meta/classes.yml FITS. This is an operational plate for a
1447
+ vehicle confined to airport grounds, issued by the state to an airport
1448
+ operator; it is not a specialty-DESIGN programme on a standard serial,
1449
+ which is what `specialty` is defined as. `specialty` is used as the
1450
+ least-wrong placeholder and the mismatch is flagged for the maintainer:
1451
+ the right fix is a vocabulary amendment by PR (a `restricted-area` class
1452
+ or similar), not an ad-hoc value in a data file.
1453
+ categories: [car, van, truck, machine]
1454
+ period: { start: 2012 }
1455
+ period_evidence: agency-series-catalogue
1456
+ period_note: >-
1457
+ 2012 is the date of SKAT's catalogue, the only authority document that
1458
+ describes these plates; it bounds the start from above. Danish Wikipedia
1459
+ reports a colour history — green with black characters, then red with
1460
+ white, then yellow with red "siden 2011" — which if correct puts the
1461
+ current design at 2011; that is secondary and conflicts with the
1462
+ catalogue's own colour words, so it is recorded below rather than adopted.
1463
+ matching: strict
1464
+ format:
1465
+ pattern: "RF 99 999"
1466
+ regex: '\ARF ?\d{2} ?\d{3}\z'
1467
+ characters: 7
1468
+ pattern_note: >-
1469
+ The letters are FIXED at RF, so they are spelled as literals rather than
1470
+ as pattern tokens. Danish Wikipedia glosses RF as "RegistreringsFri"
1471
+ (registration-free), which is consistent with the vehicles being outside
1472
+ ordinary registration; that gloss is secondary-wikipedia.
1473
+ charset:
1474
+ basis: primary-authority
1475
+ notes: "RF + five digits, block RF10000-RF99999, from SKAT's catalogue"
1476
+ design:
1477
+ plate: { w: 504, h: 120, unit: mm }
1478
+ background: { color: "#C8102E", finish: retroreflective, hex_basis: observed, spec: rød }
1479
+ foreground: "#FFCC00"
1480
+ colour_conflict: >-
1481
+ RECORDED, NOT RESOLVED. SKAT's colour cell reads "rød/gul rød", which
1482
+ under the background/characters/border reading used throughout this file
1483
+ gives a RED ground with YELLOW characters and a red border. Danish
1484
+ Wikipedia says the opposite for the same period: "siden 2011 gule med
1485
+ røde tegn" — yellow ground, red characters. Both are recorded; the SKAT
1486
+ reading is the one encoded because it is the authority's own document,
1487
+ and the conflict is flagged for the verifier.
1488
+ band: { side: none }
1489
+ emblem: { present: false }
1490
+ region_encoding: none
1491
+ sources:
1492
+ - "https://web.archive.org/web/20170917063422/https://www.skat.dk/getFiles.aspx?Id=e6c2c7e8-e7a7-4b5e-b15e-4b67e27d3f66&name=planche_nummerplader_2012.pdf # SKAT row 45 'Lufthavnsplader - rektangulær' 120x504 rød/gul rød RF10000-RF99999, format 'RF 24 721'; accessed 2026-08-02"
1493
+ - "https://da.wikipedia.org/wiki/Nummerplade # secondary-wikipedia: the RF series is used at Danish airports (Copenhagen/Kastrup, Aalborg, Billund), the vehicles may use public roads only by dispensation or on temporary prøveskilte because the insurance covers airport grounds only, and the colour history green -> red -> yellow-with-red since 2011; accessed 2026-08-02"
1494
+ notes: >-
1495
+ AIRSIDE PLATES. Included because they are a stocked, formatted, numbered
1496
+ Danish plate type in the authority's own catalogue, and because a parse
1497
+ API meeting "RF 24 721" should not silently fail. Two things make them
1498
+ unlike everything else in this file: the vehicles are not ordinarily
1499
+ registered for road use at all, and the letters are fixed rather than
1500
+ serial. See `class_caveat` — the class vocabulary needs an amendment, and
1501
+ this series is where the need shows up.
1502
+
1503
+ - id: dk-airport-rf-trailer
1504
+ class: specialty
1505
+ class_caveat: "as dk-airport-rf"
1506
+ categories: [trailer]
1507
+ period: { start: 2012 }
1508
+ period_evidence: agency-series-catalogue
1509
+ period_note: "as dk-airport-rf — the SKAT catalogue's own date, bounding the start from above"
1510
+ matching: strict
1511
+ format:
1512
+ pattern: "RF 99 99"
1513
+ regex: '\ARF ?\d{2} ?\d{2}\z'
1514
+ characters: 6
1515
+ charset:
1516
+ basis: primary-authority
1517
+ notes: >-
1518
+ RF + four digits. SKAT's catalogue prints the range as
1519
+ "RF1000-FR9999"; the trailing "FR" is a transposition in the source
1520
+ and is recorded as such, not silently corrected — the format cell on
1521
+ the same row renders "RF 24 72", so the prefix is RF at both ends.
1522
+ design:
1523
+ plate: { w: 504, h: 120, unit: mm }
1524
+ background: { color: "#C8102E", finish: retroreflective, hex_basis: observed, spec: rød }
1525
+ foreground: "#FFCC00"
1526
+ colour_conflict: "as dk-airport-rf"
1527
+ band: { side: none }
1528
+ emblem: { present: false }
1529
+ region_encoding: none
1530
+ sources:
1531
+ - "https://web.archive.org/web/20170917063422/https://www.skat.dk/getFiles.aspx?Id=e6c2c7e8-e7a7-4b5e-b15e-4b67e27d3f66&name=planche_nummerplader_2012.pdf # SKAT row 47 'Lufthavnsplader - påhængsvogn' 120x504 rød/gul rød 'RF1000-FR9999', format 'RF 24 72'; accessed 2026-08-02"
1532
+ notes: >-
1533
+ The airside trailer plate — four digits instead of five, which is the
1534
+ only thing separating it from dk-airport-rf and the reason it is a series
1535
+ of its own rather than a variant. The typo in SKAT's range cell is left
1536
+ standing and annotated; a dataset that silently repairs its sources
1537
+ cannot be audited against them.
1538
+
1539
+ # ---------------------------------------------------------------------------
1540
+ # GAPS — what this pass could NOT establish. Recorded here because a stated
1541
+ # gap is a finding and a silent one is a defect (PRD-PLATES §5.1
1542
+ # jurisdiction-completeness).
1543
+ # ---------------------------------------------------------------------------
1544
+ gaps:
1545
+ - id: dk-gap-military
1546
+ what: "Forsvarets nummerplader — the Danish armed forces' own plates"
1547
+ why_not_shipped: >-
1548
+ A SCHEMA COLLISION, not a sourcing failure, and it is worth reporting as
1549
+ such. Danish Wikipedia describes the plate as a branch emblem followed by
1550
+ five digits "hvor der mellem andet og tredje ciffer er et punktum" — a
1551
+ FULL STOP inside the number, printed between the second and third digit.
1552
+ U+002E is in _meta/separators.yml's `forgiving` set but NOT in its
1553
+ `emitted` set, so the dataset cannot spell this plate's printed form
1554
+ without either failing the lint or misrepresenting the plate by writing a
1555
+ hyphen or a space in place of the stop. Per PRD-PLATES §2.6 that is a
1556
+ schema amendment (a `never_separator` entry, or an addition to `emitted`
1557
+ with its rationale), not a data entry, and it is out of scope for a
1558
+ jurisdiction pass. No Forsvarsministeriet instrument was located.
1559
+ sources:
1560
+ - "https://da.wikipedia.org/wiki/Nummerplade # secondary-wikipedia: black ground, white characters, yellow branch emblem for Hæren, Søværnet, Flyvevåbnet and the joint authorities; a mark plus five digits with a full stop between the second and third; accessed 2026-08-02"
1561
+ - id: dk-gap-emergency
1562
+ what: "Beredskabsstyrelsen (Danish Emergency Management Agency) plates"
1563
+ why_not_shipped: >-
1564
+ Same full-stop collision as the military plate on the five-digit form,
1565
+ plus a variable digit count. Danish Wikipedia describes a blue ground with
1566
+ orange characters, the agency's own mark, then one, two, three or five
1567
+ digits denoting the vehicle's attachment, with a full stop between the
1568
+ second and third digit on the five-digit form. No instrument located.
1569
+ sources:
1570
+ - "https://da.wikipedia.org/wiki/Nummerplade # secondary-wikipedia; the article cites nrpl.dk; accessed 2026-08-02"
1571
+ - id: dk-gap-municipal
1572
+ what: "Særlige kommunale nummerplader — municipal plates, incl. fire brigades"
1573
+ why_not_shipped: >-
1574
+ THE POWER IS PRIMARY BUT THE FORMAT IS NOT. BEK 663/2025 § 3, stk. 4: a
1575
+ municipality's vehicle that is exempt from registration tax under
1576
+ registreringsafgiftslovens § 2, stk. 1, nr. 3 or 4 "skal ... registreres i
1577
+ Køretøjsregisteret, men kan føre særlige kommunale nummerplader", and
1578
+ § 68, stk. 1 exempts them from the rectangular/square requirement. The
1579
+ instrument stops there: no format, no colours, no size. Danish Wikipedia
1580
+ describes a municipal coat of arms in the centre with letters and digits
1581
+ on either side, possibly beginning KF. That is not a grammar, and a
1582
+ guessed pattern would fail the round-trip honestly or pass it dishonestly.
1583
+ sources:
1584
+ - "https://www.retsinformation.dk/eli/lta/2025/663/dan/xml # § 3, stk. 4; § 68, stk. 1; accessed 2026-08-02"
1585
+ - "https://da.wikipedia.org/wiki/Nummerplade # secondary-wikipedia: municipal arms centred, alphanumerics either side, may begin KF; closed-track shadow plates beginning FF; accessed 2026-08-02"
1586
+ - id: dk-gap-royal
1587
+ what: "Kongehusets nummerplader — the royal household's plates"
1588
+ why_not_shipped: >-
1589
+ Danish Wikipedia describes a golden crown and a running number of up to
1590
+ three digits in white. No ground colour, no size, no instrument, and no
1591
+ grammar for the number. Not shipped.
1592
+ sources:
1593
+ - "https://da.wikipedia.org/wiki/Nummerplade # secondary-wikipedia; accessed 2026-08-02"
1594
+ - id: dk-gap-heavy-bus-lorry
1595
+ what: "What plate a bus, or a lorry above 4 t, carries"
1596
+ why_not_shipped: >-
1597
+ SKAT's catalogue names only "Personbiler" and "Vare-lastbiler", and the
1598
+ vægtafgiftslov § 2 a split that the yellow and parrot plates track is
1599
+ confined to vare- and lastbiler of not more than 4 t (§§ 82 and 85). No
1600
+ source reached says which type a bus or a heavier lorry draws.
1601
+ dk-standard-1976 therefore claims `categories: [car]` and nothing more.
1602
+ - id: dk-gap-1958-and-1976-instruments
1603
+ what: "The instruments that enacted the 1 April 1958 and 1 April 1976 numbering reforms"
1604
+ why_not_shipped: >-
1605
+ Both dates are stated inside instruments that are in force or recently in
1606
+ force (see THE FOUR DATES above), but neither ENACTING instrument was
1607
+ reached, so both series carry `period_evidence: statutory-date` rather
1608
+ than `instrument-in-force`. The obstacle is concrete and worth recording
1609
+ for whoever picks this up: retsinformation.dk serves full document bodies
1610
+ only for the newer part of its corpus. Of the registreringsbekendtgørelse
1611
+ chain, BEK 1567/2007 onwards return a complete ELI XML embodiment
1612
+ (/eli/lta/{year}/{nr}/dan/xml), while BEK 1067/2005, BEK 1350/2000, BEK
1613
+ 916/1997, BEK 592/1996 and BEK 18/1992 return metadata only — 1-4 KB of
1614
+ Meta with no body — and their HTML and legacy R0710.aspx URLs redirect
1615
+ into the site's single-page app. A 1976 Justitsministeriet bekendtgørelse
1616
+ is very unlikely to be in the corpus at all. Danish Wikipedia offers
1617
+ 1903-1958 (one letter + up to six digits, the letter marking the amt) and
1618
+ a two-letter era from 1958; that is secondary-wikipedia and is not shipped
1619
+ as a series.
1620
+ - id: dk-gap-pre1958-county-letters
1621
+ what: "A decode table for the pre-1958 single county letter"
1622
+ why_not_shipped: >-
1623
+ The single letter WAS geographic — that much is primary by implication,
1624
+ since BEK 633/2009 § 101, stk. 2 and BEK 651/2011 § 102, stk. 2 keep
1625
+ single-letter plates lawful, and both Wikipedias describe the letter as an
1626
+ amt or city marker. But no source reached, primary or secondary,
1627
+ ENUMERATES the letters against their counties. A decode table needs rows;
1628
+ this one would have none, so none is shipped. Named for whoever resolves
1629
+ it: the enthusiast register nrpl.dk (cited by both Wikipedia articles) is
1630
+ the likeliest place a full list exists.
1631
+ - id: dk-gap-yellow-plate-date
1632
+ what: "When the yellow goods-vehicle plate was introduced"
1633
+ why_not_shipped: >-
1634
+ No Danish instrument specifies plate colours (see the header), so nothing
1635
+ dates the yellow plate. The earliest evidence reached is SKAT's own
1636
+ catalogue: the 2009 skat.dk plate pages and the 2012 poster. The series
1637
+ ships with the 1976 numbering date and a loud `period_caveat` rather than
1638
+ with a colour date it cannot support.
1639
+ - id: dk-gap-faroe-greenland
1640
+ what: "Faroe Islands (FO) and Greenland (GL) plates"
1641
+ why_not_shipped: >-
1642
+ OUT OF SCOPE BY THE INSTRUMENT'S OWN DEFINITION, not by omission. BEK
1643
+ 663/2025 § 1, stk. 4: "»her i landet« om Kongeriget Danmark, bortset fra
1644
+ Færøerne og Grønland." Both have their own ISO 3166-1 codes and their own
1645
+ registers; neither is modelled in this file. English Wikipedia covers both
1646
+ inside its Denmark article, which is a trap for anyone extending this file
1647
+ rather than creating fo.yml and gl.yml.