vehicles 0.6.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.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +164 -0
- data/CHANGELOG.md +274 -0
- data/README.md +55 -10
- data/data/PROVENANCE-vehicles.md +12 -0
- data/data/plates/PROVENANCE.md +5 -4
- data/data/plates/_decode/at-districts.yml +287 -0
- data/data/plates/_decode/ch-cantons.yml +110 -0
- data/data/plates/_decode/cn-issuing-offices.yml +463 -0
- data/data/plates/_decode/cn-provinces.yml +614 -0
- data/data/plates/_decode/cz-kraj.yml +159 -0
- data/data/plates/_decode/dk-serial-blocks.yml +327 -0
- data/data/plates/_decode/fr-departements.yml +191 -0
- data/data/plates/_decode/gb-age-identifiers.yml +170 -0
- data/data/plates/_decode/gb-memory-tags.yml +202 -0
- data/data/plates/_decode/gr-prefectures.yml +1408 -0
- data/data/plates/_decode/hr-cities.yml +315 -0
- data/data/plates/_decode/ie-counties.yml +227 -0
- data/data/plates/_decode/in-state-codes.yml +169 -0
- data/data/plates/_decode/is-districts-1938.yml +116 -0
- data/data/plates/_decode/it-provinces.yml +348 -0
- data/data/plates/_decode/jp-office-marks.yml +960 -0
- data/data/plates/_decode/jp-use-marks.yml +205 -0
- data/data/plates/_decode/kr-authority-marks.yml +146 -0
- data/data/plates/_decode/kr-use-syllables.yml +194 -0
- data/data/plates/_decode/lu-series-order.yml +638 -0
- data/data/plates/_decode/mx-entity-series.yml +380 -0
- data/data/plates/_decode/my-index-marks.yml +271 -0
- data/data/plates/_decode/no-counties-1913.yml +148 -0
- data/data/plates/_decode/no-districts.yml +901 -0
- data/data/plates/_decode/pl-powiats.yml +567 -0
- data/data/plates/_decode/pt-trailer-services.yml +96 -0
- data/data/plates/_decode/ro-counties.yml +213 -0
- data/data/plates/_decode/se-diplomatic.yml +220 -0
- data/data/plates/_decode/si-regions.yml +123 -0
- data/data/plates/_decode/sk-districts.yml +314 -0
- data/data/plates/_decode/th-registration-elements.yml +208 -0
- data/data/plates/_decode/ua-regions.yml +393 -0
- data/data/plates/_decode/za-licence-marks.yml +215 -0
- data/data/plates/_meta/classes.yml +1 -0
- data/data/plates/_meta/separators.yml +102 -0
- data/data/plates/ad.yml +961 -0
- data/data/plates/ar.yml +762 -0
- data/data/plates/at.yml +1424 -0
- data/data/plates/au-act.yml +472 -0
- data/data/plates/au-nsw.yml +282 -0
- data/data/plates/au-nt.yml +431 -0
- data/data/plates/au-qld.yml +272 -0
- data/data/plates/au-sa.yml +248 -0
- data/data/plates/au-tas.yml +302 -0
- data/data/plates/au-vic.yml +215 -0
- data/data/plates/au-wa.yml +309 -0
- data/data/plates/be.yml +1840 -0
- data/data/plates/br.yml +1152 -0
- data/data/plates/ca-ab.yml +430 -0
- data/data/plates/ca-bc.yml +697 -0
- data/data/plates/ca-mb.yml +499 -0
- data/data/plates/ca-nb.yml +537 -0
- data/data/plates/ca-nl.yml +743 -0
- data/data/plates/ca-ns.yml +808 -0
- data/data/plates/ca-nt.yml +610 -0
- data/data/plates/ca-nu.yml +280 -0
- data/data/plates/ca-on.yml +881 -0
- data/data/plates/ca-pe.yml +592 -0
- data/data/plates/ca-qc.yml +1036 -0
- data/data/plates/ca-sk.yml +256 -0
- data/data/plates/ca-yt.yml +656 -0
- data/data/plates/ch.yml +1273 -0
- data/data/plates/cn.yml +1431 -0
- data/data/plates/cy.yml +688 -0
- data/data/plates/cz.yml +1179 -0
- data/data/plates/de.yml +553 -118
- data/data/plates/dk.yml +1647 -0
- data/data/plates/ee.yml +1275 -0
- data/data/plates/es.yml +228 -32
- data/data/plates/fi.yml +1271 -0
- data/data/plates/fr.yml +1265 -0
- data/data/plates/gb.yml +1188 -0
- data/data/plates/gr.yml +721 -0
- data/data/plates/hr.yml +860 -0
- data/data/plates/hu.yml +959 -0
- data/data/plates/ie.yml +775 -0
- data/data/plates/in.yml +1172 -0
- data/data/plates/is.yml +667 -0
- data/data/plates/it.yml +1317 -0
- data/data/plates/jp.yml +3650 -0
- data/data/plates/kr.yml +1375 -0
- data/data/plates/li.yml +1010 -0
- data/data/plates/lt.yml +879 -0
- data/data/plates/lu.yml +842 -0
- data/data/plates/lv.yml +924 -0
- data/data/plates/mc.yml +1024 -0
- data/data/plates/mt.yml +854 -0
- data/data/plates/mx.yml +1372 -0
- data/data/plates/my.yml +685 -0
- data/data/plates/nl.yml +44 -0
- data/data/plates/no.yml +1018 -0
- data/data/plates/nz.yml +1699 -0
- data/data/plates/pl.yml +1296 -0
- data/data/plates/pt.yml +847 -0
- data/data/plates/ro.yml +785 -0
- data/data/plates/se.yml +1091 -0
- data/data/plates/si.yml +1105 -0
- data/data/plates/sk.yml +1439 -0
- data/data/plates/sm.yml +1119 -0
- data/data/plates/th.yml +1150 -0
- data/data/plates/ua.yml +1672 -0
- data/data/plates/us-ak.yml +763 -0
- data/data/plates/us-al.yml +457 -0
- data/data/plates/us-ar.yml +427 -0
- data/data/plates/us-as.yml +454 -0
- data/data/plates/us-az.yml +430 -0
- data/data/plates/us-ca.yml +892 -0
- data/data/plates/us-co.yml +452 -0
- data/data/plates/us-ct.yml +427 -0
- data/data/plates/us-dc.yml +614 -0
- data/data/plates/us-de.yml +551 -0
- data/data/plates/us-fl.yml +319 -96
- data/data/plates/us-ga.yml +644 -0
- data/data/plates/us-gu.yml +658 -0
- data/data/plates/us-hi.yml +585 -0
- data/data/plates/us-ia.yml +438 -0
- data/data/plates/us-id.yml +531 -0
- data/data/plates/us-il.yml +516 -0
- data/data/plates/us-in.yml +324 -0
- data/data/plates/us-ks.yml +351 -0
- data/data/plates/us-ky.yml +770 -0
- data/data/plates/us-la.yml +568 -0
- data/data/plates/us-ma.yml +379 -0
- data/data/plates/us-md.yml +536 -0
- data/data/plates/us-me.yml +445 -0
- data/data/plates/us-mi.yml +408 -0
- data/data/plates/us-mn.yml +411 -0
- data/data/plates/us-mo.yml +356 -0
- data/data/plates/us-mp.yml +402 -0
- data/data/plates/us-ms.yml +432 -0
- data/data/plates/us-mt.yml +619 -0
- data/data/plates/us-nc.yml +602 -0
- data/data/plates/us-nd.yml +419 -0
- data/data/plates/us-ne.yml +483 -0
- data/data/plates/us-nh.yml +394 -0
- data/data/plates/us-nj.yml +547 -0
- data/data/plates/us-nm.yml +574 -0
- data/data/plates/us-nv.yml +655 -0
- data/data/plates/us-ny.yml +592 -0
- data/data/plates/us-oh.yml +404 -0
- data/data/plates/us-ok.yml +513 -0
- data/data/plates/us-or.yml +392 -0
- data/data/plates/us-pa.yml +506 -0
- data/data/plates/us-pr.yml +507 -0
- data/data/plates/us-ri.yml +445 -0
- data/data/plates/us-sc.yml +605 -0
- data/data/plates/us-sd.yml +428 -0
- data/data/plates/us-tn.yml +471 -0
- data/data/plates/us-tx.yml +535 -0
- data/data/plates/us-ut.yml +384 -0
- data/data/plates/us-va.yml +567 -0
- data/data/plates/us-vi.yml +489 -0
- data/data/plates/us-vt.yml +458 -0
- data/data/plates/us-wa.yml +484 -0
- data/data/plates/us-wi.yml +509 -0
- data/data/plates/us-wv.yml +446 -0
- data/data/plates/us-wy.yml +523 -0
- data/data/plates/va.yml +604 -0
- data/data/plates/za.yml +1141 -0
- data/data/vehicles.json +160653 -105090
- data/lib/vehicles/configuration.rb +17 -3
- data/lib/vehicles/dataset.rb +73 -18
- data/lib/vehicles/fuzzy.rb +115 -0
- data/lib/vehicles/http.rb +48 -0
- data/lib/vehicles/make.rb +36 -6
- data/lib/vehicles/mcp_server.rb +5 -5
- data/lib/vehicles/model.rb +21 -2
- data/lib/vehicles/plates/series.rb +172 -18
- data/lib/vehicles/plates/template_fill.rb +188 -0
- data/lib/vehicles/plates/templates.rb +162 -0
- data/lib/vehicles/plates.rb +12 -0
- data/lib/vehicles/providers/hosted_provider.rb +28 -55
- data/lib/vehicles/validators/vehicle_make_validator.rb +3 -1
- data/lib/vehicles/validators/vehicle_model_validator.rb +1 -1
- data/lib/vehicles/version.rb +1 -1
- data/lib/vehicles.rb +32 -16
- data/rakelib/data_refresh.rake +109 -0
- data/rakelib/plates_refresh.rake +29 -0
- data/sig/vehicles.rbs +18 -0
- metadata +164 -2
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
# plates/us-oh.yml — Ohio (PRD-PLATES gate L2, group midwest-a).
|
|
2
|
+
#
|
|
3
|
+
# WHAT OHIO IS FOR IN THIS DATASET: the state where the DISPLAY statute is
|
|
4
|
+
# unusually generous and the DESIGN statute is silent. ORC 4503.19 and 4503.21
|
|
5
|
+
# together settle, in primary law, that Ohio is a REAR-ONLY jurisdiction with a
|
|
6
|
+
# single inverted exception (commercial tractors display on the FRONT) — the
|
|
7
|
+
# same shape as Florida's truck-tractor rule and, like Florida's, a genuine
|
|
8
|
+
# outlier a naive front/rear classifier gets wrong. But nothing in Chapter 4503
|
|
9
|
+
# states a serial arrangement, a colour, or a plate dimension for the ordinary
|
|
10
|
+
# passenger plate. Ohio legislates DISPLAY and delegates DESIGN.
|
|
11
|
+
#
|
|
12
|
+
# SOURCING RULE APPLIED HERE (PRD-PLATES §4): edicts of government are public
|
|
13
|
+
# domain at every level, so every display, temporary-tag, county-sticker and
|
|
14
|
+
# government-plate claim below cites the Ohio Revised Code. The serial
|
|
15
|
+
# ARRANGEMENTS are a different matter and are flagged as such: no primary
|
|
16
|
+
# carrying them was obtained, so they are recorded with
|
|
17
|
+
# `period_evidence: secondary-first-issue` and `format.evidence: secondary`,
|
|
18
|
+
# never as statute-grade.
|
|
19
|
+
#
|
|
20
|
+
# FETCH-PROVENANCE NOTE (honest, and it applies to every file in this group):
|
|
21
|
+
# codes.ohio.gov — the official Ohio Revised Code host — refused every request
|
|
22
|
+
# from this environment (TCP reset), as did bmv.ohio.gov (an F5 rejection
|
|
23
|
+
# page). The statutory text quoted here was read from codes.findlaw.com, a
|
|
24
|
+
# third-party REPRODUCTION of the same edict. Both URLs are carried on every
|
|
25
|
+
# source line: the FindLaw URL is what was actually fetched, the codes.ohio.gov
|
|
26
|
+
# URL is the canonical citation a verifier should re-derive from. An edict does
|
|
27
|
+
# not change by being reprinted, but the provenance chain must say which copy
|
|
28
|
+
# was read.
|
|
29
|
+
#
|
|
30
|
+
# REGEX FORM (PRD-PLATES §2.6): every regex here is in PRINTED form — the
|
|
31
|
+
# separator is spelled where the plate shows it, and only `-` and ` ` are ever
|
|
32
|
+
# spelled, per plates/_meta/separators.yml.
|
|
33
|
+
#
|
|
34
|
+
# NOT HERE, DELIBERATELY (PRD-PLATES §2.5 + the L2 scope): individual specialty
|
|
35
|
+
# DESIGNS (L4); Ohio's commercial-truck (PBC 1234) and apportioned (PBC1234)
|
|
36
|
+
# series, which are outside the L2 core-class list; and any government-plate
|
|
37
|
+
# SERIES, because ORC 4503.16 gives the legend but no serial shape and none was
|
|
38
|
+
# sourced (recorded gap).
|
|
39
|
+
jurisdiction: us-oh
|
|
40
|
+
authority:
|
|
41
|
+
name: Ohio Bureau of Motor Vehicles (Ohio BMV), Ohio Department of Public Safety
|
|
42
|
+
url: "https://www.bmv.ohio.gov/"
|
|
43
|
+
binding: vehicle
|
|
44
|
+
statute_edition: "Ohio Revised Code Title XLV (Motor Vehicles), Chapter 4503, as reproduced by codes.findlaw.com and read 2026-08-02. The official host codes.ohio.gov was unreachable from this environment; no edition banner was therefore captured, and the edition is an UNVERIFIED currency claim."
|
|
45
|
+
|
|
46
|
+
# ---------------------------------------------------------------------------
|
|
47
|
+
# artwork_risk — required per jurisdiction by PRD-PLATES §4.
|
|
48
|
+
# ---------------------------------------------------------------------------
|
|
49
|
+
artwork_risk:
|
|
50
|
+
posture: unresearched-default-adverse
|
|
51
|
+
basis: >-
|
|
52
|
+
NOTHING FAVOURABLE WAS FOUND FOR OHIO, and that is the finding rather than a
|
|
53
|
+
gap in the search. The governing default is that 17 U.S.C. §105 does not
|
|
54
|
+
extend to the states, so a state work is copyrighted unless the state says
|
|
55
|
+
otherwise. Two surveys were checked for an Ohio carve-out and both are
|
|
56
|
+
silent: the Wikipedia survey of subnational copyright status covers
|
|
57
|
+
seventeen states and Ohio is NOT among them, and Commons' own
|
|
58
|
+
copyright-rules-by-territory page for the United States lists state PD tags
|
|
59
|
+
for CA, FL, GA, MA, ME, MN (Geological Survey), OK, WA (Redistricting
|
|
60
|
+
Commission) and one Alabama municipality — there is no {{PD-OHGov}}. No
|
|
61
|
+
Ohio statute, AG opinion or case establishing a public-domain rule for state
|
|
62
|
+
works was located. Ohio therefore sits at the default: TREAT THE ARTWORK AS
|
|
63
|
+
COPYRIGHTED. This is the opposite pole from Florida and must not be
|
|
64
|
+
softened by analogy to it.
|
|
65
|
+
emblem_rule: >-
|
|
66
|
+
PRD-PLATES §3's placeholder default applies with full force. The current
|
|
67
|
+
"Sunrise in Ohio" base is a full-bleed pictorial scene (skyline, hills,
|
|
68
|
+
river, wheat field, a child on a swing, a Wright Flyer) — the highest-risk
|
|
69
|
+
artwork category in the program, in a state with no PD posture. Render
|
|
70
|
+
`emblem: {present: true, rendered: placeholder}` and do not approximate the
|
|
71
|
+
scene beyond a neutral field. State-seal protection is independent of
|
|
72
|
+
copyright and is unresearched for Ohio.
|
|
73
|
+
photograph_caution: >-
|
|
74
|
+
The standing rule (PRD-PLATES §6): a CC licence on a Commons photograph of
|
|
75
|
+
an Ohio plate is the PHOTOGRAPHER's licence on the PHOTOGRAPH; the uploader
|
|
76
|
+
had no standing over the design. Because our renders are generated from
|
|
77
|
+
data and never derived from a photograph, those obligations never attach —
|
|
78
|
+
which is the whole argument for the own-SVG rule and is doing real work in
|
|
79
|
+
an adverse state like this one.
|
|
80
|
+
sources:
|
|
81
|
+
- "https://en.wikipedia.org/wiki/Copyright_status_of_works_by_subnational_governments_of_the_United_States # LOCATOR + NEGATIVE FINDING: seventeen states are covered and Ohio is not one of them"
|
|
82
|
+
- "https://commons.wikimedia.org/wiki/Commons:Copyright_rules_by_territory/United_States # the §105-does-not-reach-the-states rule, and the exhaustive list of state PD tags — no Ohio tag exists"
|
|
83
|
+
|
|
84
|
+
# ---------------------------------------------------------------------------
|
|
85
|
+
# The US standards chain, recorded once per US file. Voluntary, no federal
|
|
86
|
+
# mandate, and the delegation trap: AAMVA sends dimensions to SAE J686, whose
|
|
87
|
+
# own text is PAYWALLED and UNPINNED. Nothing here quotes J686.
|
|
88
|
+
# ---------------------------------------------------------------------------
|
|
89
|
+
us_standards:
|
|
90
|
+
no_federal_mandate: true
|
|
91
|
+
chain: "SAE J686 -> AAMVA License Plate Standard Edition 3 (September 2025) -> voluntary state adoption. AAMVA writes recommendations in the declarative present; read as RECOMMENDED PRACTICE, never as requirement."
|
|
92
|
+
aamva_edition_3:
|
|
93
|
+
dimensions_delegated: "AAMVA §3.1 sends plate dimensions and bolt holes to SAE J686. J686's own text was NOT obtained (paywalled); no J686 dimension is quoted anywhere in this dataset."
|
|
94
|
+
character_layout: "AAMVA §2.2: characters at least 2.5 in high, spaced at least 0.25 in apart, stroke weight 0.2-0.4 in, at least 1.25 in clear of top and bottom edges"
|
|
95
|
+
jurisdiction_name_layout: "AAMVA §2.1: jurisdiction name in the top centre between the bolt holes, at least 0.25 in above the plate number and 0.125 in from the top edge; jurisdiction characters 0.75-1.0 in"
|
|
96
|
+
stacked_characters: "AAMVA: 'If stacked characters are used, they are part of the official license plate number. No more than two characters are to be stacked.' Load-bearing in this GROUP — see the stacked-pair note on the Illinois and Wisconsin files."
|
|
97
|
+
replacement_cycle: "AAMVA §1.1 recommends a rolling or full replacement cycle 'not to exceed 7 to 10 years'. Ohio legislates NO replacement cycle at all (recorded gap) — contrast Michigan, which legislates a hard 10-year non-renewal, and Illinois, which runs a 10-year replating programme."
|
|
98
|
+
source: "https://www.aamva.org/getmedia/646bcc8a-219b-47d8-b5cd-726240473163/License-Plate-Standard-Edition-3_September-2025-Update.pdf"
|
|
99
|
+
folklore_caution: >-
|
|
100
|
+
The "1956 AMA standardization agreement" that supposedly fixed the 6x12 inch
|
|
101
|
+
plate is UNCITED in its Wikipedia source (a `citation needed` since 2017,
|
|
102
|
+
copied verbatim across articles — circular). It is NOT relied on here. Ohio
|
|
103
|
+
has no statutory plate dimension at all, so this file records no dimension
|
|
104
|
+
for the Ohio plate rather than importing the folklore number.
|
|
105
|
+
|
|
106
|
+
# ---------------------------------------------------------------------------
|
|
107
|
+
# Display rules — Ohio's best-sourced layer, entirely from statute.
|
|
108
|
+
# ---------------------------------------------------------------------------
|
|
109
|
+
display_rules:
|
|
110
|
+
default: "ONE plate, REAR. ORC 4503.19: 'The owner shall display the license plate and, when required, the validation sticker on the rear of the vehicle.'"
|
|
111
|
+
front_plate_required_when:
|
|
112
|
+
- "COMMERCIAL TRACTOR: 'However, a commercial tractor shall display the license plate on the front' (ORC 4503.19; repeated in ORC 4503.21) — front-only, the inverse of the state default and the same outlier shape as Florida's truck-tractor rule"
|
|
113
|
+
mounting: "ORC 4503.21: the plate must be displayed 'in plain view on the rear of the motor vehicle' and 'shall be securely fastened so as not to swing, and shall not be covered by any material that obstructs its visibility'. NOTE: unlike Florida (100 ft) and Illinois/Michigan (100 ft), Ohio's statute states NO legibility distance."
|
|
114
|
+
temporary_display: "ORC 4503.21: a temporary motor vehicle license registration is displayed 'in plain view from the rear of the vehicle either in the rear window or on an external rear surface'"
|
|
115
|
+
county_sticker: "ORC 4503.19 requires issuance of 'a county identification sticker, which shall be attached to the license plate' identifying the owner's county of residence. This is a STICKER, not a serial field — Ohio geography is on the plate but never in the plate string."
|
|
116
|
+
school_bus: "ORC 4503.19: 'The registrar or deputy registrar shall not issue a license plate for a school bus' — school buses are outside the ordinary plate system entirely"
|
|
117
|
+
penalty: "ORC 4503.19 and ORC 4503.21: 'Whoever violates this section is guilty of a minor misdemeanor.'"
|
|
118
|
+
front_plate_history: "Ohio required front plates until 1 July 2020 and has been rear-only since. The DATE is LOCATOR-GRADE (Wikipedia); what IS primary is that the current statutory text reads rear-only, which corroborates the change without dating it."
|
|
119
|
+
sources:
|
|
120
|
+
- "https://codes.findlaw.com/oh/title-xlv-motor-vehicles-aeronautics-watercraft/oh-rev-code-sect-4503-19.html # FETCHED. ORC 4503.19: rear display, commercial-tractor front exception, county identification sticker, school-bus exclusion, $7.50 per set of two / $6.50 single replacement, minor misdemeanor"
|
|
121
|
+
- "https://codes.ohio.gov/ohio-revised-code/section-4503.19 # CANONICAL citation for the same edict — NOT fetched this pass (host refused the connection)"
|
|
122
|
+
- "https://codes.findlaw.com/oh/title-xlv-motor-vehicles-aeronautics-watercraft/oh-rev-code-sect-4503-21.html # FETCHED. ORC 4503.21: plain view on the rear, commercial tractor front, no-swing/no-obstruction, temporary-tag rear-window display, minor misdemeanor"
|
|
123
|
+
- "https://codes.ohio.gov/ohio-revised-code/section-4503.21 # CANONICAL, not fetched"
|
|
124
|
+
- "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Ohio # LOCATOR ONLY (PRD-PLATES §4): 'Only rear plates have been required for all classes of vehicles, except commercial tractors, since July 1, 2020.' The DATE is not asserted as sourced."
|
|
125
|
+
|
|
126
|
+
series:
|
|
127
|
+
|
|
128
|
+
# =========================================================================
|
|
129
|
+
# STANDARD ISSUE — current and one back. Same serial arrangement across
|
|
130
|
+
# both, which is why the ids are dated: the BASE changed, the format did not.
|
|
131
|
+
# =========================================================================
|
|
132
|
+
- id: us-oh-standard-2021
|
|
133
|
+
class: standard
|
|
134
|
+
categories: [car, van, truck, bus]
|
|
135
|
+
period: { start: 2021 }
|
|
136
|
+
period_evidence: secondary-first-issue
|
|
137
|
+
matching: strict
|
|
138
|
+
format:
|
|
139
|
+
pattern: "LLL 9999"
|
|
140
|
+
regex: '\A[A-Z]{3} ?\d{4}\z'
|
|
141
|
+
evidence: secondary
|
|
142
|
+
charset:
|
|
143
|
+
notes: >-
|
|
144
|
+
NO OHIO STATUTE CONSTRAINS THE ORDINARY SERIAL. ORC 4503.19 speaks of
|
|
145
|
+
"a license plate" and never of its composition; the only place Chapter
|
|
146
|
+
4503 states a character grammar is ORC 4503.182, for TEMPORARY tags
|
|
147
|
+
(seven positions — see us-oh-temporary). No letter exclusions are
|
|
148
|
+
stated anywhere and none were observed. Consequently this file carries
|
|
149
|
+
NO `regex_statutory` for the standard series: there is no statutory
|
|
150
|
+
outer bound to record, and inventing one would be worse than the gap.
|
|
151
|
+
progression: "sequential three-letter blocks with a four-digit counter; observed range JDA 1000 -> JDZ 9999, then JRQ 1000 -> KRA 6695 as of 2025-05-23 (secondary)"
|
|
152
|
+
design:
|
|
153
|
+
background: { finish: retroreflective }
|
|
154
|
+
colour_note: >-
|
|
155
|
+
Dark blue screened serial on a full-bleed sunrise scene. NO HEX IS
|
|
156
|
+
RECORDED. Ohio's statute states no colour, the BMV site was unreachable,
|
|
157
|
+
and a hex invented from a photograph would be a fabricated fact wearing
|
|
158
|
+
a data field's clothes. Colour is a recorded gap, not an estimate.
|
|
159
|
+
legend_top: "OHIO"
|
|
160
|
+
legend_bottom: "Birthplace of Aviation"
|
|
161
|
+
graphic: { present: true, rendered: placeholder, description: "pictorial sunrise scene — skyline, hills, river, wheat field, a child on a swing and a Wright Flyer, with a red banner; observed via a Wikipedia locator only, never from a statutory drawing" }
|
|
162
|
+
emblem: { present: true, rendered: placeholder }
|
|
163
|
+
flat_vs_embossed: "reported as Ohio's first FLAT (screened, non-embossed) passenger base — secondary, and a real render-layer input if confirmed"
|
|
164
|
+
county_sticker: { present: true, position: "bottom centre", content: "county name, or on request the county number" }
|
|
165
|
+
region_encoding: "none in the serial. Ohio's county appears on a STICKER attached to the plate (ORC 4503.19), and the county-number scheme was replaced by county-NAME stickers on standard passenger plates in 2018 (secondary). A parse API must never try to decode Ohio geography out of the string."
|
|
166
|
+
sources:
|
|
167
|
+
- "https://codes.findlaw.com/oh/title-xlv-motor-vehicles-aeronautics-watercraft/oh-rev-code-sect-4503-19.html # FETCHED. ORC 4503.19: the county identification sticker attached to the plate; rear display; the absence of any serial grammar"
|
|
168
|
+
- "https://codes.ohio.gov/ohio-revised-code/section-4503.19 # CANONICAL, not fetched"
|
|
169
|
+
- "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Ohio # LOCATOR ONLY: 'Sunrise in Ohio' first issued 2021-12-29; serial format ABC 1234; ranges JDA 1000-JDZ 9999 and JRQ 1000-KRA 6695 (2025-05-23); the 2018 return to county-NAME stickers"
|
|
170
|
+
notes: >-
|
|
171
|
+
OHIO STANDARD ISSUE, CURRENT BASE ("Sunrise in Ohio"). PERIOD CAVEAT, and
|
|
172
|
+
it is the important line in this entry: `start: 2021` rests on a Wikipedia
|
|
173
|
+
first-issue date of 29 December 2021 and on nothing else. No Ohio primary
|
|
174
|
+
dating a base introduction was obtained — Ohio does not legislate base
|
|
175
|
+
changes, the BMV host refused connections, and collector-site era tables
|
|
176
|
+
are exactly what PRD-PLATES §9 warns about. The year is therefore carried
|
|
177
|
+
with `period_evidence: secondary-first-issue`, which is a first-class
|
|
178
|
+
admission and not a footnote: a verifier must re-derive it before this
|
|
179
|
+
claim enters the five-nines ledger. The FORMAT is on the same footing.
|
|
180
|
+
What IS statute-grade here is only the county sticker and the display
|
|
181
|
+
rules.
|
|
182
|
+
|
|
183
|
+
- id: us-oh-standard-2013
|
|
184
|
+
class: standard
|
|
185
|
+
categories: [car, van, truck, bus]
|
|
186
|
+
period: { start: 2013, end: 2021 }
|
|
187
|
+
period_evidence: secondary-first-issue
|
|
188
|
+
matching: strict
|
|
189
|
+
format:
|
|
190
|
+
pattern: "LLL 9999"
|
|
191
|
+
regex: '\A[A-Z]{3} ?\d{4}\z'
|
|
192
|
+
evidence: secondary
|
|
193
|
+
charset: { notes: "identical grammar to the current base — the 2021 change was a BASE change, not a format change" }
|
|
194
|
+
design:
|
|
195
|
+
background: { finish: retroreflective }
|
|
196
|
+
colour_note: "dark blue serial on a word-cloud background with a red triangle; no hex recorded, for the reason given on the current base"
|
|
197
|
+
legend_top: "OHIO"
|
|
198
|
+
legend_bottom: "Birthplace of Aviation"
|
|
199
|
+
graphic: { present: true, rendered: placeholder, description: "'Ohio Pride' word-cloud field; secondary only" }
|
|
200
|
+
emblem: { present: true, rendered: placeholder }
|
|
201
|
+
region_encoding: "county sticker; no serial encoding"
|
|
202
|
+
sources:
|
|
203
|
+
- "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Ohio # LOCATOR ONLY: 'Ohio Pride' base, 2013-04-15 to 2021-12-28, serial format ABC 1234, 46 slogan variants"
|
|
204
|
+
- "https://codes.findlaw.com/oh/title-xlv-motor-vehicles-aeronautics-watercraft/oh-rev-code-sect-4503-19.html # FETCHED. The statutory frame this base was issued under is unchanged, which is why no format difference is recorded"
|
|
205
|
+
notes: >-
|
|
206
|
+
ONE SERIES BACK ("Ohio Pride", 2013-2021). Carried because L2 asks for the
|
|
207
|
+
previous standard base, and it earns its place by demonstrating something a
|
|
208
|
+
format-only dataset would miss: TWO CONSECUTIVE OHIO BASES SHARE ONE
|
|
209
|
+
SERIAL GRAMMAR. A regex match on `ABC 1234` therefore dates an Ohio plate
|
|
210
|
+
not at all — the discriminator is the base artwork and the serial BLOCK,
|
|
211
|
+
not the shape. Both this period and the boundary date are
|
|
212
|
+
secondary-first-issue and overlap the current base's start year by
|
|
213
|
+
construction; the transition is recorded as adjacent, not as parallel
|
|
214
|
+
issuance.
|
|
215
|
+
|
|
216
|
+
# =========================================================================
|
|
217
|
+
# CORE DISTINCT CLASSES (L2 scope): motorcycle, trailer, dealer, temporary.
|
|
218
|
+
# Government is a RECORDED GAP — see the file header.
|
|
219
|
+
# =========================================================================
|
|
220
|
+
- id: us-oh-motorcycle-2015
|
|
221
|
+
class: motorcycle
|
|
222
|
+
categories: [motorcycle]
|
|
223
|
+
period: { start: 2015 }
|
|
224
|
+
period_evidence: secondary-first-issue
|
|
225
|
+
matching: strict
|
|
226
|
+
format:
|
|
227
|
+
pattern: "LLL99"
|
|
228
|
+
regex: '\A[A-Z]{3}\d{2}\z'
|
|
229
|
+
evidence: secondary
|
|
230
|
+
charset: { notes: "five positions, no printed separator observed; the reduced plate size is departmental, not statutory" }
|
|
231
|
+
progression: "observed from AAA01 (secondary)"
|
|
232
|
+
design:
|
|
233
|
+
background: { finish: retroreflective }
|
|
234
|
+
emblem: { present: true, rendered: placeholder }
|
|
235
|
+
size_note: "reduced motorcycle size; NO dimension recorded — Ohio legislates none and AAMVA delegates dimensions to the unpinned SAE J686"
|
|
236
|
+
region_encoding: none
|
|
237
|
+
sources:
|
|
238
|
+
- "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Ohio # LOCATOR ONLY: motorcycle series 2015-present, format ABC12, from AAA01"
|
|
239
|
+
- "https://codes.findlaw.com/oh/title-xlv-motor-vehicles-aeronautics-watercraft/oh-rev-code-sect-4503-19.html # FETCHED. ORC 4503.19 governs issuance and rear display for motorcycles as for other vehicles; no motorcycle-specific grammar exists"
|
|
240
|
+
notes: >-
|
|
241
|
+
MOTORCYCLE. Its own series rather than a flag on the standard plate
|
|
242
|
+
because the FORMAT differs (five positions against seven) and the plate
|
|
243
|
+
size differs. Everything except the display rule is secondary; recorded as
|
|
244
|
+
such rather than omitted, because a plates dataset with no US motorcycle
|
|
245
|
+
coverage is less useful than one with flagged coverage.
|
|
246
|
+
|
|
247
|
+
- id: us-oh-trailer-2021
|
|
248
|
+
class: trailer
|
|
249
|
+
categories: [trailer]
|
|
250
|
+
period: { start: 2021 }
|
|
251
|
+
period_evidence: secondary-first-issue
|
|
252
|
+
matching: strict
|
|
253
|
+
format:
|
|
254
|
+
pattern: "ULL 9999"
|
|
255
|
+
regex: '\AU[A-Z]{2} ?\d{4}\z'
|
|
256
|
+
evidence: secondary
|
|
257
|
+
charset:
|
|
258
|
+
notes: >-
|
|
259
|
+
The leading U is an OBSERVED BLOCK ALLOCATION, not a statutory prefix:
|
|
260
|
+
the non-commercial trailer series is reported running from UAA 1000,
|
|
261
|
+
i.e. Ohio reserved the U-block for trailers. It is spelled as a literal
|
|
262
|
+
here because that is what the current series prints, but a verifier
|
|
263
|
+
should treat it as a range fact that will expire when the block does.
|
|
264
|
+
design:
|
|
265
|
+
background: { finish: retroreflective }
|
|
266
|
+
emblem: { present: true, rendered: placeholder }
|
|
267
|
+
region_encoding: none
|
|
268
|
+
sources:
|
|
269
|
+
- "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Ohio # LOCATOR ONLY: non-commercial trailer 2021-present, format UBC 1234, from UAA 1000"
|
|
270
|
+
- "https://codes.findlaw.com/oh/title-xlv-motor-vehicles-aeronautics-watercraft/oh-rev-code-sect-4503-21.html # FETCHED. ORC 4503.21 display duty applies to the trailer plate as to any other"
|
|
271
|
+
notes: >-
|
|
272
|
+
NON-COMMERCIAL TRAILER. Separately serialized, hence its own series under
|
|
273
|
+
PRD-PLATES §2.3. The interesting modelling point is the U-BLOCK: Ohio
|
|
274
|
+
distinguishes the class by a letter block inside a shared grammar rather
|
|
275
|
+
than by a distinct grammar, so `[A-Z]{3} ?\d{4}` alone cannot tell a
|
|
276
|
+
trailer plate from a passenger plate — only the block can, and blocks
|
|
277
|
+
exhaust. A parse API must rank, not decide, on this evidence.
|
|
278
|
+
|
|
279
|
+
- id: us-oh-dealer-2021
|
|
280
|
+
class: dealer
|
|
281
|
+
categories: [car, van, truck, bus, motorcycle, trailer]
|
|
282
|
+
period: { start: 2021 }
|
|
283
|
+
period_evidence: secondary-first-issue
|
|
284
|
+
matching: strict
|
|
285
|
+
format:
|
|
286
|
+
pattern: "999 L9LL"
|
|
287
|
+
regex: '\A\d{3} ?[A-Z]\d[A-Z]{2}\z'
|
|
288
|
+
evidence: secondary-weak
|
|
289
|
+
charset:
|
|
290
|
+
notes: >-
|
|
291
|
+
FLAGGED AS THE WEAKEST FORMAT CLAIM IN THIS FILE. The arrangement
|
|
292
|
+
"123 A1BC" comes from a single secondary table and is unusual enough
|
|
293
|
+
(a letter-digit-letter-letter tail) that it may be a transcription of a
|
|
294
|
+
STACKED pair rather than a linear serial. No Ohio primary was
|
|
295
|
+
obtained. A verifier should either confirm it against a BMV source or
|
|
296
|
+
delete this series; it is carried, flagged, rather than silently
|
|
297
|
+
dropped, because dealer plates are inside the L2 core-class list.
|
|
298
|
+
design:
|
|
299
|
+
background: { finish: retroreflective }
|
|
300
|
+
legend_bottom: "Dealer"
|
|
301
|
+
emblem: { present: true, rendered: placeholder }
|
|
302
|
+
binding: business
|
|
303
|
+
region_encoding: none
|
|
304
|
+
sources:
|
|
305
|
+
- "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Ohio # LOCATOR ONLY, and the sole source for this format: dealer series 2021-present, format 123 A1BC"
|
|
306
|
+
- "https://codes.findlaw.com/oh/title-xlv-motor-vehicles-aeronautics-watercraft/oh-rev-code-sect-4503-19.html # FETCHED. ORC 4503.19 is the issuance frame; it carries no dealer-plate grammar"
|
|
307
|
+
notes: >-
|
|
308
|
+
DEALER PLATES. `binding: business` for the same reason as Germany's rote
|
|
309
|
+
Kennzeichen and Florida's dealer plate: the plate follows the dealership,
|
|
310
|
+
not a vehicle. The format is the one entry in this file I would expect a
|
|
311
|
+
verifier to change.
|
|
312
|
+
|
|
313
|
+
- id: us-oh-temporary
|
|
314
|
+
class: temporary
|
|
315
|
+
categories: [car, van, truck, bus, motorcycle, trailer]
|
|
316
|
+
period: { start: 2026 }
|
|
317
|
+
period_evidence: instrument-in-force-upper-bound
|
|
318
|
+
matching: strict
|
|
319
|
+
format:
|
|
320
|
+
pattern: "LLLLLLL"
|
|
321
|
+
regex: '\A[A-Z0-9]{7}\z'
|
|
322
|
+
evidence: statutory
|
|
323
|
+
charset:
|
|
324
|
+
notes: >-
|
|
325
|
+
ORC 4503.182, verbatim: temporary registrations 'shall bear a
|
|
326
|
+
distinctive combination of SEVEN letters, numerals, or letters and
|
|
327
|
+
numerals, and shall incorporate a security feature that, to the
|
|
328
|
+
greatest degree possible, prevents tampering with any of the
|
|
329
|
+
information that is entered upon it when it is issued.' THIS IS THE
|
|
330
|
+
ONLY STATUTORY SERIAL GRAMMAR IN THE WHOLE OF OHIO'S PLATE LAW, which
|
|
331
|
+
is why the temporary tag — normally the least interesting class — is
|
|
332
|
+
the best-sourced series in this file. Seven positions exactly, the
|
|
333
|
+
full alphanumeric alphabet, no exclusions stated.
|
|
334
|
+
design:
|
|
335
|
+
material: "paper/card; ORC 4503.21 requires display 'in plain view from the rear of the vehicle either in the rear window or on an external rear surface'"
|
|
336
|
+
background: { finish: none }
|
|
337
|
+
emblem: { present: false }
|
|
338
|
+
security_feature: "required by ORC 4503.182 — anti-tamper, unspecified in kind"
|
|
339
|
+
validity: "FORTY-FIVE DAYS. ORC 4503.182: 'A temporary motor vehicle license registration issued under division (A) of this section is valid for a period of forty-five days from date of issuance and is not transferable or renewable.'"
|
|
340
|
+
region_encoding: none
|
|
341
|
+
sources:
|
|
342
|
+
- "https://codes.findlaw.com/oh/title-xlv-motor-vehicles-aeronautics-watercraft/oh-rev-code-sect-4503-182.html # FETCHED. ORC 4503.182: the seven-character grammar, the 45-day validity, non-transferable and non-renewable, the anti-tamper security feature, and the use restriction"
|
|
343
|
+
- "https://codes.ohio.gov/ohio-revised-code/section-4503.182 # CANONICAL, not fetched"
|
|
344
|
+
- "https://codes.findlaw.com/oh/title-xlv-motor-vehicles-aeronautics-watercraft/oh-rev-code-sect-4503-21.html # FETCHED. ORC 4503.21: where the temporary registration is displayed"
|
|
345
|
+
notes: >-
|
|
346
|
+
TEMPORARY REGISTRATION. `period.start: 2026` is an INSTRUMENT-IN-FORCE
|
|
347
|
+
UPPER BOUND — the statute is in force in the edition read and says nothing
|
|
348
|
+
about when the seven-character grammar began; Ohio has issued temporary
|
|
349
|
+
tags since long before. Recorded as an upper bound rather than invented,
|
|
350
|
+
exactly as the Florida pilot does. Two facts here are worth carrying
|
|
351
|
+
forward: paper temporary tags with a MANDATED CHARACTER COUNT are rare in
|
|
352
|
+
US law, and the 45-day window is longer than Michigan's 30 — temporary
|
|
353
|
+
validity is a genuine per-state variable, not a constant.
|
|
354
|
+
|
|
355
|
+
# =========================================================================
|
|
356
|
+
# SPECIALTY — PROGRAM INDEX ONLY (PRD-PLATES §2.5). No individual designs.
|
|
357
|
+
# =========================================================================
|
|
358
|
+
- id: us-oh-specialty-index
|
|
359
|
+
class: specialty
|
|
360
|
+
categories: [car, van, truck, motorcycle]
|
|
361
|
+
period: { start: 2026 }
|
|
362
|
+
period_evidence: instrument-in-force-upper-bound
|
|
363
|
+
matching: strict
|
|
364
|
+
format:
|
|
365
|
+
pattern: "LLL 9999"
|
|
366
|
+
regex: '\A[A-Z]{3} ?\d{4}\z'
|
|
367
|
+
evidence: secondary
|
|
368
|
+
charset: { notes: "specialty plates carry ORDINARY serials on an alternative design; no separate grammar is stated in law or observed" }
|
|
369
|
+
design:
|
|
370
|
+
background: { finish: retroreflective }
|
|
371
|
+
note: "one design per authorised programme; the designs themselves are L4 scope (PRD-PLATES §2.5) and none is described here"
|
|
372
|
+
emblem: { present: true, rendered: placeholder }
|
|
373
|
+
program_index:
|
|
374
|
+
count_official: null
|
|
375
|
+
count_status: RECORDED-GAP
|
|
376
|
+
count_note: >-
|
|
377
|
+
NO COUNT IS RECORDED, AND THE REASON IS PART OF THE RECORD. Ohio's own
|
|
378
|
+
plate catalogue lives at bmv.ohio.gov, which returned an F5 rejection
|
|
379
|
+
page to every request from this environment; no official figure was
|
|
380
|
+
obtained, and no secondary figure was found either (the Wikipedia
|
|
381
|
+
article states only that 'Ohio state law authorizes the Bureau of Motor
|
|
382
|
+
Vehicles to issue a number of specialty passenger plates, as defined in
|
|
383
|
+
Ohio Rev. Code chapter 4503' — a count-free sentence). Recording `null`
|
|
384
|
+
with a stated cause is the honest move; a guessed order of magnitude
|
|
385
|
+
would be indistinguishable from a fact once it is in YAML.
|
|
386
|
+
official_list_url: "https://www.bmv.ohio.gov/rs-license-plates.aspx"
|
|
387
|
+
official_list_fetch_status: "BLOCKED — F5/ASM rejection page ('The requested URL was rejected') on every attempt from this environment, 2026-08-02"
|
|
388
|
+
statutory_basis: "Ohio Revised Code Chapter 4503 authorises the individual specialty plates one section at a time (the sections in the 4503.4x-4503.9x range), rather than by a single generic authorisation with a petition threshold. That is the structural contrast with Illinois (2,000 applications, 625 ILCS 5/3-600) and Wisconsin (500 signatures, Wis. Stat. 341.14): OHIO'S SPECIALTY CATALOGUE IS A LIST OF STATUTES, so its true size is countable from the code itself — a tractable follow-up that needs codes.ohio.gov to be reachable."
|
|
389
|
+
region_encoding: none
|
|
390
|
+
sources:
|
|
391
|
+
- "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Ohio # LOCATOR ONLY: 'Ohio state law authorizes the Bureau of Motor Vehicles to issue a number of specialty passenger plates, as defined in Ohio Rev. Code chapter 4503' — no number given"
|
|
392
|
+
- "https://codes.findlaw.com/oh/title-xlv-motor-vehicles-aeronautics-watercraft/oh-rev-code-sect-4503-14.html # FETCHED. ORC 4503.14 is a worked example of the per-plate statutory pattern: it authorises plates bearing 'the official call letters of the applicant as assigned by the federal communications commission' for licensed amateur-radio and broadcast operators"
|
|
393
|
+
notes: >-
|
|
394
|
+
THE OHIO SPECIALTY PROGRAM INDEX — one entry standing for the whole
|
|
395
|
+
programme, per PRD-PLATES §2.5. The count is a declared gap. The finding
|
|
396
|
+
worth carrying forward is STRUCTURAL rather than numeric: Ohio does not
|
|
397
|
+
have a generic specialty-plate mechanism with a petition threshold the way
|
|
398
|
+
Illinois and Wisconsin do; it authorises plates individually in statute.
|
|
399
|
+
That makes the Ohio catalogue enumerable from a public-domain edict rather
|
|
400
|
+
than from an agency page — a better long-run source than any brochure, and
|
|
401
|
+
one that also explains why the amateur-radio call-sign plate (ORC 4503.14)
|
|
402
|
+
is a SPECIALTY plate whose serial is not assigned by the state at all but
|
|
403
|
+
by the FCC. That is a genuinely unusual serial provenance and the only
|
|
404
|
+
Ohio plate whose characters are governed by federal allocation.
|