vehicles 0.4.0 → 0.6.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +55 -1
- data/README.md +36 -8
- data/data/plates/PROVENANCE.md +9 -0
- data/data/plates/_decode/es-provinces.yml +116 -0
- data/data/plates/_meta/classes.yml +25 -0
- data/data/plates/de.yml +672 -0
- data/data/plates/es.yml +692 -0
- data/data/plates/nl.yml +972 -0
- data/data/plates/us-fl.yml +518 -0
- data/data/vehicles.json +28109 -37241
- data/lib/vehicles/configuration.rb +4 -2
- data/lib/vehicles/model.rb +23 -6
- data/lib/vehicles/plates/jurisdiction.rb +32 -0
- data/lib/vehicles/plates/series.rb +137 -0
- data/lib/vehicles/plates.rb +110 -0
- data/lib/vehicles/providers/hosted_provider.rb +26 -8
- data/lib/vehicles/providers/local_provider.rb +4 -3
- data/lib/vehicles/version.rb +1 -1
- data/lib/vehicles.rb +21 -0
- metadata +12 -2
data/data/plates/de.yml
ADDED
|
@@ -0,0 +1,672 @@
|
|
|
1
|
+
# plates/de.yml — Germany (PRD-PLATES gate L0 pilot).
|
|
2
|
+
#
|
|
3
|
+
# EVERY format, colour and class claim here comes from the consolidated
|
|
4
|
+
# Fahrzeug-Zulassungsverordnung (FZV) of 20 July 2023, BGBl. 2023 I Nr. 199,
|
|
5
|
+
# Textnachweis ab 1.9.2023, replacing FZV 2011 (V v. 3.2.2011 I 139), last
|
|
6
|
+
# amended by Art. 5 G v. 12.5.2026 (BGBl. 2026 I Nr. 142) — the Vollzitat as
|
|
7
|
+
# printed on gesetze-im-internet's own PDF front matter.
|
|
8
|
+
#
|
|
9
|
+
# THE THREE STRUCTURAL FACTS THAT SHAPE THIS FILE
|
|
10
|
+
#
|
|
11
|
+
# 1. THE DISTRICT CODES ARE NOT IN THE FZV. § 9 Abs. 3 FZV, verbatim: "Die
|
|
12
|
+
# Unterscheidungszeichen der Verwaltungsbezirke werden auf Antrag der Länder
|
|
13
|
+
# vom Bundesministerium für Verkehr festgelegt oder aufgehoben. ... Die
|
|
14
|
+
# Festlegung und Aufhebung der Unterscheidungszeichen ist vom
|
|
15
|
+
# Bundesministerium für Verkehr unverzüglich im Bundesanzeiger zu
|
|
16
|
+
# veröffentlichen." So the ~400-code district list is a BUNDESANZEIGER
|
|
17
|
+
# publication. It is therefore NOT authored here as 700 rows of guesswork:
|
|
18
|
+
# region_encoding points at a future _decode file and this file cites the
|
|
19
|
+
# MECHANISM. Anlage 2 FZV — which IS in the regulation — is inlined instead,
|
|
20
|
+
# because it is small, closed and primary.
|
|
21
|
+
# § 9 Abs. 3 also states the two rules a decode table must carry: a Land may
|
|
22
|
+
# apply for MORE THAN ONE code per district, and "Ein Kennzeichen, dessen
|
|
23
|
+
# Unterscheidungszeichen aufgehoben ist, darf bis zur Außerbetriebsetzung
|
|
24
|
+
# des betroffenen Fahrzeuges weitergeführt werden" — withdrawn codes stay on
|
|
25
|
+
# the road, so decode rows need period discipline, never deletion.
|
|
26
|
+
#
|
|
27
|
+
# 2. ANLAGE 1 IS THE SERIAL GRAMMAR, AND IT IS COMPLETE. Five shapes, verbatim,
|
|
28
|
+
# plus the letter rule: "Mit Ausnahme der Umlaute Ä, Ö und Ü können alle
|
|
29
|
+
# übrigen Buchstaben des Alphabets ... zugeteilt werden."
|
|
30
|
+
# a) A 1 – A 999 bis Z 1 – Z 999
|
|
31
|
+
# b) AA 1 – AA 99 bis ZZ 1 – ZZ 99
|
|
32
|
+
# c) AA 100 – AA 999 bis ZZ 100 – ZZ 999
|
|
33
|
+
# d) A 1000 – A 9999 bis Z 1000 – Z 9999
|
|
34
|
+
# e) AA 1000 – AA 9999 bis ZZ 1000 – ZZ 9999
|
|
35
|
+
# Union: 1–2 letters + 1–4 digits, with NO LEADING ZEROS (every block starts
|
|
36
|
+
# at 1, 100 or 1000). Combined with Anlage 4 Abschnitt 1 Nr. 4 — "Mehr als
|
|
37
|
+
# acht Stellen (Buchstaben des Unterscheidungszeichens sowie Buchstaben und
|
|
38
|
+
# Ziffern der Erkennungsnummer) auf einem Kennzeichen sind unzulässig" — the
|
|
39
|
+
# total is capped at eight positions, which the standard series' regex
|
|
40
|
+
# enforces with a negative lookahead (the only illegal combination the
|
|
41
|
+
# quantifiers alone would admit is 3 letters + 2 letters + 4 digits = 9).
|
|
42
|
+
#
|
|
43
|
+
# 3. PERIOD CLAIMS ARE INSTRUMENT-DATED, AND SAY SO. The German
|
|
44
|
+
# Unterscheidungszeichen + Erkennungsnummer system, and the Euro-Feld
|
|
45
|
+
# design, both predate the FZV 2023 by decades. NO PRIMARY for either origin
|
|
46
|
+
# date was secured in this pass (see the L0 report's gap list), so every
|
|
47
|
+
# entry carries `period_evidence: instrument-in-force` and a note saying in
|
|
48
|
+
# terms that the year is the date of the instrument that STATES the rule, not
|
|
49
|
+
# the date the series began. The two exceptions are dated from their own
|
|
50
|
+
# enabling statute: the E-Kennzeichen (Elektromobilitätsgesetz of
|
|
51
|
+
# 5 June 2015) and the moped insurance-plate colour cycle (anchored on the
|
|
52
|
+
# Verkehrsjahr the FZV names).
|
|
53
|
+
#
|
|
54
|
+
# REGEX POLICY: as in plates/nl.yml, `format.regex` is the lint-round-trippable
|
|
55
|
+
# regex and `format.regex_strict` (proposed schema addition) carries the
|
|
56
|
+
# tighter, sourced form — here, the no-leading-zeros rule from Anlage 1, which
|
|
57
|
+
# cannot go in `regex` because the lint generates "0" for a pattern "9".
|
|
58
|
+
jurisdiction: de
|
|
59
|
+
authority:
|
|
60
|
+
name: Fahrzeug-Zulassungsverordnung (FZV) — Bundesministerium für Digitales und Verkehr
|
|
61
|
+
url: "https://www.gesetze-im-internet.de/fzv_2023/"
|
|
62
|
+
binding: vehicle
|
|
63
|
+
instrument:
|
|
64
|
+
citation: "Fahrzeug-Zulassungsverordnung vom 20. Juli 2023 (BGBl. 2023 I Nr. 199, S. 2), zuletzt geändert durch Artikel 5 des Gesetzes vom 12. Mai 2026 (BGBl. 2026 I Nr. 142)"
|
|
65
|
+
# NOTE: quoted deliberately. scripts/lint_plates.rb calls
|
|
66
|
+
# YAML.safe_load_file(..., permitted_classes: []), so a BARE YAML date
|
|
67
|
+
# (2023-07-20) raises Psych::DisallowedClass and takes the whole lint run
|
|
68
|
+
# down with a backtrace rather than a LINT FAIL line. Every date-shaped
|
|
69
|
+
# value in the plates dataset must be a quoted string or an integer.
|
|
70
|
+
ausfertigungsdatum: "2023-07-20"
|
|
71
|
+
textnachweis_ab: "2023-09-01"
|
|
72
|
+
replaces: "FZV 2011 (V 9232-14 v. 3.2.2011 I 139)"
|
|
73
|
+
source: "https://www.gesetze-im-internet.de/fzv_2023/FZV.pdf # front matter: Ausfertigungsdatum, Vollzitat, Stand, 'Ersetzt V 9232-14 v. 3.2.2011 I 139 (FZV 2011)', 'Textnachweis ab: 1.9.2023'"
|
|
74
|
+
|
|
75
|
+
# ---------------------------------------------------------------------------
|
|
76
|
+
# Jurisdiction-wide facts, cited once.
|
|
77
|
+
# ---------------------------------------------------------------------------
|
|
78
|
+
common:
|
|
79
|
+
colours:
|
|
80
|
+
standard: "§ 12 Abs. 1 FZV, verbatim: 'Das Unterscheidungszeichen und die Erkennungsnummern sind mit schwarzer Schrift auf weißem schwarz gerandetem Grund auf ein Kennzeichenschild aufzubringen.' — black script on a white, black-bordered ground. This is the COLOUR SPEC; Anlage 4's drawings carry no separate RGB/RAL values for general plates."
|
|
81
|
+
source: "https://www.gesetze-im-internet.de/fzv_2023/__12.html # § 12 Abs. 1 (colours), Abs. 2 (reflective, DIN 74069 Oct 2022 Abschnitte 1-8, DIN test mark + register number), Abs. 5 (front and rear required; rear only for trailers, motorcycles and class L5e)"
|
|
82
|
+
dimensions:
|
|
83
|
+
single_line: { w: 520, h: 110, unit: mm, note: "Größtmaß" }
|
|
84
|
+
two_line: { w: 340, h: 200, unit: mm, note: "Größtmaß; 280 mm on two- and three-wheeled motor vehicles" }
|
|
85
|
+
motorcycle: { w_min: 180, w_max: 220, h: 200, unit: mm }
|
|
86
|
+
reduced_two_line: { w: 255, h: 130, unit: mm, note: "Leichtkrafträder and § 12 Abs. 6 Nr. 1 vehicles only" }
|
|
87
|
+
source: "https://www.gesetze-im-internet.de/fzv_2023/anlage_4.html # Anlage 4 Abschnitt 1 Nr. 1 a)-d), Fundstelle BGBl. 2023 I Nr. 199, S. 71-91"
|
|
88
|
+
font:
|
|
89
|
+
name: FE-Schrift (fälschungserschwerende Schrift)
|
|
90
|
+
statutory_basis: "Anlage 4 Abschnitt 1 Nr. 2.1: 'Die Beschriftung muss den Schriftmustern \"Schrift für Kfz-Kennzeichen\" entsprechen.' The Schriftmuster are obtainable from the Bundesanstalt für Straßen- und Verkehrswesen, Postfach 10 01 50, 51401 Bergisch Gladbach."
|
|
91
|
+
sizes: { mittelschrift: 75, engschrift: 75, verkleinerte_mittelschrift: 49, unit: mm, note: "verkleinerte Mittelschrift only for reduced two-line and motorcycle plates" }
|
|
92
|
+
alternate: "DIN 1451-2:1986-02 (Verkehrsschrift) for Bundeswehr plates and Versicherungskennzeichen"
|
|
93
|
+
licence: >-
|
|
94
|
+
NO LICENSABLE FONT IS MANDATED. The legal object is a statutory
|
|
95
|
+
Schriftmuster (a drawing), exactly as the EU dossier found for the UK and
|
|
96
|
+
Spain. Per PRD-PLATES §6 the render layer derives glyphs from the
|
|
97
|
+
statutory drawing, never from a third-party FE-Schrift TTF whose own
|
|
98
|
+
licence is unstated. Germany is additionally the affirmatively favourable
|
|
99
|
+
case (PD-VzKat / §5(1) UrhG: designs published inside statutory
|
|
100
|
+
instruments are public domain).
|
|
101
|
+
source: "https://www.gesetze-im-internet.de/fzv_2023/anlage_4.html # Anlage 4 Abschnitt 1 Nr. 2.1-2.3.2"
|
|
102
|
+
euro_band:
|
|
103
|
+
side: left
|
|
104
|
+
content: eu-stars+D
|
|
105
|
+
geometry: "Anlage 4 Abschnitt 1 Nr. 3: 'Der Durchmesser des Sternenkranzes entspricht dem Sechsfachen des Durchmessers des einzelnen Sterns.' A light edge of at most 2.0 mm is permitted between the Euro-Feld and the black border. 'Die Ausführung des Erkennungsbuchstabens \"D\" erfolgt nach der Verordnung (EG) Nr. 2411/98 vom 3. November 1998.'"
|
|
106
|
+
note: >-
|
|
107
|
+
This is the ONE hard piece of Euroband geometry secured anywhere in the L0
|
|
108
|
+
pass: a ratio (star-circle diameter = 6x single-star diameter), given as
|
|
109
|
+
text in German law. Reg. 2411/98's own annex is a bitmap and Spain's
|
|
110
|
+
Cuadro 5 is a drawing, so DE Anlage 4 Nr. 3 is the citable source for the
|
|
111
|
+
star wreath's proportions.
|
|
112
|
+
source: "https://www.gesetze-im-internet.de/fzv_2023/anlage_4.html # Anlage 4 Abschnitt 1 Nr. 3"
|
|
113
|
+
anlage1_grammar:
|
|
114
|
+
shapes:
|
|
115
|
+
- "a) A 1 – A 999 bis Z 1 – Z 999"
|
|
116
|
+
- "b) AA 1 – AA 99 bis ZZ 1 – ZZ 99"
|
|
117
|
+
- "c) AA 100 – AA 999 bis ZZ 100 – ZZ 999"
|
|
118
|
+
- "d) A 1000 – A 9999 bis Z 1000 – Z 9999"
|
|
119
|
+
- "e) AA 1000 – AA 9999 bis ZZ 1000 – ZZ 9999"
|
|
120
|
+
letters_excluded: ["Ä", "Ö", "Ü"]
|
|
121
|
+
no_leading_zeros: true
|
|
122
|
+
max_positions: 8
|
|
123
|
+
source: "https://www.gesetze-im-internet.de/fzv_2023/anlage_1.html # Anlage 1 (zu § 9 Absatz 1 Satz 4), Fundstelle BGBl. 2023 I Nr. 199, S. 67 — the five shapes and the umlaut exclusion, verbatim"
|
|
124
|
+
|
|
125
|
+
# Anlage 2 FZV — the SMALL, CLOSED, primary code table (contrast the district
|
|
126
|
+
# list, which is not in the FZV at all). Inlined per PRD-PLATES §2.4's
|
|
127
|
+
# "inline table (small) or a reference (large)" rule.
|
|
128
|
+
region_encoding_tables:
|
|
129
|
+
anlage2_federal_and_diplomatic:
|
|
130
|
+
source: "https://www.gesetze-im-internet.de/fzv_2023/anlage_2.html # Anlage 2 (zu § 9 Absatz 1 Satz 6), Fundstelle BGBl. 2023 I Nr. 199, S. 68-69"
|
|
131
|
+
bund:
|
|
132
|
+
BD: "Dienstfahrzeuge des Bundestages, Bundesrates, Bundespräsidialamtes, der Bundesregierung, Bundesministerien, Bundesfinanzverwaltung, des Bundesverfassungsgerichts und Bundeskriminalamtes"
|
|
133
|
+
BG: "Bundespolizei — noch gültig, wird nicht mehr zugeteilt (still valid, no longer assigned)"
|
|
134
|
+
BP: "Dienstfahrzeuge der Bundespolizei"
|
|
135
|
+
BW: "Bundes-Wasserstraßen- und Schifffahrtsverwaltung"
|
|
136
|
+
THW: "Bundesanstalt Technisches Hilfswerk"
|
|
137
|
+
Y: "Dienstfahrzeuge der Bundeswehr (Zentrale Militärkraftfahrtstelle, Mönchengladbach/Rheindahlen)"
|
|
138
|
+
X: "internationale militärische Hauptquartiere nach dem Nordatlantikvertrag mit Standort in Deutschland"
|
|
139
|
+
laender:
|
|
140
|
+
B: "Berlin — Senat und Abgeordnetenhaus"
|
|
141
|
+
BBL: "Brandenburg — Landesregierung, Landtag und Polizei"
|
|
142
|
+
BWL: "Baden-Württemberg — Landesregierung, Landtag und Polizei"
|
|
143
|
+
BYL: "Bayern — Landesregierung und Landtag"
|
|
144
|
+
HB: "Freie Hansestadt Bremen — Senat und Bürgerschaft"
|
|
145
|
+
HEL: "Hessen — Landesregierung und Landtag"
|
|
146
|
+
HH: "Freie und Hansestadt Hamburg — Senat und Bürgerschaft"
|
|
147
|
+
LSA: "Sachsen-Anhalt — Landesregierung, Landtag und Polizei"
|
|
148
|
+
LSN: "Sachsen — Landesregierung und Landtag"
|
|
149
|
+
MVL: "Mecklenburg-Vorpommern — Landesregierung (einschließlich Landespolizei) und Landtag"
|
|
150
|
+
NL: "Niedersachsen — Landesregierung und Landtag"
|
|
151
|
+
NRW: "Nordrhein-Westfalen — Landesregierung, Landtag und Polizei"
|
|
152
|
+
RPL: "Rheinland-Pfalz — Landesregierung, Landtag und Polizei"
|
|
153
|
+
SAL: "Saarland — Landesregierung, Landtag und Polizei"
|
|
154
|
+
SH: "Schleswig-Holstein — Landesregierung, Landtag und Polizei"
|
|
155
|
+
THL: "Thüringen — Landesregierung und Landtag"
|
|
156
|
+
diplomatic:
|
|
157
|
+
"0": "Diplomatische Vertretungen oder internationale Organisationen, abhängig vom Status der bevorrechtigten Person (Zulassungsbehörde Berlin/Bonn)"
|
|
158
|
+
B: "same, Berlin"
|
|
159
|
+
BN: "same, Bonn"
|
|
160
|
+
consular: "Berufskonsularische Vertretungen carry the UNTERSCHEIDUNGSZEICHEN OF THE DISTRICT WHERE THE CONSULATE SITS — i.e. an ordinary district code, which is why consular vehicles are not separable by prefix"
|
|
161
|
+
bundestag_president: { "1-1": "Dienstkraftwagen des Präsidenten des Deutschen Bundestages (Zulassungsbehörde Berlin)" }
|
|
162
|
+
note: >-
|
|
163
|
+
COLLISION WORTH FLAGGING: "B" is simultaneously a district code (Berlin),
|
|
164
|
+
a Land code (Berlin Senat/Abgeordnetenhaus) and a diplomatic code. "NL" is
|
|
165
|
+
the Niedersachsen Land code and also the Dutch international
|
|
166
|
+
distinguishing sign. Neither is resolvable from the prefix alone.
|
|
167
|
+
|
|
168
|
+
series:
|
|
169
|
+
|
|
170
|
+
# =========================================================================
|
|
171
|
+
# THE STANDARD SERIES.
|
|
172
|
+
# =========================================================================
|
|
173
|
+
- id: de-standard
|
|
174
|
+
class: standard
|
|
175
|
+
categories: [car, van, truck, bus, motorcycle, trailer]
|
|
176
|
+
period: { start: 2023 }
|
|
177
|
+
period_evidence: instrument-in-force
|
|
178
|
+
format:
|
|
179
|
+
pattern: "LL-LL 9999"
|
|
180
|
+
regex: '\A(?![A-Z]{3}-[A-Z]{2} ?\d{4}\z)[A-Z]{1,3}-[A-Z]{1,2} ?\d{1,4}\z'
|
|
181
|
+
regex_strict: '\A(?![A-Z]{3}-[A-Z]{2} ?\d{4}\z)[A-Z]{1,3}-[A-Z]{1,2} ?(?:[1-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3})\z'
|
|
182
|
+
charset:
|
|
183
|
+
letters_excluded: ["Ä", "Ö", "Ü"]
|
|
184
|
+
notes: >-
|
|
185
|
+
Anlage 1 Nr. 1: every letter of the alphabet except the umlauts Ä, Ö and Ü
|
|
186
|
+
may be assigned in the Erkennungsnummer, singly or as a pair. The FZV
|
|
187
|
+
imposes no further letter exclusion on the Erkennungsnummer, but § 9 Abs. 1
|
|
188
|
+
Satz 3 forbids combinations that "gegen die guten Sitten verstoßen" — a
|
|
189
|
+
discretionary rule, not an enumerable exclusion list, and the reason no
|
|
190
|
+
profanity blacklist is authored here.
|
|
191
|
+
progression: >-
|
|
192
|
+
Anlage 1 Nr. 2 allocates the Erkennungsnummer in five blocks: a) 1 letter +
|
|
193
|
+
1-999, b) 2 letters + 1-99, c) 2 letters + 100-999, d) 1 letter + 1000-9999,
|
|
194
|
+
e) 2 letters + 1000-9999. Every block starts at 1, 100 or 1000, so NO LEADING
|
|
195
|
+
ZEROS are ever issued — regex_strict enforces this; `regex` cannot, because
|
|
196
|
+
the lint's pattern generator emits "0" for a "9" placeholder.
|
|
197
|
+
max_positions: 8
|
|
198
|
+
max_positions_note: >-
|
|
199
|
+
Anlage 4 Abschnitt 1 Nr. 4: at most eight positions counting the
|
|
200
|
+
Unterscheidungszeichen's letters plus the Erkennungsnummer's letters and
|
|
201
|
+
digits. The negative lookahead in both regexes excludes the single
|
|
202
|
+
over-length shape the quantifiers would otherwise admit (3 + 2 + 4 = 9).
|
|
203
|
+
separator_note: >-
|
|
204
|
+
The gap between Unterscheidungszeichen and Erkennungsnummer is physically
|
|
205
|
+
occupied by the two Plaketten (Stempelplakette + HU badge), not by a printed
|
|
206
|
+
separator. The hyphen and space in the pattern are the conventional textual
|
|
207
|
+
rendering; both regexes accept the space as optional.
|
|
208
|
+
design:
|
|
209
|
+
plate: { w: 520, h: 110, unit: mm }
|
|
210
|
+
plate_variants:
|
|
211
|
+
- { w: 340, h: 200, unit: mm, note: "zweizeilig; 280 mm wide on two- and three-wheeled motor vehicles" }
|
|
212
|
+
- { w_min: 180, w_max: 220, h: 200, unit: mm, note: "Kraftradkennzeichen" }
|
|
213
|
+
- { w: 255, h: 130, unit: mm, note: "verkleinertes zweizeiliges Kennzeichen — Leichtkrafträder and § 12 Abs. 6 Nr. 1 vehicles only, or by exception where a compliant rear plate cannot be fitted" }
|
|
214
|
+
background: { color: "#FFFFFF", finish: retroreflective, hex_basis: spec, spec_note: "§ 12 Abs. 1 FZV: weißer Grund; retroreflection per DIN 74069 Oct 2022 (§ 12 Abs. 2)" }
|
|
215
|
+
foreground: "#000000"
|
|
216
|
+
border: { color: "#000000", note: "Anlage 4 permits black, GREEN or RED borders depending on plate type" }
|
|
217
|
+
band: { side: left, color: "#003399", content: eu-stars+D, hex_basis: observed, note: "the FZV states the star-wreath ratio and cross-references Reg. 2411/98 for the 'D', but gives no RGB/RAL for the blue field" }
|
|
218
|
+
emblem: { present: true, rendered: placeholder, note: "the Stempelplakette carries the FARBIGES WAPPEN DES LANDES (§ 12 Abs. 3) — a coat of arms per Land. PRD-PLATES §3 placeholder rule applies: 16 Land arms, none licence-cleared." }
|
|
219
|
+
seal: { name: Stempelplakette, diameter_mm: null, content: "coloured Land arms, Land name, registration authority name, unique Druckstücknummer, and a CONCEALED security code that can only be revealed irreversibly; self-destroying on removal", source_note: "§ 12 Abs. 3 FZV + Anlage 5" }
|
|
220
|
+
rear_differs: false
|
|
221
|
+
display: "front and rear on motor vehicles; rear only on trailers, motorcycles and class L5e vehicles; front only on single-axle tractors (§ 12 Abs. 5 FZV)"
|
|
222
|
+
region_encoding: "plates/_decode/de-districts.yml"
|
|
223
|
+
region_encoding_mechanism: >-
|
|
224
|
+
The Unterscheidungszeichen is 1-3 letters identifying the Verwaltungsbezirk of
|
|
225
|
+
registration (§ 9 Abs. 1 Nr. 1). The list is set by the BMDV on application by
|
|
226
|
+
the Länder and published in the BUNDESANZEIGER (§ 9 Abs. 3) — NOT in the FZV
|
|
227
|
+
and NOT by the KBA. A district may hold more than one code, applied for when
|
|
228
|
+
"ohne dieses ein Verbrauch der verfügbaren Kennzeichenkombinationen unmittelbar
|
|
229
|
+
bevorsteht". A withdrawn code may be carried until the vehicle is
|
|
230
|
+
deregistered, so decode rows close by period and are never deleted. The split
|
|
231
|
+
point between prefix and Erkennungsnummer is UNAMBIGUOUS because Anlage 1 fixes
|
|
232
|
+
the Erkennungsnummer to 1-2 letters + 1-4 digits.
|
|
233
|
+
variants:
|
|
234
|
+
- class: standard
|
|
235
|
+
note: >-
|
|
236
|
+
WECHSELKENNZEICHEN (interchangeable plate, § 9 Abs. 2 FZV + Anlage 4
|
|
237
|
+
Abschnitt 2a). Two vehicles of the same class (M1, L or O1) held by one
|
|
238
|
+
keeper share a common plate part plus a per-vehicle part; the common part
|
|
239
|
+
carries a "W" (20 mm high, 25 mm wide) above the Stempelplakette, and the
|
|
240
|
+
per-vehicle part is the LAST DIGIT of the Erkennungsnummer. Same eight-
|
|
241
|
+
position cap across both parts, excluding the "W". Cannot be combined with
|
|
242
|
+
Saison-, rote, Kurzzeit- or Ausfuhrkennzeichen. Recorded as a variant, not
|
|
243
|
+
a series, because the serial grammar is Anlage 1's — but note that a parse
|
|
244
|
+
API sees a SPLIT STRING, which the single-`pattern` schema cannot express.
|
|
245
|
+
sources:
|
|
246
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/__9.html # § 9 Abs. 2: eligibility (classes M1/L/O1, same keeper, same plate size), the common/vehicle-specific split, the one-at-a-time rule"
|
|
247
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/anlage_4.html # Anlage 4 Abschnitt 2a: the 'W' marking 20 x 25 mm, self-destroying security foil on the vehicle-specific part"
|
|
248
|
+
sources:
|
|
249
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/__9.html # § 9 Abs. 1: Kennzeichen = Unterscheidungszeichen (1-3 letters for the Verwaltungsbezirk) + vehicle-specific Erkennungsnummer allocated per Anlage 1; Abs. 3: BMDV/Bundesanzeiger"
|
|
250
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/anlage_1.html # Anlage 1: the five Erkennungsnummer shapes and the umlaut exclusion, verbatim"
|
|
251
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/__12.html # § 12 Abs. 1: black on white, black-bordered; Abs. 2: reflective + DIN 74069; Abs. 5: front/rear rules"
|
|
252
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/anlage_4.html # Anlage 4 Abschnitt 1: dimensions, FE-Schrift, Euro-Feld, the eight-position cap; Abschnitt 2: the general plates"
|
|
253
|
+
notes: >-
|
|
254
|
+
THE GERMAN STANDARD SERIES — the strongest region signal in the L0 pilot and
|
|
255
|
+
the only one of the four pilot jurisdictions whose plate names its place of
|
|
256
|
+
registration. PERIOD CAVEAT, stated plainly: 2023 is the date of the FZV that
|
|
257
|
+
STATES this format, not the date the system began. The
|
|
258
|
+
Unterscheidungszeichen + Erkennungsnummer system and the Euro-Feld design both
|
|
259
|
+
long predate it (FZV 2011 before, StVZO before that); no primary for either
|
|
260
|
+
origin date was secured, and inventing one was declined. No age is encoded on a
|
|
261
|
+
German plate at all — unlike the UK, a German plate string carries region but
|
|
262
|
+
never date.
|
|
263
|
+
|
|
264
|
+
# =========================================================================
|
|
265
|
+
# HISTORIC — H suffix.
|
|
266
|
+
# =========================================================================
|
|
267
|
+
- id: de-historic-h
|
|
268
|
+
class: historic
|
|
269
|
+
categories: [car, van, truck, bus, motorcycle, trailer]
|
|
270
|
+
period: { start: 2023 }
|
|
271
|
+
period_evidence: instrument-in-force
|
|
272
|
+
format:
|
|
273
|
+
pattern: "LL-LL 999H"
|
|
274
|
+
regex: '\A[A-Z]{1,3}-[A-Z]{1,2} ?\d{1,4}H\z'
|
|
275
|
+
regex_strict: '\A(?![A-Z]{3}-[A-Z]{2} ?\d{3,4}H\z)[A-Z]{1,3}-[A-Z]{1,2} ?(?:[1-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3})H\z'
|
|
276
|
+
suffix: H
|
|
277
|
+
max_positions: 7
|
|
278
|
+
max_positions_note: >-
|
|
279
|
+
Anlage 4 Abschnitt 4 Nr. 4 caps a SINGLE-LINE Oldtimerkennzeichen at seven
|
|
280
|
+
positions EXCLUDING the H (and the Erkennungsnummer at five positions on a
|
|
281
|
+
340 mm two-line plate, four on a 280 mm two-line or motorcycle plate) — one
|
|
282
|
+
position tighter than the standard series, because the H itself consumes room.
|
|
283
|
+
regex_strict's lookahead removes the shapes that exceed seven.
|
|
284
|
+
charset: { notes: "Anlage 1 grammar unchanged; § 10 Abs. 1 adds the H" }
|
|
285
|
+
design:
|
|
286
|
+
plate: { w: 520, h: 110, unit: mm }
|
|
287
|
+
background: { color: "#FFFFFF", finish: retroreflective, hex_basis: spec }
|
|
288
|
+
foreground: "#000000"
|
|
289
|
+
band: { side: left, color: "#003399", content: eu-stars+D }
|
|
290
|
+
note: "'Der Kennbuchstabe \"H\" ist der Erkennungsnummer ohne Leerzeichen in gleicher Schriftart anzufügen' — no space, same typeface (Anlage 4 Abschnitt 4 Nr. 4)"
|
|
291
|
+
region_encoding: "plates/_decode/de-districts.yml"
|
|
292
|
+
sources:
|
|
293
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/__10.html # § 10 Abs. 1: on application, a vehicle with a § 23 StVZO Gutachten is ASSIGNED an Oldtimerkennzeichen; it consists of Unterscheidungszeichen + Erkennungsnummer per § 9 Abs. 1 plus 'den Kennbuchstaben \"H\" als amtlichen Zusatz hinter der Erkennungsnummer'"
|
|
294
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/anlage_4.html # Anlage 4 Abschnitt 4: the H suffix's typographic rule and the seven/five/four-position caps"
|
|
295
|
+
notes: >-
|
|
296
|
+
H-KENNZEICHEN. Note § 10 Abs. 1's discretion, which a claims model should
|
|
297
|
+
record: the authority "kann im Einzelfall" count periods before first placing
|
|
298
|
+
on the market during which the vehicle operated off public roads towards the
|
|
299
|
+
minimum age in § 2 Satz 1 Nr. 22 FZV. The 30-year threshold itself lives in
|
|
300
|
+
that definition and in § 23 StVZO, neither of which was fetched in this pass —
|
|
301
|
+
the threshold is therefore a recorded gap, and the widely-repeated "30 years"
|
|
302
|
+
is NOT asserted here as sourced. An H plate may also be a Saisonkennzeichen
|
|
303
|
+
(Anlage 4 Abschnitt 4 Nr. 4 last sentence) or a Wechselkennzeichen.
|
|
304
|
+
|
|
305
|
+
# =========================================================================
|
|
306
|
+
# ELECTRIC — E suffix. The one German series with a properly dated start.
|
|
307
|
+
# =========================================================================
|
|
308
|
+
- id: de-electric-e
|
|
309
|
+
class: electric
|
|
310
|
+
categories: [car, van, truck, bus, motorcycle]
|
|
311
|
+
period: { start: 2015 }
|
|
312
|
+
period_evidence: enabling-statute
|
|
313
|
+
format:
|
|
314
|
+
pattern: "LL-LL 999E"
|
|
315
|
+
regex: '\A[A-Z]{1,3}-[A-Z]{1,2} ?\d{1,4}E\z'
|
|
316
|
+
regex_strict: '\A(?![A-Z]{3}-[A-Z]{2} ?\d{3,4}E\z)[A-Z]{1,3}-[A-Z]{1,2} ?(?:[1-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3})E\z'
|
|
317
|
+
suffix: E
|
|
318
|
+
max_positions: 7
|
|
319
|
+
max_positions_note: "Anlage 4 Abschnitt 5a Nr. 1 executes E-Kennzeichen 'entsprechend Abschnitt 4' (the Oldtimer rules), so the seven-position single-line cap carries over; Nr. 6 gives the tighter two-line caps (six positions on a single-line Saison variant, five on a 340 mm two-line, four on 280 mm/motorcycle/reduced)."
|
|
320
|
+
design:
|
|
321
|
+
plate: { w: 520, h: 110, unit: mm }
|
|
322
|
+
background: { color: "#FFFFFF", finish: retroreflective, hex_basis: spec }
|
|
323
|
+
foreground: "#000000"
|
|
324
|
+
band: { side: left, color: "#003399", content: eu-stars+D }
|
|
325
|
+
note: "'Der Kennbuchstabe \"E\" ist der Erkennungsnummer ohne Leerzeichen in gleicher Schriftart anzufügen' (Anlage 4 Abschnitt 5a Nr. 6)"
|
|
326
|
+
foreign_vehicle_badge:
|
|
327
|
+
shape: circular
|
|
328
|
+
diameter_mm: 80
|
|
329
|
+
colour: "RAL 5017"
|
|
330
|
+
note: >-
|
|
331
|
+
For an electric vehicle admitted to traffic under ANOTHER state's rules, the
|
|
332
|
+
marking is a BADGE per Anlage 3 affixed visibly at the rear, not a plate
|
|
333
|
+
suffix; the issuing office writes the vehicle's registration into the
|
|
334
|
+
badge's window in lightfast script. Anlage 3 giving a hard RAL value is
|
|
335
|
+
unusual — most EU plate law specifies drawings, not colour codes.
|
|
336
|
+
source: "https://www.gesetze-im-internet.de/fzv_2023/anlage_3.html # Anlage 3 (zu § 11 Absatz 4): Plakettenmuster, 80 mm diameter, RAL 5017"
|
|
337
|
+
region_encoding: "plates/_decode/de-districts.yml"
|
|
338
|
+
sources:
|
|
339
|
+
- "https://www.gesetze-im-internet.de/emog/EmoG.pdf # Elektromobilitätsgesetz, Ausfertigungsdatum 05.06.2015 (BGBl. I S. 898) — the enabling statute § 11 FZV keys off; note § 8 Abs. 2: the Act EXPIRES at the end of 31.12.2026"
|
|
340
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/__11.html # § 11 Abs. 1-2: an E-Kennzeichen is the § 9 Abs. 1 plate (optionally also a green or seasonal one) with 'den Kennbuchstaben \"E\" als amtlichen Zusatz hinter der Erkennungsnummer'; Abs. 4: the Anlage 3 badge route for foreign vehicles; Abs. 5: foreign E-markings are recognised as equivalent"
|
|
341
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/anlage_4.html # Anlage 4 Abschnitt 5a: E-Kennzeichen executed per Abschnitt 4, plus the Saison variants and position caps"
|
|
342
|
+
notes: >-
|
|
343
|
+
E-KENNZEICHEN. period.start 2015 is a REAL start, not an instrument date: the
|
|
344
|
+
Elektromobilitätsgesetz of 5 June 2015 created the eligibility § 11 FZV
|
|
345
|
+
implements, so 2015 is the earliest possible issuance year. TIME BOMB WORTH
|
|
346
|
+
RECORDING NOW: EmoG § 8 Abs. 2 provides that the Act ceases to be in force at
|
|
347
|
+
the end of 31 December 2026 — inside the current audit horizon. Unless it is
|
|
348
|
+
extended, this series' `period.end` becomes 2026 and the quarterly audit should
|
|
349
|
+
re-check it. Also note § 79 Abs. 9 FZV carries a non-application footnote
|
|
350
|
+
against § 11 which was not resolved in this pass (recorded gap).
|
|
351
|
+
|
|
352
|
+
# =========================================================================
|
|
353
|
+
# SEASONAL.
|
|
354
|
+
# =========================================================================
|
|
355
|
+
- id: de-seasonal
|
|
356
|
+
class: seasonal
|
|
357
|
+
categories: [car, van, truck, bus, motorcycle, trailer]
|
|
358
|
+
period: { start: 2023 }
|
|
359
|
+
period_evidence: instrument-in-force
|
|
360
|
+
format:
|
|
361
|
+
pattern: "LL-LL 999"
|
|
362
|
+
regex: '\A[A-Z]{1,3}-[A-Z]{1,2} ?\d{1,4}\z'
|
|
363
|
+
regex_strict: '\A(?![A-Z]{3}-[A-Z]{2} ?\d{3,4}\z)[A-Z]{1,3}-[A-Z]{1,2} ?(?:[1-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3})\z'
|
|
364
|
+
max_positions: 7
|
|
365
|
+
max_positions_note: "Anlage 4 Abschnitt 5 Nr. 4: seven positions on a single-line plate, five in the Erkennungsnummer on two-line/motorcycle/reduced plates"
|
|
366
|
+
fields_note: >-
|
|
367
|
+
THE OPERATING PERIOD IS A FIELD, NOT PART OF THE SERIAL. Anlage 4 Abschnitt 5
|
|
368
|
+
Nr. 4: in the Betriebszeitraum field, "die Zahl über dem Bindestrich" is the
|
|
369
|
+
start month and "die Zahl unter dem Bindestrich" the end month, set in
|
|
370
|
+
DIN 1451-2:1986-02. A single `pattern` string cannot carry a stacked
|
|
371
|
+
two-number field — this is the same schema pressure PRD-PLATES §2.2 records
|
|
372
|
+
for Japan, arriving in Germany.
|
|
373
|
+
design:
|
|
374
|
+
plate: { w: 520, h: 110, unit: mm }
|
|
375
|
+
background: { color: "#FFFFFF", finish: retroreflective, hex_basis: spec }
|
|
376
|
+
foreground: "#000000"
|
|
377
|
+
band: { side: left, color: "#003399", content: eu-stars+D }
|
|
378
|
+
extra_field: { position: right, content: "start month over end month, separated by a hyphen", typeface: "DIN 1451-2:1986-02" }
|
|
379
|
+
validity:
|
|
380
|
+
min_months: 2
|
|
381
|
+
max_months: 11
|
|
382
|
+
note: >-
|
|
383
|
+
"Der Betriebszeitraum ist auf volle Monate zu bemessen. Der Betriebszeitraum
|
|
384
|
+
muss mindestens zwei Monate und darf höchstens elf Monate umfassen"
|
|
385
|
+
(§ 10 Abs. 3). Outside the period the vehicle may neither be operated NOR
|
|
386
|
+
PARKED on public roads. Trips to deregister, and return trips after the seal
|
|
387
|
+
is removed, count as unstamped plates under § 12 Abs. 4.
|
|
388
|
+
region_encoding: "plates/_decode/de-districts.yml"
|
|
389
|
+
sources:
|
|
390
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/__10.html # § 10 Abs. 3: Saisonkennzeichen on application; Betriebszeitraum as an amtlicher Zusatz behind the Erkennungsnummer; full months, 2-11 months; green plates may also be seasonal; the operate-and-park prohibition"
|
|
391
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/anlage_4.html # Anlage 4 Abschnitt 5: the four seasonal plate forms and the month-field rule"
|
|
392
|
+
notes: >-
|
|
393
|
+
SAISONKENNZEICHEN. Its own series rather than a variant because the DESIGN
|
|
394
|
+
differs (an added operating-period field) while the serial grammar does not —
|
|
395
|
+
the PRD-PLATES §2.3 test resolves cleanly. It composes with other classes:
|
|
396
|
+
green plates (§ 10 Abs. 2), Oldtimerkennzeichen and E-Kennzeichen can all be
|
|
397
|
+
issued AS seasonal plates, which means class is genuinely multi-valued here and
|
|
398
|
+
the single-`class` schema cannot express the combination.
|
|
399
|
+
|
|
400
|
+
# =========================================================================
|
|
401
|
+
# GREEN — TAX-EXEMPT. Green lettering on white, and the class vocabulary has
|
|
402
|
+
# no home for it.
|
|
403
|
+
# =========================================================================
|
|
404
|
+
- id: de-green-taxexempt
|
|
405
|
+
class: agricultural
|
|
406
|
+
categories: [tractor, machine, trailer, truck]
|
|
407
|
+
period: { start: 2023 }
|
|
408
|
+
period_evidence: instrument-in-force
|
|
409
|
+
format:
|
|
410
|
+
pattern: "LL-LL 9999"
|
|
411
|
+
regex: '\A(?![A-Z]{3}-[A-Z]{2} ?\d{4}\z)[A-Z]{1,3}-[A-Z]{1,2} ?\d{1,4}\z'
|
|
412
|
+
regex_strict: '\A(?![A-Z]{3}-[A-Z]{2} ?\d{4}\z)[A-Z]{1,3}-[A-Z]{1,2} ?(?:[1-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3})\z'
|
|
413
|
+
design:
|
|
414
|
+
plate: { w: 520, h: 110, unit: mm }
|
|
415
|
+
background: { color: "#FFFFFF", finish: retroreflective, hex_basis: spec }
|
|
416
|
+
foreground: "#008000"
|
|
417
|
+
foreground_note: "§ 10 Abs. 2 FZV, verbatim: 'ein Kennzeichen mit grüner Beschriftung auf weißem Grund (grünes Kennzeichen)'. The statute names the colour GREEN without an RAL or RGB value, so the hex is observed within a named colour."
|
|
418
|
+
border: { color: "#008000", note: "Anlage 4 Abschnitt 1 Nr. 2.1 contemplates black, GREEN or red borders; the green plate takes the green one" }
|
|
419
|
+
band: { side: left, color: "#003399", content: eu-stars+D }
|
|
420
|
+
region_encoding: "plates/_decode/de-districts.yml"
|
|
421
|
+
sources:
|
|
422
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/__10.html # § 10 Abs. 2: green lettering on white for vehicles whose keeper is exempt from motor-vehicle tax, with the seven-item exclusion list, plus the trailer special rule under § 10 KraftStG"
|
|
423
|
+
notes: >-
|
|
424
|
+
GRÜNES KENNZEICHEN. CLASS CAVEAT, and it is a real one: the legal criterion is
|
|
425
|
+
not agriculture at all — it is that "der Halter von der Kraftfahrzeugsteuer
|
|
426
|
+
befreit ist". _meta/classes.yml has no tax-exempt class, so `agricultural` is
|
|
427
|
+
recorded as the closest fit and the dominant population, but the statute's own
|
|
428
|
+
exclusion list shows how much wider the category is: authority vehicles,
|
|
429
|
+
diplomatic and consular staff vehicles, buses and 8-9-seat cars mainly in
|
|
430
|
+
scheduled service and their trailers, Leichtkrafträder and Kleinkrafträder,
|
|
431
|
+
vehicles of severely disabled persons under § 3a KraftStG, particularly
|
|
432
|
+
low-emission vehicles, and any vehicle on a Wechselkennzeichen are all EXCLUDED
|
|
433
|
+
from the green plate. Flagged as a vocabulary gap in the L0 report.
|
|
434
|
+
|
|
435
|
+
# =========================================================================
|
|
436
|
+
# DEALER — rote Kennzeichen, digits-only beginning 06.
|
|
437
|
+
# =========================================================================
|
|
438
|
+
- id: de-dealer-red
|
|
439
|
+
class: dealer
|
|
440
|
+
categories: [car, van, truck, bus, motorcycle, trailer]
|
|
441
|
+
period: { start: 2023 }
|
|
442
|
+
period_evidence: instrument-in-force
|
|
443
|
+
format:
|
|
444
|
+
pattern: "LL-06999"
|
|
445
|
+
regex: '\A[A-Z]{1,3}-06\d{1,4}\z'
|
|
446
|
+
charset: { notes: "the Erkennungsnummer is DIGITS ONLY and begins with 06 — no letters at all, so Anlage 1's letter blocks do not apply" }
|
|
447
|
+
max_positions_note: "the eight-position cap of Anlage 4 Abschnitt 1 Nr. 4 still applies, so a three-letter district code limits the digit tail; the regex quantifies width and the cap is recorded here rather than encoded, because the interaction is not stated in a single provision"
|
|
448
|
+
design:
|
|
449
|
+
plate: { w: 520, h: 110, unit: mm }
|
|
450
|
+
background: { color: "#FFFFFF", finish: retroreflective, hex_basis: spec }
|
|
451
|
+
foreground: "#FF0000"
|
|
452
|
+
foreground_note: "§ 41 Abs. 1 Nr. 2 FZV, verbatim: 'ein Kennzeichen mit roter Beschriftung auf weißem rot gerandetem Grund (rotes Kennzeichen)'. Colour named, not numbered."
|
|
453
|
+
border: { color: "#FF0000" }
|
|
454
|
+
band: { side: left, color: "#003399", content: eu-stars+D }
|
|
455
|
+
note: "Anlage 4 Abschnitt 7: executed as the general plates but in red script with a red border; the § 29 StVZO roadworthiness badge is NOT applied"
|
|
456
|
+
binding: business
|
|
457
|
+
sources:
|
|
458
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/__41.html # § 41: Prüfungs-, Probe- und Überführungsfahrten; Abs. 1 the red-on-white colour rule; Abs. 2 assignment to trustworthy manufacturers, parts makers, workshops, dealers and trailer makers (plus THW, Bundespolizei, BKA, Länder police, Bundeswehr, customs) for REPEATED use on DIFFERENT vehicles, and 'einer nur aus Ziffern bestehenden und mit \"06\" beginnenden Erkennungsnummer'; Abs. 3 the per-trip Fahrzeugscheinheft log, kept one year"
|
|
459
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/anlage_4.html # Anlage 4 Abschnitt 7: red script and red border; Anlage 13 is the Fahrzeugscheinheft"
|
|
460
|
+
notes: >-
|
|
461
|
+
ROTE KENNZEICHEN — the German dealer/trade plate, and the cleanest "06"
|
|
462
|
+
identification in the dataset. BINDING NOTE: like Swiss plates but for a
|
|
463
|
+
different reason, this plate does NOT bind to a vehicle — it binds to a
|
|
464
|
+
BUSINESS and moves between vehicles, which is why `binding: business` is set on
|
|
465
|
+
the series and why a vehicle-keyed consumer must not join on it. § 41 Abs. 3
|
|
466
|
+
requires a written per-trip record (plate, date, start and end, driver and
|
|
467
|
+
address, vehicle class, make, VIN and route), retained for a year — the
|
|
468
|
+
compensating audit trail for an untethered plate.
|
|
469
|
+
|
|
470
|
+
- id: de-oldtimer-red
|
|
471
|
+
class: dealer
|
|
472
|
+
categories: [car, van, truck, bus, motorcycle]
|
|
473
|
+
period: { start: 2023 }
|
|
474
|
+
period_evidence: instrument-in-force
|
|
475
|
+
format:
|
|
476
|
+
pattern: "LL-07999"
|
|
477
|
+
regex: '\A[A-Z]{1,3}-07\d{1,4}\z'
|
|
478
|
+
charset: { notes: "digits only, beginning 07" }
|
|
479
|
+
design:
|
|
480
|
+
plate: { w: 520, h: 110, unit: mm }
|
|
481
|
+
background: { color: "#FFFFFF", finish: retroreflective, hex_basis: spec }
|
|
482
|
+
foreground: "#FF0000"
|
|
483
|
+
border: { color: "#FF0000" }
|
|
484
|
+
band: { side: left, color: "#003399", content: eu-stars+D }
|
|
485
|
+
sources:
|
|
486
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/__43.html # § 43: trips to and from Oldtimer events need neither Betriebserlaubnis nor Zulassung if the vehicle carries a rotes Oldtimerkennzeichen; Abs. 2 applies § 41 Abs. 2-6 and requires 'einer nur aus Ziffern bestehenden und mit den Ziffern \"07\" beginnenden Erkennungsnummer', with the Anlage 15 Fahrzeugscheinheft"
|
|
487
|
+
notes: >-
|
|
488
|
+
ROTES OLDTIMERKENNZEICHEN — the 07 series. Distinguished from the 06 dealer
|
|
489
|
+
plate by two digits and by one crucial restriction: § 43 Abs. 2 provides that
|
|
490
|
+
this plate "nur an dem Fahrzeug verwendet werden darf, für das es ausgegeben
|
|
491
|
+
wurde", so unlike the 06 plate it is NOT freely transferable between vehicles.
|
|
492
|
+
CLASS CAVEAT: recorded as `dealer` because it shares § 41's machinery, but it
|
|
493
|
+
is functionally a historic-vehicle event plate; a class vocabulary with a
|
|
494
|
+
`historic` and a `dealer` value cannot express "both".
|
|
495
|
+
|
|
496
|
+
# =========================================================================
|
|
497
|
+
# SHORT-TERM AND EXPORT — the two date-bearing German plates.
|
|
498
|
+
# =========================================================================
|
|
499
|
+
- id: de-shortterm
|
|
500
|
+
class: temporary
|
|
501
|
+
categories: [car, van, truck, bus, motorcycle, trailer]
|
|
502
|
+
period: { start: 2023 }
|
|
503
|
+
period_evidence: instrument-in-force
|
|
504
|
+
format:
|
|
505
|
+
pattern: "LL-03999"
|
|
506
|
+
regex: '\A[A-Z]{1,3}-0[34]\d{1,4}\z'
|
|
507
|
+
charset: { notes: "digits only, beginning '03' OR '04' — the pattern shows 03 as a representative literal and the regex carries both" }
|
|
508
|
+
fields_note: "the plate additionally bears an EXPIRY DATE as a stacked three-number field (day over month over year), which a single pattern string cannot express"
|
|
509
|
+
design:
|
|
510
|
+
plate: { w: 520, h: 110, unit: mm }
|
|
511
|
+
background: { color: "#FFFFFF", finish: retroreflective, hex_basis: spec }
|
|
512
|
+
foreground: "#000000"
|
|
513
|
+
band: { side: left, color: "#003399", content: eu-stars+D }
|
|
514
|
+
extra_field:
|
|
515
|
+
position: right
|
|
516
|
+
content: "day over month over year of expiry"
|
|
517
|
+
background: { color: "#FFFF00" }
|
|
518
|
+
foreground: "#000000"
|
|
519
|
+
note: "Anlage 4 Abschnitt 6 Nr. 4: 'Die Farbe dieses Feldes ist gelb mit schwarzer Beschriftung'; digits in DIN 1451-2:1986-02"
|
|
520
|
+
seal: { diameter_mm: 35, background: "blue per DIN 6171 (blau – Euro-Feld)", note: "Anlage 4 Abschnitt 6 Nr. 4: a 35 mm Stempelplakette with the authority's Dienststempel on a BLUE ground, positioned between prefix and Erkennungsnummer (single-line) or top-left beside the prefix (two-line); the § 29 StVZO badge is not applied" }
|
|
521
|
+
validity: { days: 5, note: "§ 42 Abs. 4: the expiry date is set 'bis zum Ablauf des fünften auf die Zuteilung folgenden Tages'; after it the vehicle may not be operated on public roads" }
|
|
522
|
+
sources:
|
|
523
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/__42.html # § 42 Abs. 1: conditions (type-approved or individually approved, valid HU/SP, insurance); Abs. 4: 'einer nur aus Ziffern bestehenden und mit \"03\" oder \"04\" beginnenden Erkennungsnummer' plus the five-day expiry date; Abs. 3: need not be firmly affixed"
|
|
524
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/anlage_4.html # Anlage 4 Abschnitt 6: the three Kurzzeitkennzeichen forms, the yellow/black date field, the 35 mm blue seal"
|
|
525
|
+
notes: >-
|
|
526
|
+
KURZZEITKENNZEICHEN — five days, a yellow expiry field, and a blue seal
|
|
527
|
+
instead of the usual Land-arms Stempelplakette. Unlike the 06 dealer plate it
|
|
528
|
+
is tied to ONE vehicle (§ 42 Abs. 3 Nr. 2) and, unlike an ordinary plate, it
|
|
529
|
+
need not be firmly attached.
|
|
530
|
+
|
|
531
|
+
- id: de-export
|
|
532
|
+
class: export
|
|
533
|
+
categories: [car, van, truck, bus, motorcycle, trailer]
|
|
534
|
+
period: { start: 2023 }
|
|
535
|
+
period_evidence: instrument-in-force
|
|
536
|
+
format:
|
|
537
|
+
pattern: "LL-9999L"
|
|
538
|
+
regex: '\A[A-Z]{1,3}-\d{1,4}[A-Z]\z'
|
|
539
|
+
regex_strict: '\A[A-Z]{1,3}-(?:[1-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3})[A-Z]\z'
|
|
540
|
+
charset:
|
|
541
|
+
notes: >-
|
|
542
|
+
§ 45 Abs. 2 FZV, verbatim: "Die Erkennungsnummer hat zu bestehen aus einer
|
|
543
|
+
ein- bis vierstelligen Zahl und einem nachfolgenden Buchstaben." Digits
|
|
544
|
+
FIRST, letter LAST — the inverse of every other German series, and the
|
|
545
|
+
single most useful structural tell for an export plate.
|
|
546
|
+
fields_note: "plus a stacked three-number expiry field (day over month over year)"
|
|
547
|
+
design:
|
|
548
|
+
plate: { w: 520, h: 110, unit: mm }
|
|
549
|
+
background: { color: "#FFFFFF", finish: retroreflective, hex_basis: spec }
|
|
550
|
+
foreground: "#000000"
|
|
551
|
+
band: { side: none }
|
|
552
|
+
band_note: >-
|
|
553
|
+
NO EURO-FIELD. Anlage 4 Abschnitt 8 Nr. 3 expressly disapplies the Euro-Feld
|
|
554
|
+
provision (Abschnitt 1 Nr. 3), the verkleinerte Mittelschrift and the § 29
|
|
555
|
+
StVZO badge for Ausfuhrkennzeichen. The only German road plate without the EU
|
|
556
|
+
band — which makes sense: the vehicle is leaving the Union's registration.
|
|
557
|
+
extra_field:
|
|
558
|
+
position: right
|
|
559
|
+
content: "day over month over year on which the registration's validity ends in the FZV's territory"
|
|
560
|
+
background: { color: "#FF0000", finish: non-retroreflective }
|
|
561
|
+
foreground: "#000000"
|
|
562
|
+
note: "Anlage 4 Abschnitt 8 Nr. 3: 'Der rote Untergrund darf nicht retroreflektierend sein' — the one field in German plate law required NOT to retroreflect"
|
|
563
|
+
seal: { diameter_mm: 35, background: "RAL 2002 red", note: "Anlage 4 Abschnitt 8 Nr. 3: Stempelplakette with the authority's Dienstsiegel on a red ground, RAL 2002" }
|
|
564
|
+
validity: { max_months: 12, note: "§ 45 Abs. 1 Nr. 2: the registration is limited to the duration of the proven third-party insurance, 'längstens auf ein Jahr'" }
|
|
565
|
+
sources:
|
|
566
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/__45.html # § 45: Fahrten zur dauerhaften Verbringung eines Fahrzeuges in das Ausland; Abs. 1 the insurance/HU conditions and the one-year cap; Abs. 2 'einer ein- bis vierstelligen Zahl und einem nachfolgenden Buchstaben' plus the expiry-date field"
|
|
567
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/anlage_4.html # Anlage 4 Abschnitt 8: no Euro-Feld, the non-retroreflective red date field, the RAL 2002 seal"
|
|
568
|
+
notes: >-
|
|
569
|
+
AUSFUHRKENNZEICHEN. Three things make it unique in Germany: the digits-then-
|
|
570
|
+
letter Erkennungsnummer, the absence of the Euro-band, and a field the law
|
|
571
|
+
requires NOT to be retroreflective. § 45 Abs. 1 also carries a nice
|
|
572
|
+
period-logic constraint for a claims model: the plate may only be issued if
|
|
573
|
+
the next roadworthiness inspection date falls AFTER the registration's expiry
|
|
574
|
+
date, otherwise the inspection must be done first.
|
|
575
|
+
|
|
576
|
+
# =========================================================================
|
|
577
|
+
# ANLAGE 2 SERIES — federal, Land, diplomatic, military. § 9 Abs. 1 Satz 7:
|
|
578
|
+
# "Die Erkennungsnummern dieser Fahrzeuge dürfen nur aus höchstens
|
|
579
|
+
# sechsstelligen Zahlen bestehen" — digits only, at most six.
|
|
580
|
+
# =========================================================================
|
|
581
|
+
- id: de-federal-government
|
|
582
|
+
class: government
|
|
583
|
+
categories: [car, van, truck, bus, motorcycle]
|
|
584
|
+
period: { start: 2023 }
|
|
585
|
+
period_evidence: instrument-in-force
|
|
586
|
+
format:
|
|
587
|
+
pattern: "BD-999999"
|
|
588
|
+
regex: '\A(?:BD|BG|BP|BW|THW|BBL|BWL|BYL|HEL|LSA|LSN|MVL|NRW|RPL|SAL|THL|HB|HH|NL|B)-\d{1,6}\z'
|
|
589
|
+
charset: { notes: "§ 9 Abs. 1 Satz 7: the Erkennungsnummern of Anlage 2 vehicles 'dürfen nur aus höchstens sechsstelligen Zahlen bestehen' — digits only, maximum six" }
|
|
590
|
+
design:
|
|
591
|
+
plate: { w: 520, h: 110, unit: mm }
|
|
592
|
+
background: { color: "#FFFFFF", finish: retroreflective, hex_basis: spec }
|
|
593
|
+
foreground: "#000000"
|
|
594
|
+
band: { side: left, color: "#003399", content: eu-stars+D }
|
|
595
|
+
region_encoding: inline
|
|
596
|
+
region_encoding_note: "decode via region_encoding_tables.anlage2_federal_and_diplomatic (bund + laender) at the top of this file — a closed, primary, 23-row table, unlike the district list"
|
|
597
|
+
sources:
|
|
598
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/anlage_2.html # Anlage 2 Nr. 1 (Bund: BD, BG, BP, BW, THW, Y, X with their registering authorities) and Nr. 2 (the 16 Land codes and which organs they cover)"
|
|
599
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/__9.html # § 9 Abs. 1 Satz 6-7: which bodies may receive Anlage 2 plates, and the digits-only, max-six-digit Erkennungsnummer rule"
|
|
600
|
+
notes: >-
|
|
601
|
+
FEDERAL AND LAND OFFICIAL SERIES. Two facts a decode table must carry, both
|
|
602
|
+
verbatim from Anlage 2: BG (Bundespolizei) is "noch gültig, wird nicht mehr
|
|
603
|
+
zugeteilt" — still valid, no longer assigned, exactly the ended-but-on-the-road
|
|
604
|
+
case PRD-PLATES's `ended: true` semantics exist for at the series level and
|
|
605
|
+
that decode rows need at the row level. And the CONSULAR case has no code of
|
|
606
|
+
its own: career consular posts carry "das Unterscheidungszeichen des
|
|
607
|
+
Verwaltungsbezirkes am Sitz des Konsulats", i.e. an ordinary district prefix,
|
|
608
|
+
so German consular vehicles are NOT identifiable from the plate string. Also
|
|
609
|
+
here: 1-1 for the Bundestag President's official car (Anlage 2 Nr. 4), the only
|
|
610
|
+
German plate whose prefix is a digit.
|
|
611
|
+
|
|
612
|
+
- id: de-diplomatic
|
|
613
|
+
class: diplomatic
|
|
614
|
+
categories: [car, van, motorcycle]
|
|
615
|
+
period: { start: 2023 }
|
|
616
|
+
period_evidence: instrument-in-force
|
|
617
|
+
format:
|
|
618
|
+
pattern: "0-999999"
|
|
619
|
+
regex: '\A(?:0|B|BN)-\d{1,6}\z'
|
|
620
|
+
charset: { notes: "digits only, max six (§ 9 Abs. 1 Satz 7); the prefix is 0, B or BN depending on the body and the privileged person's status" }
|
|
621
|
+
progression: "Anlage 2 Nr. 3 states only that the prefix depends on the body and the status of the privileged person; the mission-number allocation inside the Erkennungsnummer is NOT in the FZV — see notes"
|
|
622
|
+
design:
|
|
623
|
+
plate: { w: 520, h: 110, unit: mm }
|
|
624
|
+
background: { color: "#FFFFFF", finish: retroreflective, hex_basis: spec }
|
|
625
|
+
foreground: "#000000"
|
|
626
|
+
band: { side: left, color: "#003399", content: eu-stars+D }
|
|
627
|
+
region_encoding: inline
|
|
628
|
+
region_encoding_note: "prefix decode in region_encoding_tables.anlage2_federal_and_diplomatic.diplomatic; the mission-number sub-decode is NOT authored (PRD-PLATES puts diplomatic decode tables at L4)"
|
|
629
|
+
sources:
|
|
630
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/anlage_2.html # Anlage 2 Nr. 3: '0, B oder BN — Diplomatische Vertretungen oder internationale Organisationen und in Abhängigkeit vom Status der bevorrechtigten Person', registered at Berlin or Bonn"
|
|
631
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/__9.html # § 9 Abs. 1 Satz 6-7"
|
|
632
|
+
notes: >-
|
|
633
|
+
GERMAN DIPLOMATIC SERIES. Unlike Spain — where CD/OI/CC/TA each get their own
|
|
634
|
+
background colour — Germany keeps the ordinary black-on-white design and
|
|
635
|
+
signals status only through the prefix, so a German diplomatic plate is
|
|
636
|
+
visually a normal plate. The mission-identifying number group inside the
|
|
637
|
+
Erkennungsnummer is a Foreign Office allocation and is not published in the
|
|
638
|
+
FZV; it is a recorded gap, deliberately not guessed.
|
|
639
|
+
|
|
640
|
+
- id: de-military-bundeswehr
|
|
641
|
+
class: military
|
|
642
|
+
categories: [car, van, truck, bus, motorcycle, trailer]
|
|
643
|
+
period: { start: 2023 }
|
|
644
|
+
period_evidence: instrument-in-force
|
|
645
|
+
format:
|
|
646
|
+
pattern: "Y-999999"
|
|
647
|
+
regex: '\A(?:Y|X)-\d{1,6}\z'
|
|
648
|
+
charset: { notes: "digits only, max six; Y = Bundeswehr, X = NATO international military headquarters based in Germany" }
|
|
649
|
+
group_note: "Anlage 4 Abschnitt 3 Nr. 5: on single-line 'andere Kraftfahrzeuge und Anhänger' plates the LAST THREE DIGITS are separated from the preceding digits by a group gap three times the normal spacing — a real grouping rule inside a digits-only serial"
|
|
650
|
+
design:
|
|
651
|
+
plate: { w: 520, h: 110, unit: mm }
|
|
652
|
+
background: { color: "#FFFFFF", finish: painted, hex_basis: spec, spec_note: "Anlage 4 Abschnitt 3 Nr. 5: 'Die Farbtöne des Untergrundes, des Randes und der Beschriftung sind dem Farbregister RAL 840 HR zu entnehmen, und zwar für schwarz RAL 9005 und weiß RAL 9001.' A rare hard RAL pair in EU plate law." }
|
|
653
|
+
foreground: "#000000"
|
|
654
|
+
foreground_spec: "RAL 9005"
|
|
655
|
+
background_spec: "RAL 9001"
|
|
656
|
+
band: { side: none }
|
|
657
|
+
band_note: "no Euro-Feld on Bundeswehr plates; § 12 Abs. 2 also exempts them from the DIN 74069 reflectivity requirement and the DIN test mark, as it does plates on NATO headquarters vehicles"
|
|
658
|
+
font: { name: "DIN 1451-2:1986-02 (Verkehrsschrift)", note: "Anlage 4 Abschnitt 1 Nr. 2.3: Bundeswehr plates and Versicherungskennzeichen use DIN 1451-2, NOT the FE-Schrift; bold Engschrift where the length does not suffice" }
|
|
659
|
+
federal_colours: { black: "RAL 9005", red: "RAL 3002", gold: "RAL 1006", note: "Anlage 4 Abschnitt 3 Nr. 5 gives the Bundesfarben where they are used" }
|
|
660
|
+
digit_one_rule: "Anlage 4 Abschnitt 3 Nr. 5: where the digit '1' is used, or a line holds fewer digits than the model, the gaps between that line's digits enlarge uniformly — a layout rule the render layer must honour"
|
|
661
|
+
region_encoding: none
|
|
662
|
+
sources:
|
|
663
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/anlage_2.html # Anlage 2 Nr. 1: 'Y Dienstfahrzeuge der Bundeswehr (Zentrale Militärkraftfahrtstelle – ZMK, Hardter Straße 9, 41179 Mönchengladbach/Rheindahlen)' and 'X Dienstfahrzeuge der auf Grund des Nordatlantikvertrages errichteten internationalen militärischen Hauptquartiere'"
|
|
664
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/anlage_4.html # Anlage 4 Abschnitt 3: Bundeswehr plate forms (Leichtkrafträder/Kleinkrafträder, other Krafträder, other vehicles single- and two-line) plus RAL 9005/9001, the Bundesfarben, the digit-1 spacing rule and the last-three-digits group gap"
|
|
665
|
+
- "https://www.gesetze-im-internet.de/fzv_2023/__12.html # § 12 Abs. 2 last sentence: Bundeswehr and NATO-HQ plates are exempt from DIN 74069 and the DIN test mark"
|
|
666
|
+
notes: >-
|
|
667
|
+
BUNDESWEHR (Y) AND NATO HEADQUARTERS (X). Its own series and not a variant of
|
|
668
|
+
the federal one: the FONT differs (DIN 1451-2 instead of FE-Schrift), the
|
|
669
|
+
Euro-band is absent, the reflectivity standard is disapplied and the colours
|
|
670
|
+
are given as RAL codes rather than named. Y is famously a single letter serving
|
|
671
|
+
the entire armed forces, which is why it looks like a district code and is not
|
|
672
|
+
one.
|