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.
Files changed (186) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +164 -0
  3. data/CHANGELOG.md +274 -0
  4. data/README.md +55 -10
  5. data/data/PROVENANCE-vehicles.md +12 -0
  6. data/data/plates/PROVENANCE.md +5 -4
  7. data/data/plates/_decode/at-districts.yml +287 -0
  8. data/data/plates/_decode/ch-cantons.yml +110 -0
  9. data/data/plates/_decode/cn-issuing-offices.yml +463 -0
  10. data/data/plates/_decode/cn-provinces.yml +614 -0
  11. data/data/plates/_decode/cz-kraj.yml +159 -0
  12. data/data/plates/_decode/dk-serial-blocks.yml +327 -0
  13. data/data/plates/_decode/fr-departements.yml +191 -0
  14. data/data/plates/_decode/gb-age-identifiers.yml +170 -0
  15. data/data/plates/_decode/gb-memory-tags.yml +202 -0
  16. data/data/plates/_decode/gr-prefectures.yml +1408 -0
  17. data/data/plates/_decode/hr-cities.yml +315 -0
  18. data/data/plates/_decode/ie-counties.yml +227 -0
  19. data/data/plates/_decode/in-state-codes.yml +169 -0
  20. data/data/plates/_decode/is-districts-1938.yml +116 -0
  21. data/data/plates/_decode/it-provinces.yml +348 -0
  22. data/data/plates/_decode/jp-office-marks.yml +960 -0
  23. data/data/plates/_decode/jp-use-marks.yml +205 -0
  24. data/data/plates/_decode/kr-authority-marks.yml +146 -0
  25. data/data/plates/_decode/kr-use-syllables.yml +194 -0
  26. data/data/plates/_decode/lu-series-order.yml +638 -0
  27. data/data/plates/_decode/mx-entity-series.yml +380 -0
  28. data/data/plates/_decode/my-index-marks.yml +271 -0
  29. data/data/plates/_decode/no-counties-1913.yml +148 -0
  30. data/data/plates/_decode/no-districts.yml +901 -0
  31. data/data/plates/_decode/pl-powiats.yml +567 -0
  32. data/data/plates/_decode/pt-trailer-services.yml +96 -0
  33. data/data/plates/_decode/ro-counties.yml +213 -0
  34. data/data/plates/_decode/se-diplomatic.yml +220 -0
  35. data/data/plates/_decode/si-regions.yml +123 -0
  36. data/data/plates/_decode/sk-districts.yml +314 -0
  37. data/data/plates/_decode/th-registration-elements.yml +208 -0
  38. data/data/plates/_decode/ua-regions.yml +393 -0
  39. data/data/plates/_decode/za-licence-marks.yml +215 -0
  40. data/data/plates/_meta/classes.yml +1 -0
  41. data/data/plates/_meta/separators.yml +102 -0
  42. data/data/plates/ad.yml +961 -0
  43. data/data/plates/ar.yml +762 -0
  44. data/data/plates/at.yml +1424 -0
  45. data/data/plates/au-act.yml +472 -0
  46. data/data/plates/au-nsw.yml +282 -0
  47. data/data/plates/au-nt.yml +431 -0
  48. data/data/plates/au-qld.yml +272 -0
  49. data/data/plates/au-sa.yml +248 -0
  50. data/data/plates/au-tas.yml +302 -0
  51. data/data/plates/au-vic.yml +215 -0
  52. data/data/plates/au-wa.yml +309 -0
  53. data/data/plates/be.yml +1840 -0
  54. data/data/plates/br.yml +1152 -0
  55. data/data/plates/ca-ab.yml +430 -0
  56. data/data/plates/ca-bc.yml +697 -0
  57. data/data/plates/ca-mb.yml +499 -0
  58. data/data/plates/ca-nb.yml +537 -0
  59. data/data/plates/ca-nl.yml +743 -0
  60. data/data/plates/ca-ns.yml +808 -0
  61. data/data/plates/ca-nt.yml +610 -0
  62. data/data/plates/ca-nu.yml +280 -0
  63. data/data/plates/ca-on.yml +881 -0
  64. data/data/plates/ca-pe.yml +592 -0
  65. data/data/plates/ca-qc.yml +1036 -0
  66. data/data/plates/ca-sk.yml +256 -0
  67. data/data/plates/ca-yt.yml +656 -0
  68. data/data/plates/ch.yml +1273 -0
  69. data/data/plates/cn.yml +1431 -0
  70. data/data/plates/cy.yml +688 -0
  71. data/data/plates/cz.yml +1179 -0
  72. data/data/plates/de.yml +553 -118
  73. data/data/plates/dk.yml +1647 -0
  74. data/data/plates/ee.yml +1275 -0
  75. data/data/plates/es.yml +228 -32
  76. data/data/plates/fi.yml +1271 -0
  77. data/data/plates/fr.yml +1265 -0
  78. data/data/plates/gb.yml +1188 -0
  79. data/data/plates/gr.yml +721 -0
  80. data/data/plates/hr.yml +860 -0
  81. data/data/plates/hu.yml +959 -0
  82. data/data/plates/ie.yml +775 -0
  83. data/data/plates/in.yml +1172 -0
  84. data/data/plates/is.yml +667 -0
  85. data/data/plates/it.yml +1317 -0
  86. data/data/plates/jp.yml +3650 -0
  87. data/data/plates/kr.yml +1375 -0
  88. data/data/plates/li.yml +1010 -0
  89. data/data/plates/lt.yml +879 -0
  90. data/data/plates/lu.yml +842 -0
  91. data/data/plates/lv.yml +924 -0
  92. data/data/plates/mc.yml +1024 -0
  93. data/data/plates/mt.yml +854 -0
  94. data/data/plates/mx.yml +1372 -0
  95. data/data/plates/my.yml +685 -0
  96. data/data/plates/nl.yml +44 -0
  97. data/data/plates/no.yml +1018 -0
  98. data/data/plates/nz.yml +1699 -0
  99. data/data/plates/pl.yml +1296 -0
  100. data/data/plates/pt.yml +847 -0
  101. data/data/plates/ro.yml +785 -0
  102. data/data/plates/se.yml +1091 -0
  103. data/data/plates/si.yml +1105 -0
  104. data/data/plates/sk.yml +1439 -0
  105. data/data/plates/sm.yml +1119 -0
  106. data/data/plates/th.yml +1150 -0
  107. data/data/plates/ua.yml +1672 -0
  108. data/data/plates/us-ak.yml +763 -0
  109. data/data/plates/us-al.yml +457 -0
  110. data/data/plates/us-ar.yml +427 -0
  111. data/data/plates/us-as.yml +454 -0
  112. data/data/plates/us-az.yml +430 -0
  113. data/data/plates/us-ca.yml +892 -0
  114. data/data/plates/us-co.yml +452 -0
  115. data/data/plates/us-ct.yml +427 -0
  116. data/data/plates/us-dc.yml +614 -0
  117. data/data/plates/us-de.yml +551 -0
  118. data/data/plates/us-fl.yml +319 -96
  119. data/data/plates/us-ga.yml +644 -0
  120. data/data/plates/us-gu.yml +658 -0
  121. data/data/plates/us-hi.yml +585 -0
  122. data/data/plates/us-ia.yml +438 -0
  123. data/data/plates/us-id.yml +531 -0
  124. data/data/plates/us-il.yml +516 -0
  125. data/data/plates/us-in.yml +324 -0
  126. data/data/plates/us-ks.yml +351 -0
  127. data/data/plates/us-ky.yml +770 -0
  128. data/data/plates/us-la.yml +568 -0
  129. data/data/plates/us-ma.yml +379 -0
  130. data/data/plates/us-md.yml +536 -0
  131. data/data/plates/us-me.yml +445 -0
  132. data/data/plates/us-mi.yml +408 -0
  133. data/data/plates/us-mn.yml +411 -0
  134. data/data/plates/us-mo.yml +356 -0
  135. data/data/plates/us-mp.yml +402 -0
  136. data/data/plates/us-ms.yml +432 -0
  137. data/data/plates/us-mt.yml +619 -0
  138. data/data/plates/us-nc.yml +602 -0
  139. data/data/plates/us-nd.yml +419 -0
  140. data/data/plates/us-ne.yml +483 -0
  141. data/data/plates/us-nh.yml +394 -0
  142. data/data/plates/us-nj.yml +547 -0
  143. data/data/plates/us-nm.yml +574 -0
  144. data/data/plates/us-nv.yml +655 -0
  145. data/data/plates/us-ny.yml +592 -0
  146. data/data/plates/us-oh.yml +404 -0
  147. data/data/plates/us-ok.yml +513 -0
  148. data/data/plates/us-or.yml +392 -0
  149. data/data/plates/us-pa.yml +506 -0
  150. data/data/plates/us-pr.yml +507 -0
  151. data/data/plates/us-ri.yml +445 -0
  152. data/data/plates/us-sc.yml +605 -0
  153. data/data/plates/us-sd.yml +428 -0
  154. data/data/plates/us-tn.yml +471 -0
  155. data/data/plates/us-tx.yml +535 -0
  156. data/data/plates/us-ut.yml +384 -0
  157. data/data/plates/us-va.yml +567 -0
  158. data/data/plates/us-vi.yml +489 -0
  159. data/data/plates/us-vt.yml +458 -0
  160. data/data/plates/us-wa.yml +484 -0
  161. data/data/plates/us-wi.yml +509 -0
  162. data/data/plates/us-wv.yml +446 -0
  163. data/data/plates/us-wy.yml +523 -0
  164. data/data/plates/va.yml +604 -0
  165. data/data/plates/za.yml +1141 -0
  166. data/data/vehicles.json +160653 -105090
  167. data/lib/vehicles/configuration.rb +17 -3
  168. data/lib/vehicles/dataset.rb +73 -18
  169. data/lib/vehicles/fuzzy.rb +115 -0
  170. data/lib/vehicles/http.rb +48 -0
  171. data/lib/vehicles/make.rb +36 -6
  172. data/lib/vehicles/mcp_server.rb +5 -5
  173. data/lib/vehicles/model.rb +21 -2
  174. data/lib/vehicles/plates/series.rb +172 -18
  175. data/lib/vehicles/plates/template_fill.rb +188 -0
  176. data/lib/vehicles/plates/templates.rb +162 -0
  177. data/lib/vehicles/plates.rb +12 -0
  178. data/lib/vehicles/providers/hosted_provider.rb +28 -55
  179. data/lib/vehicles/validators/vehicle_make_validator.rb +3 -1
  180. data/lib/vehicles/validators/vehicle_model_validator.rb +1 -1
  181. data/lib/vehicles/version.rb +1 -1
  182. data/lib/vehicles.rb +32 -16
  183. data/rakelib/data_refresh.rake +109 -0
  184. data/rakelib/plates_refresh.rake +29 -0
  185. data/sig/vehicles.rbs +18 -0
  186. metadata +164 -2
@@ -0,0 +1,1172 @@
1
+ # plates/in.yml — India (PRD-PLATES gate L3). DRAFT for human verification.
2
+ #
3
+ # EVERY format, colour, dimension and class claim in this file comes from one
4
+ # of five primaries, all fetched and quoted verbatim in the dossier:
5
+ #
6
+ # * the Motor Vehicles Act, 1988 (59 of 1988) — the enabling STATUTE, in
7
+ # force 1 July 1989 (S.O. 368(E), 22 May 1989). India Code PDF.
8
+ # * the Central Motor Vehicles Rules, 1989 (G.S.R. 590(E), 2 June 1989) —
9
+ # rules 33-51 (registration + display), 76-80 (diplomatic), 81A-81C
10
+ # (vintage), read from MoRTH's own consolidated chapter PDF.
11
+ # * the Gazette of India (egazette.gov.in) for the instruments that create
12
+ # the newer series: G.S.R. 594(E) 26-8-2021 (BH), G.S.R. 492(E)
13
+ # 15-7-2021 (vintage), G.S.R. 703(E) 14-9-2022 (trade), G.S.R. 240(E)
14
+ # 31-3-2021 (temporary), G.S.R. 749(E) 7-8-2018 (EV green),
15
+ # G.S.R. 633(E) 23-6-2017 (consular colours), S.O. 6052(E) 6-12-2018
16
+ # (High Security Registration Plates Order, 2018).
17
+ # * S.O. 4262(E) 25-11-2019 and S.O. 1306(E) 12-3-2024 — two amendments to
18
+ # the state-code notification, which are how that notification's identity
19
+ # was recovered (see finding 2).
20
+ #
21
+ # FIVE STRUCTURAL FACTS THAT SHAPE THIS FILE
22
+ #
23
+ # 1. THE COMPOSITION OF AN ORDINARY INDIAN REGISTRATION MARK IS IN NO RULE.
24
+ # This is the German/British delegation pattern arriving in India by a
25
+ # third route. MVA 1988 § 41(6), verbatim: "The registering authority
26
+ # shall assign to the vehicle, for display thereon, a distinguishing mark
27
+ # (in this Act referred to as the registration mark) consisting of one of
28
+ # the groups of such of those letters and followed by such letters and
29
+ # figures as are allotted to the State by the Central Government from time
30
+ # to time BY NOTIFICATION IN THE OFFICIAL GAZETTE, and displayed and shown
31
+ # on the motor vehicle in such form and in such manner as may be prescribed
32
+ # by the Central Government." So: the LETTERS are a gazette allotment (the
33
+ # state-code notification, finding 2); the FORM AND MANNER are the rules
34
+ # (rule 50, rule 51). Nowhere does any instrument say "two letters, two
35
+ # digits, up to three letters, four numerals". That shape is reconstructed
36
+ # here from four rules that define OTHER marks BY REFERENCE to it, each
37
+ # quoted on its series below:
38
+ # rule 50(3) "the State code and registering authority code forming the
39
+ # first line and the rest forming the second line"
40
+ # rule 35(3) "AB—Represents State Code, 12—Represents RTO Code"
41
+ # rule 53C "AB- Represent State Code; 1234- Serial Number ..."
42
+ # rule 81B "XX stands for State code, YY will be a two letter series"
43
+ # The 1-to-3-letter series group and the 4-digit 0001-9999 serial are
44
+ # therefore recorded as `format.composition_evidence: reconstructed` on the
45
+ # standard series, with the reconstruction spelled out. Do not upgrade that
46
+ # tag without the state-code notification in hand.
47
+ #
48
+ # 2. THE STATE-CODE LIST IS S.O. 444(E), 12 JUNE 1989 — AND IT IS NOT ONLINE.
49
+ # Two gazette notifications fetched for this pass name it in terms:
50
+ # S.O. 4262(E) (25-11-2019) inserts "17A. Ladakh LA" and S.O. 1306(E)
51
+ # (12-3-2024) substitutes "29A. Telangana TG", both "in the Table to the
52
+ # said notification ... number S.O.444(E), dated the 12th June, 1989".
53
+ # e-Gazette's archive does not reach 1989 and MoRTH's site was rebuilt as
54
+ # a single-page app whose document paths now return the app shell, so the
55
+ # TABLE ITSELF was not reached. Consequence, stated plainly: two rows of
56
+ # plates/_decode/in-state-codes.yml are instrument-evidenced and the rest
57
+ # are not. The decode file says so per row. This is the single highest-value
58
+ # verifier target for India.
59
+ #
60
+ # 3. HSRP IS A DESIGN REGIME LAID OVER AN UNCHANGED MARK, AND ITS DATE IS A
61
+ # TRAP. Rule 50(1) was substituted by G.S.R. 221(E) (28-3-2001) "as amended
62
+ # by S.O. 938(E), dated 24-9-2001, S.O. 499(E), dated 9-5-2002 and S.O.
63
+ # 59(E), dated 21-1-2003 (w.e.f. 1-1-2004)" — so the security-licence-plate
64
+ # obligation bites from 1 January 2004, not 2001 and not 2005. The plates
65
+ # did not actually appear nationwide until the Motor Vehicles (High Security
66
+ # Registration Plates) Order, 2018 (S.O. 6052(E), 6-12-2018) forced OEM
67
+ # fitment "for a new vehicle to be sold on or after 1st April, 2019". Both
68
+ # dates are recorded; the ENFORCEMENT gap between them is in the notes and
69
+ # is not modelled as a period.
70
+ #
71
+ # 4. COLOUR IS PRESCRIBED BY CLASS OF USE, NOT BY VEHICLE KIND, AND EVERY
72
+ # COLOUR HERE IS NAMED-BUT-NOT-NUMBERED. Rule 50(2)(d) (substituted by
73
+ # G.S.R. 901(E), 13-12-2001): transport vehicles "in black colour on yellow
74
+ # background", "in other cases, in black colour on white background". Rule
75
+ # 50(2A) (inserted by G.S.R. 749(E), 7-8-2018) adds battery-operated
76
+ # vehicles: yellow on green for transport, white on green otherwise. Rule
77
+ # 39(2) (substituted 2022) makes the trade mark "white colour on red
78
+ # background". Rule 77(1) fixes the diplomatic/consular/CDP colours. NOT ONE
79
+ # of these instruments gives a chromaticity coordinate or a colour standard,
80
+ # so every hex in this file carries `hex_basis: observed` inside a
81
+ # statutorily NAMED colour — the plates/gb.yml and plates/de.yml posture.
82
+ #
83
+ # 5. THE ARMED FORCES ARE OUTSIDE THIS FILE, BY STATUTE. MVA § 60(1):
84
+ # "Such authority as the Central Government may, by notification in the
85
+ # Official Gazette, specify, may register any motor vehicle which is the
86
+ # property or for the time being under the exclusive control of the Central
87
+ # Government and is used for Government purposes relating to the defence of
88
+ # the country ... and any vehicle so registered shall not ... require to be
89
+ # registered otherwise under this Act." The broad-arrow Ministry of Defence
90
+ # mark is therefore issued under a different regime whose instrument was NOT
91
+ # reached in this pass. No military series is invented here; it is a
92
+ # recorded gap.
93
+ #
94
+ # REGEX POLICY (identical to plates/gb.yml, plates/nl.yml, plates/de.yml):
95
+ # `format.regex` is the LINT-ROUND-TRIPPABLE regex — the lint generates
96
+ # serials from `format.pattern` (L -> any A-Z, 9 -> any 0-9) and requires the
97
+ # regex to accept all of them, so `regex` can never be narrower than the
98
+ # pattern's own alphabet. `format.regex_strict` carries the tighter sourced
99
+ # form: the closed state-code alternation, the 01-99 district range, the
100
+ # 0001-9999 serial floor, and — where an instrument says so in terms — the
101
+ # exclusion of I and O. `format.regex_statutory` appears only where an
102
+ # instrument imposes NO digit count and our regex invents a practical bound
103
+ # (the diplomatic series).
104
+ #
105
+ # SEPARATOR NOTE (PRD-PLATES § 2.6): an Indian plate prints NO separator
106
+ # glyph. Rule 50(3) prescribes a two-LINE layout (state+district code above,
107
+ # the rest below) and rule 51 prescribes inter-character spacing in
108
+ # millimetres; the space in every `pattern` here is the conventional textual
109
+ # rendering of that gap, and every regex accepts it as optional, exactly as
110
+ # plates/gb.yml does for the British 33 mm gap. The hyphenated rendering
111
+ # ("MH-12-AB-1234") is a data-entry convention, not a printed feature; a
112
+ # separator-forgiving consumer collapses both to one serial by construction.
113
+ jurisdiction: in
114
+ authority:
115
+ name: Ministry of Road Transport and Highways (MoRTH), Government of India — registering authorities (RTOs) of the States and Union Territories
116
+ url: "https://morth.nic.in/"
117
+ binding: vehicle
118
+ binding_note: >-
119
+ MVA 1988 § 41(6): the registering authority "shall assign TO THE VEHICLE,
120
+ for display thereon, a distinguishing mark". § 47 provides for assignment of
121
+ a NEW registration mark on removal to another State, which is the one place
122
+ the vehicle-binding is broken — and the BH series (rule 50(8), 2021) exists
123
+ precisely to stop that happening to inter-State movers: rule 54(3), inserted
124
+ by the same instrument, disapplies re-registration for a BH vehicle.
125
+ instrument:
126
+ statute:
127
+ citation: "The Motor Vehicles Act, 1988 (59 of 1988), § 41(6) (registration mark), § 39 (necessity for registration), § 43 (temporary registration), § 60 (Central Government / defence vehicles), § 64 (Central Government rule-making power)"
128
+ in_force: "1989-07-01"
129
+ in_force_source: "S.O. 368(E), dated 22 May 1989, Gazette of India, Extraordinary, Pt. II, sec. 3(ii) — the commencement notification, cited in the Act's own footnote 1 to § 1(3)"
130
+ rules:
131
+ citation: "The Central Motor Vehicles Rules, 1989, published vide G.S.R. 590(E), dated the 2nd June, 1989, Gazette of India, Extraordinary, Part II, Section 3, Sub-section (i)"
132
+ key_rules: "rule 33-43 (trade certificate and trade registration mark), rule 47-48 (application and issue of registration), rule 50 (form and manner of display of registration marks), rule 51 (size of letters and numerals), rule 53C (temporary registration marks), rule 76-80 (diplomatic and consular), rule 81A-81C (vintage motor vehicles)"
133
+ state_codes:
134
+ citation: "S.O. 444(E), dated the 12th June, 1989, Gazette of India, Extraordinary, Part II, Section 3, Sub-section (ii) — the TABLE of letters allotted to each State and Union Territory under MVA § 41(6)"
135
+ reached: false
136
+ amendment_chain_named_in_gazette:
137
+ - "S.O. 1486(E), dated 9 June 2014 — named as the then-last amendment by S.O. 4262(E)"
138
+ - "S.O. 4262(E), dated 25 November 2019 — inserts '17A. Ladakh LA' (fetched, verbatim)"
139
+ - "S.O. 2339(E), dated 14 July 2020 — named as the then-last amendment by S.O. 1306(E)"
140
+ - "S.O. 1306(E), dated 12 March 2024 — substitutes '29A. Telangana TG' (fetched, verbatim)"
141
+ source: "https://web.archive.org/web/20210514201915id_/https://morth.nic.in/sites/default/files/notifications_document/S.O.%204262%28E%29%20dated%2025%20th%20November%20Registration%20Mark%20for%20Ladakh%20LA.pdf # 'In the Table to the said notification, after serial number 17 ... 17A. Ladakh LA'; identifies the principal notification as S.O.444(E) dated 12 June 1989; accessed 2026-08-02"
142
+ hsrp:
143
+ citation: "The Motor Vehicles (High Security Registration Plates) Order, 2018, S.O. 6052(E), dated 6 December 2018, made under MVA § 109(3), in supersession of the Motor Vehicles (New High Security Registration Plates) Order, 2001"
144
+ in_force: "2019-04-01"
145
+ companion: "G.S.R. 1162(E), dated 4 December 2018 — the matching amendment to CMVR rules 50 and 124"
146
+ licence: >-
147
+ Gazette of India material and Government of India departmental publications
148
+ are Government of India works. India has no OGL-equivalent blanket licence;
149
+ § 52(1)(q) of the Copyright Act, 1957 permits reproduction of any Act,
150
+ rule or order made thereunder, and of any report of a Government
151
+ Commission, subject to the conditions there stated. Facts are extracted and
152
+ cited here; no gazette text is redistributed beyond quotation.
153
+
154
+ # ---------------------------------------------------------------------------
155
+ # Jurisdiction-wide facts, cited once and referenced per series.
156
+ # ---------------------------------------------------------------------------
157
+ common:
158
+ mark_composition:
159
+ reconstructed_shape: "SS RR X[X[X]] NNNN — two-letter State/UT code, two-digit registering-authority (RTO) district code, a series group of one to three letters, a four-digit serial 0001-9999"
160
+ evidence: >-
161
+ No instrument states this shape. It is reconstructed from the four rules
162
+ that define OTHER marks by reference to it, each of which is quoted on
163
+ the series that uses it: rule 50(3) (State code + registering authority
164
+ code on the first line, "the rest" on the second), rule 35(3) as
165
+ substituted in 2022 ("AB—Represents State Code, 12—Represents RTO
166
+ Code"), rule 53C as inserted in 2021 ("AB- Represent State Code",
167
+ "1234- Serial Number"), and rule 81B ("XX stands for State code, YY will
168
+ be a two letter series and '****' is a number from 0001 to 9999").
169
+ letter_exclusions: >-
170
+ I and O are excluded from the letter groups of the BH series (rule 50(8),
171
+ verbatim: "excluding 'I' & 'O'") and of the temporary series (rule 53C,
172
+ verbatim: "Alphabet of Temporary Registration (Except O and I)"). NO
173
+ instrument extends that exclusion to the ORDINARY series letters, and the
174
+ exclusion is not asserted for them here — it appears only in
175
+ `regex_strict` on the BH and temporary series, where it is sourced. That
176
+ the ordinary series also avoids I and O is widely repeated and is
177
+ recorded as folklore in the dossier.
178
+ serial_floor: >-
179
+ The 0001-9999 floor is instrument-evidenced for BH (rule 50(8): "4
180
+ numerals 0001 to 9999"), vintage (rule 81B: "a number from 0001 to 9999")
181
+ and trade (rule 35(3): "four digit numerals starting from 0001 to 9999").
182
+ It is applied to the ordinary series' `regex_strict` by the same
183
+ reconstruction, and flagged there.
184
+ state_code_alternations_are_period_scoped: >-
185
+ EVERY `regex_strict` IN THIS FILE CARRIES THE STATE CODES THAT WERE IN
186
+ ALLOTMENT DURING THAT SERIES' OWN PERIOD, and the two lists differ. The
187
+ series that run from 1989 (the ordinary and transport marks, the old
188
+ dealer mark) carry the withdrawn codes too — OR, UA, DN and TS — because
189
+ marks bearing them are on the road and inside those series' periods. The
190
+ series created in 2021 or later (temporary, vintage, the 2022 dealer
191
+ mark) carry neither OR (superseded 2012) nor UA (2007) nor DN (2020),
192
+ which could not be issued after those series began — but they DO carry
193
+ TS, because Telangana was TS until S.O. 1306(E) substituted TG on
194
+ 12 March 2024, well inside every one of those periods. TS was missing
195
+ from all three of those alternations in the earlier draft and is
196
+ restored here; a vintage registration is valid ten years and a trade
197
+ certificate five, so TS marks of both kinds remain live into the 2030s.
198
+ source: "https://web.archive.org/web/20211130113450id_/https://morth.nic.in/sites/default/files/CMVR-chapter3.pdf # CMVR rules 33-51 and 76-80, MoRTH's own consolidated text (the live morth.nic.in path now returns the SPA shell; this is the fetched copy, captured 2021-11-30); accessed 2026-08-02"
199
+ colours:
200
+ rule_50_2_d: >-
201
+ Rule 50(2), proviso (d), as substituted by G.S.R. 901(E), dated
202
+ 13-12-2001, verbatim: "the letters of the registration mark shall be in
203
+ English and the figures shall be in Arabic numerals and shall be
204
+ shown:— (A) in the case of transport vehicles in black colour on yellow
205
+ background; and (B) in other cases, in black colour on white background,
206
+ the registration mark on the trailer shall be exhibited on the left hand
207
+ side in black colour on yellow background. In addition, the registration
208
+ mark on the drawing vehicle shall be exhibited on the trailer also and
209
+ this shall be done on the right hand side at the rear of the trailer or
210
+ the last trailer as the case may be, in black colour on retro-reflective
211
+ type yellow background". Its own compliance proviso is the source of the
212
+ two dates the secondary web repeats: where the clause had not been
213
+ complied with before the Central Motor Vehicles (8th Amendment) Rules,
214
+ 2001, it was to be complied with "(i) in respect of transport vehicle, on
215
+ or before 1st February, 2002; and (ii) in other cases, on or before 1st
216
+ July, 2002."
217
+ rule_50_2A: >-
218
+ Inserted by G.S.R. 749(E), dated 7 August 2018 (Central Motor Vehicles
219
+ (10th Amendment) Rules, 2018), verbatim: "2A. In case of Battery Operated
220
+ Vehicles, the registration mark shall be exhibited in Yellow colour on
221
+ Green background for transport vehicles and for all other cases, in White
222
+ colour on Green background."
223
+ hex_basis_note: >-
224
+ The instruments NAME the colours and never number them: no chromaticity
225
+ coordinates, no colour standard, no reference to AIS-159 or any BIS
226
+ specification for colour. Every hex in this file is therefore
227
+ `hex_basis: observed` inside a statutorily named colour. Do not upgrade
228
+ any of them without a numbered source.
229
+ sources:
230
+ - "https://web.archive.org/web/20211130113450id_/https://morth.nic.in/sites/default/files/CMVR-chapter3.pdf # rule 50(2)(d) as substituted by G.S.R. 901(E) 13-12-2001, with its 1-2-2002 / 1-7-2002 compliance dates; accessed 2026-08-02"
231
+ - "https://web.archive.org/web/20210514202442id_/https://morth.nic.in/sites/default/files/notifications_document/Notification_no_G_S_R_749E_dated_07_08_2018_regarding_Background_colour_of_registration_plates_for_Electric_vehicles_0.pdf # G.S.R. 749(E) 7-8-2018 inserting rule 50(2A) — the EV green plate; accessed 2026-08-02"
232
+ plate_sizes:
233
+ note: >-
234
+ Rule 50(1)(vi), verbatim heads: "For two and three-wheelers,
235
+ quadricycles, E-rickshaws and E-carts 200 x 100 mm / For Light Motor
236
+ Vehicles/Passenger cars 340x200mm/500x120 mm / For medium commercial
237
+ vehicles, heavy commercial vehicles and Trailer/combination 340 x 200
238
+ mm". Provisos add: agricultural tractors front 285x45 mm, rear
239
+ 200x100 mm; combine harvester 340 x 200 mm; power tiller 285x45 mm front
240
+ and 200x100 mm on a coupled trailer; and "in case of a motor cycle, the
241
+ size of 285x45 mm for front registration plate shall also be permitted".
242
+ The two/three-wheeler head reached its present wording through
243
+ G.S.R. 99(E) (19-2-2014, w.e.f. 1-10-2014) and G.S.R. 709(E)
244
+ (8-10-2014).
245
+ source: "https://web.archive.org/web/20211130113450id_/https://morth.nic.in/sites/default/files/CMVR-chapter3.pdf # rule 50(1)(vi) and its four provisos; accessed 2026-08-02"
246
+ characters:
247
+ note: >-
248
+ Rule 51 ("Size of letters and numerals of the registration mark"), as
249
+ substituted by G.S.R. 338(E) dated 26-3-1993, is a table of minima in
250
+ millimetres — height, thickness, and space between — by class of vehicle.
251
+ Rows, verbatim in the rule's own order: all motor cycles and three-wheeled
252
+ invalid carriages, rear letters 35/7/5 and rear numerals 40/7/5;
253
+ motorcycles under 70 cc, front letters and numerals 15/2.5/2.5; other
254
+ motor cycles, front 30/5/5; three-wheelers not exceeding 500 cc and
255
+ E-rickshaw/E-cart, front and rear 35/7/5; three-wheelers exceeding 500 cc,
256
+ front and rear 40/7/5; ALL OTHER MOTOR VEHICLES, front and rear 65/10/10;
257
+ power tillers front 15/2.5/2.5; trailers coupled to power tillers rear
258
+ 30/5/5; combine harvester 65/10/10; trailer for header assembly 65/10/10.
259
+ The rule prescribes NO typeface and publishes NO drawing — unlike the UK,
260
+ German and Spanish Schriftmuster. The Indian plate font is fixed instead
261
+ by the HSRP type-approval chain (AIS/CMVR rule 126 test agencies), whose
262
+ standard was not reached in this pass and is a recorded gap.
263
+ source: "https://web.archive.org/web/20211130113450id_/https://morth.nic.in/sites/default/files/CMVR-chapter3.pdf # rule 51 table, all ten rows; accessed 2026-08-02"
264
+ hsrp_specification:
265
+ note: >-
266
+ Rule 50(1)(i)-(v), as substituted by G.S.R. 221(E) (28-3-2001) and
267
+ amended to commence 1-1-2004, verbatim in outline: the plate is "a solid
268
+ unit made of 1.0 mm aluminium conforming to DIN 1745/DIN 1783 or ISO
269
+ 7591", with rounded edges "to the extent of approx. 10 mm" and "an
270
+ embossed border"; it "should bear the letters 'IND' in blue colour on the
271
+ extreme left centre of the plate", one-fourth the rule-51 letter size,
272
+ hot-stamped and "an integral part of the plate"; it is "protected against
273
+ counterfeiting by applying chromium-based hologram, applied by hot
274
+ stamping. Stickers and adhesive labels are not permitted"; it bears "a
275
+ permanent consecutive identification number of minimum seven digits, to
276
+ be laser branded into the reflective sheeting"; a THIRD registration mark
277
+ "in the form of self-destructive type, chromium based hologram sticker"
278
+ goes on the left-hand top of the windshield; and the plate "shall be
279
+ fastened with non-removable/non-reusable snap lock fitting system".
280
+ The 2018 Order tightens two of those numbers: hologram 20 mm x 20 mm
281
+ carrying the CHAKRA in blue; permanent identification number "of minimum
282
+ 10 digits ... with the letter size being 5 mm", preceded by two letters
283
+ identifying the vendor from a closed test-agency table; third
284
+ registration mark sticker 100 mm x 60 mm; and the fuel colour code —
285
+ orange for diesel, light blue for petrol and CNG, grey for all others.
286
+ sources:
287
+ - "https://web.archive.org/web/20211130113450id_/https://morth.nic.in/sites/default/files/CMVR-chapter3.pdf # rule 50(1)(i)-(vi) and footnote 74 dating the substitution to G.S.R. 221(E) 28-3-2001 w.e.f. 1-1-2004; accessed 2026-08-02"
288
+ - "https://web.archive.org/web/20210514202317id_/https://morth.nic.in/sites/default/files/notifications_document/Notification_no_G_S_R_1162E_dated_04_12_2018_regarding_High_Security_Registration_Plate_0.pdf # S.O. 6052(E) 6-12-2018, the Motor Vehicles (High Security Registration Plates) Order, 2018, in force 1-4-2019 — paras 4-6, the test-agency letter table, and the fuel-sticker colours; accessed 2026-08-02"
289
+ - "https://web.archive.org/web/20190919185053id_/http://morth.nic.in/sites/default/files/circulars_document/CMVR%20rules%201989%20for%20HSRP.pdf # MoRTH circular RT-11028/01/2018-MVL to all States: the plates 'are to be affixed through the authorized dealers of OEM w.e.f. 01.04.2019', naming G.S.R. 1162(E) and S.O. 6052(E); accessed 2026-08-02"
290
+
291
+ series:
292
+
293
+ # =========================================================================
294
+ # THE ORDINARY MARK. Same composition throughout; the series cut is by
295
+ # DESIGN ERA (pre-HSRP / HSRP) and by the rule-50(2)(d) colour class, which
296
+ # is a class of USE (transport vs other), not a vehicle kind.
297
+ # =========================================================================
298
+ - id: in-standard-1989
299
+ class: standard
300
+ categories: [car, van, motorcycle, tractor, machine]
301
+ period: { start: 1989, end: 2003 }
302
+ period_evidence: enabling-statute
303
+ matching: strict
304
+ format:
305
+ pattern: "LL 99 LL 9999"
306
+ regex: '\A[A-Z]{2} ?\d{1,2} ?[A-Z](?: ?[A-Z]){0,2} ?\d{4}\z'
307
+ regex_strict: '\A(?:AN|AP|AR|AS|BR|CG|CH|DD|DL|DN|GA|GJ|HP|HR|JH|JK|KA|KL|LA|LD|MH|ML|MN|MP|MZ|NL|OD|OR|PB|PY|RJ|SK|TG|TN|TR|TS|UA|UK|UP|WB) ?(?:0[1-9]|[1-9]\d?) ?[A-Z](?: ?[A-Z]){0,2} ?(?!0000)\d{4}\z'
308
+ composition_evidence: reconstructed
309
+ charset:
310
+ state_codes: "closed list — see plates/_decode/in-state-codes.yml"
311
+ district: "1-99, allotted by the State; NOT nationally closed (see region_encoding_mechanism)"
312
+ notes: >-
313
+ `regex_strict` narrows `regex` in exactly three sourced-by-analogy
314
+ ways and no more: the state code to the closed allotment list, the
315
+ district away from 0 (00 is not allotted anywhere observed), and the
316
+ serial away from 0000 (the 0001-9999 floor is verbatim in rules
317
+ 35(3), 50(8) and 81B for the marks that reference this one). It does
318
+ NOT exclude I and O from the series letters, because no instrument
319
+ excludes them from the ORDINARY mark — only from BH and temporary.
320
+ district_width_note: >-
321
+ THE DISTRICT IS ONE OR TWO DIGITS, NOT TWO. Rule 50(3) says only
322
+ "registering authority code" and rule 35(3) only "RTO Code"; neither
323
+ fixes a width, and the zero-padded two-digit form that most States
324
+ print is a convention, not a rule. A regex fixed at `\d{2}` rejects
325
+ every Delhi mark of the "DL 3C AB 1234" shape, which is why both
326
+ `regex` and `regex_strict` here quantify `\d{1,2}`. This was found by
327
+ testing the first draft against real-world plate shapes, and it is
328
+ the single defect that pass caught.
329
+ series_group_note: >-
330
+ THE LETTER RUN IS SPELLED `[A-Z](?: ?[A-Z]){0,2}` — WITH AN INTERNAL
331
+ OPTIONAL GAP — AND THAT IS DELIBERATE. It looks like a candidate for
332
+ tightening to `[A-Z]{1,3}`; it is not, and this pass tried and
333
+ reverted the tightening after probing real shapes. Rule 50(3) puts
334
+ the State code and the REGISTERING-AUTHORITY code on the first line
335
+ and "the rest" on the second. Where a State prints a vehicle-class
336
+ letter immediately after the district digits — Delhi's "DL 3C" over
337
+ "AB 1234" is the standing case — the letter run is split ACROSS the
338
+ two lines, so its linear rendering carries a gap inside it
339
+ ("DL 3C AB 1234"). `[A-Z]{1,3}` rejects that string outright. The
340
+ repeated-optional-space form accepts it and still caps the run at
341
+ three letters. Cost of the choice, stated: the regex also accepts
342
+ "MH 12 A B 1234", which no plate prints. That is a recall-side
343
+ looseness inside a `strict` series, and it is preferred to silently
344
+ failing a whole State's plates.
345
+ recall_gap_blank_series: >-
346
+ RECORDED, NOT ASSERTED: the first block issued in a district is
347
+ commonly described as carrying NO series letters at all ("MH 01
348
+ 1234"). The only support located is the en-Wikipedia article
349
+ ("one to three letters or blank"), which cites no instrument for it,
350
+ and no rule was reached that permits an empty series group. Both
351
+ regexes therefore REQUIRE at least one letter, and a blank-series
352
+ Indian mark will not match. Flagged for the verifier: if a State
353
+ registration manual or a rule proviso is pinned, widen to
354
+ `[A-Z]{0,3}` and say so in the PR.
355
+ progression: >-
356
+ The series group advances within a district as its four-digit block
357
+ exhausts (single letter, then two, then three); the allocation order is
358
+ an administrative matter for each State's registering authority and is
359
+ published by none of them uniformly. A series letter therefore gives a
360
+ LOWER bound on age within a district and nothing stronger.
361
+ design:
362
+ plate: { w: 340, h: 200, unit: mm }
363
+ plate_variants:
364
+ - { w: 500, h: 120, unit: mm, note: "light motor vehicles / passenger cars, the single-line alternative (rule 50(1)(vi))" }
365
+ - { w: 200, h: 100, unit: mm, note: "two- and three-wheelers, quadricycles, E-rickshaws, E-carts" }
366
+ - { w: 285, h: 45, unit: mm, note: "agricultural tractor front; power tiller front; also permitted as a motor cycle front plate" }
367
+ background: { color: "#FFFFFF", finish: painted, hex_basis: observed }
368
+ foreground: "#000000"
369
+ band: { side: none }
370
+ emblem: { present: false }
371
+ rear_differs: false
372
+ layout: >-
373
+ Rule 50(3): "The registration mark shall be exhibited in two lines, the
374
+ State code and registering authority code forming the first line and
375
+ the rest forming the second line, one below the other" — with a proviso
376
+ (substituted by G.S.R. 324(E), 7-5-2014) for the 200x100 mm plate that
377
+ splits the characters evenly, "and where the total number of alpha
378
+ numeric characters in the registration mark is odd, then any extra
379
+ alpha numeric character shall be exhibited on the second line".
380
+ characters: { min_height_mm: 65, min_thickness_mm: 10, min_space_mm: 10, note: "rule 51 row 'All other motor vehicles'; motorcycles and three-wheelers take the smaller rows — see common.characters" }
381
+ region_encoding: "plates/_decode/in-state-codes.yml"
382
+ region_encoding_mechanism: >-
383
+ TWO GEOGRAPHIC ELEMENTS, ONE CLOSED AND ONE OPEN, AND A PARSE API MUST
384
+ NOT TREAT THEM ALIKE. (1) The first two letters are the STATE/UT code, a
385
+ closed list allotted by the Central Government under MVA § 41(6) — the
386
+ decode table. (2) The two digits are the REGISTERING AUTHORITY (RTO
387
+ DISTRICT) code, which no central instrument enumerates: rule 50(3) simply
388
+ calls it "registering authority code" and rule 35(3) calls it "RTO Code".
389
+ Each State creates, merges and renumbers its own offices, and there are
390
+ well over a thousand of them, so this dimension is OPEN and is deliberately
391
+ NOT tabled here (PRD-PLATES § 2.4 mechanism-note rule). A decode may
392
+ return the State with confidence and the district only against a
393
+ State-published list of that State's own offices, dated. THIRD ELEMENT,
394
+ FLAGGED AS UNSOURCED: several States are widely reported to spend the
395
+ first letter of the series group on a VEHICLE-CLASS code rather than on
396
+ the series — Delhi's "C" for car in "DL 3C AB 1234" is the famous case.
397
+ No central instrument authorises that, no Delhi instrument was reached
398
+ for it, and this dataset therefore treats every letter after the district
399
+ as series alphabet. A parse API must not decode a class from it.
400
+ sources:
401
+ - "https://web.archive.org/web/20250804185944id_/https://www.indiacode.nic.in/bitstream/123456789/1798/1/aA1988-59.pdf # MVA 1988 § 41(6) verbatim (the letters are allotted 'by notification in the Official Gazette'), § 1(3) footnote (in force 1 July 1989 vide S.O. 368(E) 22-5-1989); accessed 2026-08-02"
402
+ - "https://web.archive.org/web/20211130113450id_/https://morth.nic.in/sites/default/files/CMVR-chapter3.pdf # rule 50(2)(d)(B) black on white for non-transport; rule 50(3) two-line layout and the state-code/registering-authority-code split; rule 50(1)(vi) sizes; rule 51 character minima; accessed 2026-08-02"
403
+ - "https://web.archive.org/web/20210514201915id_/https://morth.nic.in/sites/default/files/notifications_document/S.O.%204262%28E%29%20dated%2025%20th%20November%20Registration%20Mark%20for%20Ladakh%20LA.pdf # identifies S.O. 444(E) dated 12 June 1989 as the state-code notification made under § 41(6); accessed 2026-08-02"
404
+ notes: >-
405
+ THE PRE-HSRP ORDINARY PLATE for non-transport vehicles — black on white,
406
+ painted or printed on a plain plate, no IND legend, no hologram, no laser
407
+ code. period.start 1989 is the enabling statute: the MV Act 1988 came
408
+ into force 1 July 1989 and the state-code notification S.O. 444(E) is
409
+ dated 12 June 1989, three weeks earlier, exactly as a commencement
410
+ package would be sequenced. period.end 2003 is the LEGAL end and nothing
411
+ more: rule 50(1), as substituted by G.S.R. 221(E) and amended, took
412
+ effect 1 January 2004 and made the security licence plate the only
413
+ lawful plate, with a proviso giving already-registered vehicles two more
414
+ years ("this sub-rule shall apply to already registered vehicles two
415
+ years from the date of commencement"). In fact non-HSRP plates went on
416
+ being made in most States for another fifteen years, until the HSRP Order
417
+ 2018 put the obligation on vehicle manufacturers from 1 April 2019. That
418
+ enforcement gap is recorded here and is deliberately NOT modelled as a
419
+ period: the dataset states what the instruments say and lets the note
420
+ carry the messy truth.
421
+
422
+ - id: in-standard-hsrp-2004
423
+ class: standard
424
+ categories: [car, van, motorcycle, tractor, machine]
425
+ period: { start: 2004 }
426
+ period_evidence: enabling-instrument
427
+ matching: strict
428
+ format:
429
+ pattern: "LL 99 LL 9999"
430
+ regex: '\A[A-Z]{2} ?\d{1,2} ?[A-Z](?: ?[A-Z]){0,2} ?\d{4}\z'
431
+ regex_strict: '\A(?:AN|AP|AR|AS|BR|CG|CH|DD|DL|DN|GA|GJ|HP|HR|JH|JK|KA|KL|LA|LD|MH|ML|MN|MP|MZ|NL|OD|OR|PB|PY|RJ|SK|TG|TN|TR|TS|UA|UK|UP|WB) ?(?:0[1-9]|[1-9]\d?) ?[A-Z](?: ?[A-Z]){0,2} ?(?!0000)\d{4}\z'
432
+ composition_evidence: reconstructed
433
+ charset: { notes: "identical to in-standard-1989 — HSRP changed the PLATE, never the MARK" }
434
+ design:
435
+ plate: { w: 340, h: 200, unit: mm }
436
+ plate_variants:
437
+ - { w: 500, h: 120, unit: mm, note: "LMV / passenger car single-line" }
438
+ - { w: 200, h: 100, unit: mm, note: "two- and three-wheelers, quadricycles, E-rickshaws, E-carts" }
439
+ - { w: 285, h: 45, unit: mm, note: "tractor / power tiller / motor cycle front" }
440
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
441
+ foreground: "#000000"
442
+ band: { side: none }
443
+ emblem: { present: false, note: "the CHAKRA appears inside the 20x20 mm chromium hologram, not as a plate emblem (HSRP Order 2018 para 6(v)(b) + Annexure)" }
444
+ material: "1.0 mm aluminium conforming to DIN 1745/DIN 1783 or ISO 7591, embossed border, corners rounded approx. 10 mm (rule 50(1)(i))"
445
+ security:
446
+ ind_legend: "'IND' in blue on the extreme left centre, one-fourth of the rule-51 letter size, hot-stamped, an integral part of the plate (rule 50(1)(ii))"
447
+ hologram: "chromium-based, hot-stamped, 20 mm x 20 mm at the top left of both plates, carrying the CHAKRA in blue (rule 50(1)(iii); HSRP Order 2018 para 6(v))"
448
+ laser_code: "permanent identification number, minimum seven digits in rule 50(1)(iii) and minimum TEN digits under HSRP Order 2018 para 6(vi), laser-branded into the reflective sheeting at the bottom left at 5 mm, preceded by two letters identifying the approved vendor"
449
+ third_mark: "self-destructive chromium-hologram sticker, 100 mm x 60 mm, inside the windscreen at the top left, carrying the registering authority, the registration number, the laser code and the date of first registration; background orange for diesel, light blue for petrol and CNG, grey otherwise (rule 50(1)(iv); HSRP Order 2018 para 6(viii)-(ix))"
450
+ fitment: "non-removable, non-reusable snap-lock fitting, fixed at the premises of the registering authority (rule 50(1)(v)); since G.S.R. 640(E) (18-8-2022) the plate may be issued by 'licence plate manufacturers or their dealers approved by the State Government or Union Territory Administration'"
451
+ rear_differs: false
452
+ characters: { min_height_mm: 65, min_thickness_mm: 10, min_space_mm: 10, note: "rule 51, 'All other motor vehicles' row" }
453
+ region_encoding: "plates/_decode/in-state-codes.yml"
454
+ region_encoding_mechanism: "identical to in-standard-1989 — closed State code, open RTO district code"
455
+ sources:
456
+ - "https://web.archive.org/web/20211130113450id_/https://morth.nic.in/sites/default/files/CMVR-chapter3.pdf # rule 50(1)(i)-(vi) HSRP specification; footnote 74: sub-rule (1) 'substituted by G.S.R. 221(E), dated 28-3-2001 as amended by S.O. 938(E), dated 24-9-2001, S.O. 499(E), dated 9-5-2002 and S.O. 59(E), dated 21-1-2003 (w.e.f. 1-1-2004)'; accessed 2026-08-02"
457
+ - "https://web.archive.org/web/20210514202317id_/https://morth.nic.in/sites/default/files/notifications_document/Notification_no_G_S_R_1162E_dated_04_12_2018_regarding_High_Security_Registration_Plate_0.pdf # HSRP Order 2018 (S.O. 6052(E), 6-12-2018), 'It shall come into force on the 1st day of April, 2019'; paras 4-6; accessed 2026-08-02"
458
+ - "https://web.archive.org/web/20230429221406id_/https://morth.nic.in/sites/default/files/notifications_document/8GSR%20640(E)%2018th%20August%202022%20HSRP%20rule%2050.pdf # G.S.R. 640(E) 18-8-2022 (CMV Thirteenth Amendment Rules 2022) amending rule 50(1)(v) — who may supply the plate; accessed 2026-08-02"
459
+ notes: >-
460
+ THE CURRENT ORDINARY PLATE for non-transport vehicles. period.start 2004
461
+ is the commencement of the substituted rule 50(1), which is the
462
+ instrument that CREATED the security licence plate — not 2001 (the date
463
+ G.S.R. 221(E) was made, before three amendments deferred it) and not 2005
464
+ or 2019 (both of which the secondary web gives). The 1 April 2019 date is
465
+ real but is a DIFFERENT claim: it is when the HSRP Order 2018 moved the
466
+ duty onto vehicle manufacturers and their dealers for new vehicles, which
467
+ is when the plates finally appeared nationwide. Both are recorded; the
468
+ period claim is the rule's. Overlaps in-standard-1989 only at the design
469
+ boundary, and the notes on each state why.
470
+
471
+ - id: in-transport-1989
472
+ class: standard
473
+ categories: [truck, bus, van, car, trailer]
474
+ period: { start: 1989, end: 2003 }
475
+ period_evidence: enabling-statute
476
+ matching: strict
477
+ format:
478
+ pattern: "LL 99 LL 9999"
479
+ regex: '\A[A-Z]{2} ?\d{1,2} ?[A-Z](?: ?[A-Z]){0,2} ?\d{4}\z'
480
+ regex_strict: '\A(?:AN|AP|AR|AS|BR|CG|CH|DD|DL|DN|GA|GJ|HP|HR|JH|JK|KA|KL|LA|LD|MH|ML|MN|MP|MZ|NL|OD|OR|PB|PY|RJ|SK|TG|TN|TR|TS|UA|UK|UP|WB) ?(?:0[1-9]|[1-9]\d?) ?[A-Z](?: ?[A-Z]){0,2} ?(?!0000)\d{4}\z'
481
+ composition_evidence: reconstructed
482
+ design:
483
+ plate: { w: 340, h: 200, unit: mm }
484
+ background: { color: "#FFD200", finish: painted, hex_basis: observed }
485
+ foreground: "#000000"
486
+ band: { side: none }
487
+ rear_differs: false
488
+ display_extras: >-
489
+ Rule 50(2) provisos (a)-(c): the rear mark of a transport vehicle is
490
+ fixed on the right-hand side "at a distance not exceeding one metre
491
+ from the ground"; the mark "shall also be painted on the right and left
492
+ side on the body of the vehicle"; and on a stage or contract carriage
493
+ it is painted again on the driver/passenger partition, or on the
494
+ dash-board of a motor cab or taxi cab.
495
+ characters: { min_height_mm: 65, min_thickness_mm: 10, min_space_mm: 10 }
496
+ region_encoding: "plates/_decode/in-state-codes.yml"
497
+ sources:
498
+ - "https://web.archive.org/web/20211130113450id_/https://morth.nic.in/sites/default/files/CMVR-chapter3.pdf # rule 50(2)(d)(A) 'in the case of transport vehicles in black colour on yellow background' (substituted by G.S.R. 901(E) 13-12-2001) and the compliance date 1 February 2002; rule 50(2) provisos (a)-(c) on where the mark is repeated; accessed 2026-08-02"
499
+ notes: >-
500
+ THE PRE-HSRP TRANSPORT PLATE — the yellow one. Identical mark, identical
501
+ composition, different colour, and the colour is a class of USE:
502
+ "transport vehicle" is an MVA § 2(47) category (goods carriage, stage
503
+ carriage, contract carriage, educational institution bus and so on), so a
504
+ privately-owned car used as a taxi carries yellow while the same model in
505
+ private hands carries white. THE COLOUR CLAIM'S DATE IS NOT THE SERIES'
506
+ DATE: rule 50(2)(d) in its present wording dates from G.S.R. 901(E)
507
+ (13-12-2001) with a compliance deadline of 1 February 2002 for transport
508
+ vehicles, and the pre-2001 text of clause (d) was not reached — so the
509
+ 1989 start is the MARK's start, and whether yellow was prescribed for the
510
+ whole of 1989-2001 is a recorded gap, not an assertion. Overlaps
511
+ in-standard-1989 in kind, never in colour class.
512
+
513
+ - id: in-transport-hsrp-2004
514
+ class: standard
515
+ categories: [truck, bus, van, car, trailer]
516
+ period: { start: 2004 }
517
+ period_evidence: enabling-instrument
518
+ matching: strict
519
+ format:
520
+ pattern: "LL 99 LL 9999"
521
+ regex: '\A[A-Z]{2} ?\d{1,2} ?[A-Z](?: ?[A-Z]){0,2} ?\d{4}\z'
522
+ regex_strict: '\A(?:AN|AP|AR|AS|BR|CG|CH|DD|DL|DN|GA|GJ|HP|HR|JH|JK|KA|KL|LA|LD|MH|ML|MN|MP|MZ|NL|OD|OR|PB|PY|RJ|SK|TG|TN|TR|TS|UA|UK|UP|WB) ?(?:0[1-9]|[1-9]\d?) ?[A-Z](?: ?[A-Z]){0,2} ?(?!0000)\d{4}\z'
523
+ composition_evidence: reconstructed
524
+ design:
525
+ plate: { w: 340, h: 200, unit: mm }
526
+ background: { color: "#FFD200", finish: retroreflective, hex_basis: observed }
527
+ foreground: "#000000"
528
+ band: { side: none }
529
+ material: "as in-standard-hsrp-2004 — rule 50(1) applies to every motor vehicle, whatever the colour of the plate"
530
+ rear_differs: false
531
+ characters: { min_height_mm: 65, min_thickness_mm: 10, min_space_mm: 10 }
532
+ variants:
533
+ - class: trailer
534
+ design: { background: { color: "#FFD200", finish: retroreflective, hex_basis: observed }, foreground: "#000000" }
535
+ note: >-
536
+ A trailer carries TWO marks under rule 50(2)(d): its own, "exhibited
537
+ on the left hand side in black colour on yellow background", and the
538
+ DRAWING VEHICLE's, repeated "on the right hand side at the rear of
539
+ the trailer or the last trailer as the case may be, in black colour
540
+ on retro-reflective type yellow background". A parse API reading a
541
+ photograph of an Indian truck-trailer combination will see the same
542
+ mark twice and a second, different mark once; it must not treat the
543
+ repetition as two vehicles. Colour-only variant of this series, hence
544
+ a sub-entry (PRD-PLATES § 2.3). Rule 50(6) exempts agricultural
545
+ tractors: "The registration mark of the drawing agricultural tractor
546
+ may not be exhibited on the agricultural trailer or trailers", and
547
+ rule 50(7) does the same for a modular hydraulic trailer behind a
548
+ puller tractor.
549
+ sources:
550
+ - "https://web.archive.org/web/20211130113450id_/https://morth.nic.in/sites/default/files/CMVR-chapter3.pdf # rule 50(2)(d) trailer sentence; rule 50(6); rule 50(7) (inserted by G.S.R. 212(E) 20-3-2015 w.e.f. 1-4-2015); accessed 2026-08-02"
551
+ region_encoding: "plates/_decode/in-state-codes.yml"
552
+ sources:
553
+ - "https://web.archive.org/web/20211130113450id_/https://morth.nic.in/sites/default/files/CMVR-chapter3.pdf # rule 50(1) HSRP specification (w.e.f. 1-1-2004) read with rule 50(2)(d)(A) yellow-background rule; accessed 2026-08-02"
554
+ - "https://web.archive.org/web/20210514202317id_/https://morth.nic.in/sites/default/files/notifications_document/Notification_no_G_S_R_1162E_dated_04_12_2018_regarding_High_Security_Registration_Plate_0.pdf # HSRP Order 2018 applies to 'motor vehicles as defined in clause (28) of section 2' — i.e. transport vehicles too; accessed 2026-08-02"
555
+ notes: >-
556
+ THE CURRENT TRANSPORT PLATE. The HSRP specification is colour-blind: rule
557
+ 50(1) prescribes the plate, rule 50(2)(d) prescribes the colour, and a
558
+ yellow HSRP is the ordinary sight on an Indian goods carriage or taxi
559
+ today. Distinct from in-standard-hsrp-2004 only in background colour and
560
+ in the repetition rules that follow a transport vehicle around.
561
+
562
+ - id: in-electric-green-2018
563
+ class: electric
564
+ categories: [car, van, motorcycle, truck, bus]
565
+ period: { start: 2018 }
566
+ period_evidence: enabling-instrument
567
+ matching: strict
568
+ format:
569
+ pattern: "LL 99 LL 9999"
570
+ regex: '\A[A-Z]{2} ?\d{1,2} ?[A-Z](?: ?[A-Z]){0,2} ?\d{4}\z'
571
+ regex_strict: '\A(?:AN|AP|AR|AS|BR|CG|CH|DD|DL|DN|GA|GJ|HP|HR|JH|JK|KA|KL|LA|LD|MH|ML|MN|MP|MZ|NL|OD|OR|PB|PY|RJ|SK|TG|TN|TR|TS|UA|UK|UP|WB) ?(?:0[1-9]|[1-9]\d?) ?[A-Z](?: ?[A-Z]){0,2} ?(?!0000)\d{4}\z'
572
+ composition_evidence: reconstructed
573
+ design:
574
+ plate: { w: 340, h: 200, unit: mm }
575
+ plate_variants:
576
+ - { w: 200, h: 100, unit: mm, note: "E-rickshaws and E-carts take the two/three-wheeler size expressly (rule 50(1)(vi), as substituted by G.S.R. 709(E) 8-10-2014)" }
577
+ background: { color: "#00843D", finish: retroreflective, hex_basis: observed }
578
+ foreground: "#FFFFFF"
579
+ band: { side: none }
580
+ rear_differs: false
581
+ characters: { min_height_mm: 65, min_thickness_mm: 10, min_space_mm: 10, note: "E-rickshaw and E-cart take rule 51's 35/7/5 row" }
582
+ variants:
583
+ - class: electric
584
+ design: { background: { color: "#00843D", finish: retroreflective, hex_basis: observed }, foreground: "#FFD200" }
585
+ note: >-
586
+ A battery-operated TRANSPORT vehicle carries the mark "in Yellow
587
+ colour on Green background" (rule 50(2A)) — the same green plate with
588
+ yellow characters instead of white. Colour-only variant of the same
589
+ format and period, hence a sub-entry rather than a series
590
+ (PRD-PLATES § 2.3). This is the one place in Indian plate law where
591
+ the transport/non-transport split changes the FOREGROUND rather than
592
+ the background.
593
+ sources:
594
+ - "https://web.archive.org/web/20210514202442id_/https://morth.nic.in/sites/default/files/notifications_document/Notification_no_G_S_R_749E_dated_07_08_2018_regarding_Background_colour_of_registration_plates_for_Electric_vehicles_0.pdf # rule 50(2A), verbatim; accessed 2026-08-02"
595
+ region_encoding: "plates/_decode/in-state-codes.yml"
596
+ sources:
597
+ - "https://web.archive.org/web/20210514202442id_/https://morth.nic.in/sites/default/files/notifications_document/Notification_no_G_S_R_749E_dated_07_08_2018_regarding_Background_colour_of_registration_plates_for_Electric_vehicles_0.pdf # G.S.R. 749(E), 7 August 2018, Central Motor Vehicles (10th Amendment) Rules 2018, inserting rule 50(2A) after rule 50(2); 'They shall come into force on the date of their publication in the Official Gazette'; accessed 2026-08-02"
598
+ - "https://web.archive.org/web/20211130113450id_/https://morth.nic.in/sites/default/files/CMVR-chapter3.pdf # rule 50(1)(vi) sizes including E-rickshaw and E-cart; rule 51 row 5; accessed 2026-08-02"
599
+ notes: >-
600
+ THE GREEN PLATE. Its own series and not a colour variant of the standard
601
+ one, because its PERIOD differs: rule 50(2A) was inserted by G.S.R.
602
+ 749(E) and came into force on publication, 7 August 2018 — before that
603
+ date a battery-operated vehicle took the ordinary white or yellow plate,
604
+ and green plates on the road are therefore a hard 2018-or-later signal.
605
+ The mark itself is unchanged: same state code, same district, same
606
+ series, same serial, so a green plate carries no serial-level tell at
607
+ all. Note the rule's own term is "Battery Operated Vehicles", which is
608
+ narrower than "electric": a hybrid does not qualify, and rule 50(2A)
609
+ offers no definition — a recorded gap.
610
+
611
+ - id: in-bh-2021
612
+ class: standard
613
+ categories: [car, van, motorcycle]
614
+ period: { start: 2021 }
615
+ period_evidence: enabling-instrument
616
+ matching: strict
617
+ format:
618
+ pattern: "99 BH 9999 LL"
619
+ regex: '\A\d{2} ?BH ?\d{4} ?[A-Z]{1,2}\z'
620
+ regex_strict: '\A\d{2} ?BH ?(?!0000)\d{4} ?[A-HJ-NP-Z]{1,2}\z'
621
+ composition_evidence: instrument
622
+ charset:
623
+ excluded_letters: [I, O]
624
+ excluded_letters_note: "rule 50(8), verbatim: 'A, B, C …and then AA,AB…..AZ, BA, BB …..to ZZ excluding ‚I‘ & ‚O‘'"
625
+ notes: >-
626
+ Rule 50(8) is the ONLY Indian instrument that lays out a registration
627
+ mark as a labelled table, and it is worth quoting whole because it is
628
+ the model for how the ordinary mark ought to have been written:
629
+ "XX / Last two digits of year of registration | XX / Bharat Series
630
+ code (2) letters as 'BH' | #### XX / 4 numerals 0001 to 9999 followed
631
+ by letter(s) A, B, C …and then AA,AB…..AZ, BA, BB …..to ZZ excluding
632
+ 'I' & 'O'".
633
+ progression: >-
634
+ The first two digits are the last two digits of the YEAR of
635
+ registration, which makes BH the only Indian series with an exact age
636
+ in the serial. The trailing letter group advances A..Z then AA..ZZ as
637
+ each year's four-digit block exhausts. The mark is not chosen: rule
638
+ 48's new proviso requires it to be "generated randomly through the
639
+ portal after verification of working certificate in Form 60 or Official
640
+ identity card".
641
+ design:
642
+ plate: { w: 340, h: 200, unit: mm }
643
+ plate_variants:
644
+ - { w: 500, h: 120, unit: mm }
645
+ - { w: 200, h: 100, unit: mm, note: "two-wheelers" }
646
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
647
+ foreground: "#000000"
648
+ band: { side: none }
649
+ rear_differs: false
650
+ characters: { min_height_mm: 65, min_thickness_mm: 10, min_space_mm: 10 }
651
+ region_encoding: none
652
+ region_encoding_note: >-
653
+ THE ONE INDIAN MARK WITH NO GEOGRAPHY IN IT — that is the entire point of
654
+ the series. There is no state code and no district code; "BH" is Bharat,
655
+ the country. A parse API must not attempt a regional decode on a BH
656
+ string, and must not read the leading two digits as a district: they are
657
+ a year.
658
+ eligibility: >-
659
+ Rule 47(1)(ca)-(cb), inserted by the same instrument: a working
660
+ certificate in Form 60 for a private-sector applicant, whose employer
661
+ declares "we have offices in four States/UTs or more"; an official
662
+ identity card for a government employee. The series is voluntary
663
+ ("opted voluntarily by the vehicle owner", rule 48 proviso) and
664
+ non-transport only, since rule 51B's tax scheme is written for
665
+ "non-transport vehicles".
666
+ sources:
667
+ - "https://egazette.gov.in/WriteReadData/2021/229283.pdf # G.S.R. 594(E), New Delhi, 26 August 2021 — Central Motor Vehicles (Twentieth Amendment) Rules, 2021, para 1(2) 'They shall come into force with effect from the 15th day of September, 2021'; para 4 inserting rule 50(8) with the mark table verbatim; para 2 inserting rule 47(1)(ca)-(cb); para 3 inserting the rule 48 proviso; para 6 inserting rule 54(3); Form 60; accessed 2026-08-02"
668
+ notes: >-
669
+ THE BHARAT (BH) SERIES — a genuinely new format, instrument-dated to the
670
+ day. G.S.R. 594(E) is dated 26 August 2021 and its own commencement
671
+ clause says 15 September 2021, so BOTH dates are real and they mean
672
+ different things; period.start records the year, and a verifier
673
+ re-deriving it should expect to find 2021 either way. What the series
674
+ solves is the § 47 re-registration burden on inter-State movers: rule
675
+ 54(3), inserted by the same amendment, provides that the
676
+ re-registration rule "shall not apply to a vehicle having BH-Series
677
+ registration mark", the owner instead intimating the new State in
678
+ Form 33 within thirty days. The mark is black on white by rule 50(8) in
679
+ terms — the sub-rule prescribes the colour itself rather than leaning on
680
+ rule 50(2)(d) — and a transport BH plate does not exist.
681
+
682
+ - id: in-temporary-2021
683
+ class: temporary
684
+ categories: [car, van, truck, bus, motorcycle, trailer]
685
+ period: { start: 2021 }
686
+ period_evidence: enabling-instrument
687
+ matching: strict
688
+ format:
689
+ pattern: "T 9999 LL 9999 LL"
690
+ regex: '\AT ?\d{4} ?[A-Z]{2} ?\d{4} ?[A-Z]{2}\z'
691
+ regex_strict: '\AT ?(?:0[1-9]|1[0-2])\d{2} ?(?:AN|AP|AR|AS|BR|CG|CH|DD|DL|GA|GJ|HP|HR|JH|JK|KA|KL|LA|LD|MH|ML|MN|MP|MZ|NL|OD|PB|PY|RJ|SK|TG|TN|TR|TS|UK|UP|WB) ?(?!0000)\d{4} ?[A-HJ-NP-Z]{2}\z'
692
+ composition_evidence: instrument
693
+ charset:
694
+ excluded_letters: [I, O]
695
+ excluded_letters_note: "rule 53C(1), verbatim: 'AB- Alphabet of Temporary Registration (Except O and I)'"
696
+ progression: >-
697
+ The month and year of ISSUE are in the mark, which makes the Indian
698
+ temporary plate self-dating and its expiry mechanically checkable: rule
699
+ 53B gives an initial validity extendable "one or more times by 30 days
700
+ each".
701
+ design:
702
+ band: { side: none }
703
+ note: >-
704
+ NO COLOUR AND NO DIMENSION IS PRESCRIBED FOR THE TEMPORARY MARK, and
705
+ this file does not invent one. Rule 53C(2) says only that "the owner
706
+ shall ensure that the said mark is affixed to the front and rear of the
707
+ motor vehicle". On its face rule 50(2)(d) applies to any registration
708
+ mark, which would make a temporary plate black on white (or yellow for
709
+ a transport vehicle); the red-on-yellow temporary plate that every
710
+ secondary source describes has NO primary and is logged as folklore in
711
+ the dossier. Recorded gap.
712
+ region_encoding: "plates/_decode/in-state-codes.yml"
713
+ region_encoding_mechanism: >-
714
+ State code only — rule 53C's legend has no RTO district element, which is
715
+ consistent with a temporary mark being valid for movement rather than
716
+ tied to an office. The decode returns a State and must not attempt a
717
+ district.
718
+ sources:
719
+ - "https://web.archive.org/web/20210421181546id_/https://morth.nic.in/sites/default/files/notifications_document/GSR%20240%28E%29%20dated%2031st%20March%202021%20Committee%20A%20Licensing%20of%20drivers%2C%20Fitness%20and%20Registration%20of%20motor%20vehicles%20%20.pdf # G.S.R. 240(E), 31 March 2021 — Central Motor Vehicles (Sixth Amendment) Rules, 2021, 'They shall come into force with effect from 01st day of April, 2021'; the inserted rule 53C: 'T- Represent temporary certificate; 08- Month of issuance of temporary certificate of registration 20- Year of issuance ...; AB- Represent State Code; 1234- Serial Number of Temporary Registration; AB- Alphabet of Temporary Registration (Except O and I)'; accessed 2026-08-02"
720
+ - "https://web.archive.org/web/20250804185944id_/https://www.indiacode.nic.in/bitstream/123456789/1798/1/aA1988-59.pdf # MVA § 43, the temporary-registration power the rule is made under; accessed 2026-08-02"
721
+ notes: >-
722
+ THE STANDARDISED TEMPORARY MARK, and the reason it is dated 2021 rather
723
+ than 1989: temporary registration has existed since the Act (§ 43), but
724
+ until rule 53C was inserted its mark had NO nationally prescribed shape
725
+ and every State invented one. G.S.R. 240(E) gave it a form for the first
726
+ time. Two consequences for a parse API: a temporary string of this shape
727
+ is a hard 2021-or-later signal, and any earlier Indian temporary mark is
728
+ out of scope of this dataset because no instrument describes it.
729
+ period.start 2021 is the amendment's own commencement, 1 April 2021.
730
+
731
+ - id: in-dealer-1989
732
+ class: dealer
733
+ categories: [car, van, truck, bus, motorcycle]
734
+ period: { start: 1989, end: 2022 }
735
+ period_evidence: enabling-instrument
736
+ matching: strict
737
+ format:
738
+ pattern: "LL 99 LL 999"
739
+ regex: '\A[A-Z]{2} ?\d{1,2} ?[A-Z]{2} ?\d{1,3}\z'
740
+ regex_strict: '\A(?:AN|AP|AR|AS|BR|CG|CH|DD|DL|DN|GA|GJ|HP|HR|JH|JK|KA|KL|LA|LD|MH|ML|MN|MP|MZ|NL|OD|OR|PB|PY|RJ|SK|TG|TN|TR|TS|UA|UK|UP|WB) ?(?:0[1-9]|[1-9]\d?) ?[A-Z]{2} ?[1-9]\d{0,2}\z'
741
+ composition_evidence: instrument
742
+ charset:
743
+ notes: >-
744
+ Rule 35(1) as originally made, verbatim: the registering authority
745
+ "shall assign in respect of each certificate a trade registration
746
+ mark consisting of the registration mark referred to in the
747
+ notification made under sub-section (6) of section 41 and followed by
748
+ two letters and a number containing not more than three digits for
749
+ each vehicle, for example:- AB—Represent State Code. 12—Registration
750
+ District Code. TC[1]—Trade certificate number for the vehicle." The
751
+ rule does NOT fix the two letters as "TC"; only the worked example
752
+ uses them, so `regex_strict` leaves the letter pair open. (The
753
+ example's third token is printed "TCI" in MoRTH's consolidated PDF,
754
+ which is an OCR artefact of "TC1" — flagged, not relied on.)
755
+ design:
756
+ band: { side: none }
757
+ note: >-
758
+ The pre-2022 rule prescribed no colour: rule 39(2) as originally made
759
+ said only that "the trade certificate shall be carried on a motor
760
+ vehicle in a weatherproof circular folder and the trade registration
761
+ mark shall be exhibited in a conspicuous place in the vehicle". No
762
+ colour is asserted for this series. Recorded gap.
763
+ region_encoding: "plates/_decode/in-state-codes.yml"
764
+ sources:
765
+ - "https://web.archive.org/web/20211130113450id_/https://morth.nic.in/sites/default/files/CMVR-chapter3.pdf # rule 35(1) as originally made, with the AB / 12 / TC legend; rule 39(2) pre-2022; rule 34(2) classes (a)-(j); accessed 2026-08-02"
766
+ - "https://web.archive.org/web/20230429221141id_/https://morth.nic.in/sites/default/files/notifications_document/GSR%20703(E)%20dt%2014%20September%202022%20for%20Trade%20Certificate.pdf # G.S.R. 703(E) substituting rule 35 entire, which is what ends this series, and its transitional para 1(3): certificates granted before commencement 'shall continue to remain in force till the date of their expiry'; accessed 2026-08-02"
767
+ notes: >-
768
+ THE OLD TRADE (DEALER) MARK. Its shape is instrument-evidenced and its
769
+ end is instrument-evidenced: G.S.R. 703(E) substituted rule 35 with
770
+ effect from 1 November 2022. The transitional clause means marks of this
771
+ shape stayed lawful past that date, on certificates already granted, until
772
+ those certificates expired — under the old rule 37 a trade certificate ran
773
+ for twelve months, so the tail is short. period.end 2022 records the
774
+ substitution; the tail is in this note, not in the period.
775
+
776
+ - id: in-dealer-2022
777
+ class: dealer
778
+ categories: [car, van, truck, bus, motorcycle]
779
+ period: { start: 2022 }
780
+ period_evidence: enabling-instrument
781
+ matching: strict
782
+ format:
783
+ pattern: "LL 99 L 9999 TC 9999"
784
+ regex: '\A[A-Z]{2} ?\d{1,2} ?[A-Z] ?\d{4} ?TC ?\d{4}\z'
785
+ regex_strict: '\A(?:AN|AP|AR|AS|BR|CG|CH|DD|DL|GA|GJ|HP|HR|JH|JK|KA|KL|LA|LD|MH|ML|MN|MP|MZ|NL|OD|PB|PY|RJ|SK|TG|TN|TR|TS|UK|UP|WB) ?(?:0[1-9]|[1-9]\d?) ?[A-J] ?\d{4} ?TC ?(?!0000)\d{4}\z'
786
+ composition_evidence: instrument
787
+ charset:
788
+ vehicle_class_letters:
789
+ A: "motor cycle"
790
+ B: "invalid carriage"
791
+ C: "light motor vehicle"
792
+ D: "medium passenger motor vehicle"
793
+ E: "medium goods vehicle"
794
+ F: "heavy passenger motor vehicle"
795
+ G: "heavy goods vehicle"
796
+ H: "E-rickshaw"
797
+ I: "E-cart"
798
+ J: "any other motor vehicle of a specified description"
799
+ vehicle_class_letters_note: >-
800
+ Rule 35(3) says the letter "Represents serial number of class of
801
+ vehicle as prescribed in Rule 34(2) i.e. from A to J"; rule 34(2)
802
+ lists those classes as clauses (a) to (j), which is the closed
803
+ primary list inlined above (PRD-PLATES § 2.4 small-inline-table
804
+ rule). NOTE THE TRAP: this is the one Indian series in which the
805
+ letter I IS issued — it is E-cart — while BH and temporary marks
806
+ expressly exclude I. A parse API must not apply a blanket I/O
807
+ exclusion across India.
808
+ design:
809
+ background: { color: "#D22630", finish: retroreflective, hex_basis: observed }
810
+ foreground: "#FFFFFF"
811
+ band: { side: none }
812
+ rear_differs: false
813
+ characters: { note: "rule 39(2) as substituted: 'as per dimensions specified in rule 51'" }
814
+ note: "rule 39(2) as substituted: the mark 'shall be exhibited on front and rear of a motor vehicle'"
815
+ region_encoding: "plates/_decode/in-state-codes.yml"
816
+ sources:
817
+ - "https://web.archive.org/web/20230429221141id_/https://morth.nic.in/sites/default/files/notifications_document/GSR%20703(E)%20dt%2014%20September%202022%20for%20Trade%20Certificate.pdf # G.S.R. 703(E), 14 September 2022 — Central Motor Vehicles (Fifteenth Amendment) Rules, 2022, 'They shall come into force with effect from the 1st day of November, 2022'; substituted rule 35(3) with the worked example 'AB 12 A 1234 TC 0001' and its five-line legend; substituted rule 39(2) 'in white colour on red background as per dimensions specified in rule 51'; rule 37(1) validity extended from twelve months to five years; accessed 2026-08-02"
818
+ - "https://web.archive.org/web/20211130113450id_/https://morth.nic.in/sites/default/files/CMVR-chapter3.pdf # rule 34(2) clauses (a)-(j), the class list the letter A-J indexes; accessed 2026-08-02"
819
+ notes: >-
820
+ THE CURRENT TRADE MARK — and the most completely specified registration
821
+ mark in Indian law, which is the irony of this file: the dealer plate has
822
+ a worked example in the rule ("AB 12 A 1234 TC 0001") and the ordinary
823
+ plate every Indian sees does not. period.start 2022 is the amendment's
824
+ own commencement, 1 November 2022. The four-digit tail is the trade
825
+ registration mark number within the certificate, "starting from 0001 to
826
+ 9999", and a dealer may hold many: rule 35A, inserted by the same
827
+ instrument, provides for additional marks in Form 17B.
828
+
829
+ - id: in-vintage-2021
830
+ class: historic
831
+ categories: [car, motorcycle]
832
+ period: { start: 2021 }
833
+ period_evidence: enabling-instrument
834
+ matching: strict
835
+ format:
836
+ pattern: "LL VA LL 9999"
837
+ regex: '\A[A-Z]{2} ?VA ?[A-Z]{2} ?\d{4}\z'
838
+ regex_strict: '\A(?:AN|AP|AR|AS|BR|CG|CH|DD|DL|GA|GJ|HP|HR|JH|JK|KA|KL|LA|LD|MH|ML|MN|MP|MZ|NL|OD|PB|PY|RJ|SK|TG|TN|TR|TS|UK|UP|WB) ?VA ?[A-Z]{2} ?(?!0000)\d{4}\z'
839
+ composition_evidence: instrument
840
+ charset:
841
+ fixed_letters: "VA"
842
+ notes: >-
843
+ Rule 81B(1), verbatim: "the Registering Authority shall assign to a
844
+ Vintage Motor Vehicle for display thereon, a registration mark
845
+ consisting of the letters 'XX VA YY ****', where VA stands for
846
+ Vintage, XX stands for State code, YY will be a two letter series and
847
+ '****' is a number from 0001 to 9999 allotted by State Registering
848
+ Authority." Note what is NOT said: nothing excludes I or O from the
849
+ two-letter series, so `regex_strict` does not exclude them.
850
+ design:
851
+ plate: { w: 340, h: 200, unit: mm }
852
+ plate_variants:
853
+ - { w: 200, h: 100, unit: mm, note: "L1/L2 two-wheelers" }
854
+ background: { color: "#FFFFFF", finish: painted, hex_basis: observed }
855
+ foreground: "#000000"
856
+ band: { side: none }
857
+ rear_differs: false
858
+ hsrp_exempt: true
859
+ note: >-
860
+ Rule 81B(2): the mark "shall conform to the specifications spelt out in
861
+ rules 50 and 51 of these rules" — but rule 81B(4) exempts vintage
862
+ vehicles from HSRP entirely: "All such Vintage Motor Vehicles shall be
863
+ exempted from the provisions of High Security Registration Plate as
864
+ mandated under rule 50." So the vintage plate takes rule 50's colours
865
+ and rule 51's character sizes and NONE of rule 50(1)'s security
866
+ features — the only Indian plate in current issue that lawfully has no
867
+ IND legend, no hologram and no laser code.
868
+ region_encoding: "plates/_decode/in-state-codes.yml"
869
+ region_encoding_mechanism: "State code only — rule 81B has no district element, and the mark is allotted by the State Registering Authority rather than by a district office"
870
+ eligibility: >-
871
+ Rule 81A explanation: a vehicle of category L1/L2 (two-wheeler) or M1
872
+ (four-wheeler) "which is more than fifty years old from the date of first
873
+ registration after first sale including any vehicle imported into India
874
+ subject to the condition that such vehicle should be maintained in its
875
+ original form and should not have undergone any substantial overhaul,
876
+ which includes any modification in chassis or body shell or engine".
877
+ Registration is valid ten years, renewable for five (rule 81C).
878
+ sources:
879
+ - "https://egazette.gov.in/WriteReadData/2021/228336.pdf # G.S.R. 492(E), New Delhi, 15 July 2021 — Central Motor Vehicles (Fifteenth Amendment) Rules, 2021, in force 'on the date of their final publication in the Official Gazette'; inserted Chapter IIIA, rules 81A (procedure and the fifty-year definition), 81B(1) (the XX VA YY **** mark), 81B(3) (already-registered vintage vehicles keep their original number), 81B(4) (HSRP exemption) and 81C (validity); accessed 2026-08-02"
880
+ notes: >-
881
+ THE VINTAGE (VA) SERIES. Its own format, its own instrument and its own
882
+ date — and one modelling subtlety that matters to a decoder: rule 81B(3)
883
+ provides that "All those vehicles which are already registered as Vintage
884
+ Motor Vehicle shall continue to retain the original registration number
885
+ and registration plate intact without any change", so a fifty-year-old
886
+ Indian car may lawfully carry EITHER a VA mark or its original ordinary
887
+ mark, and the absence of a VA mark says nothing about the vehicle's
888
+ status. period.start 2021 is the notification's own date, 15 July 2021.
889
+
890
+ # =========================================================================
891
+ # DIPLOMATIC, CONSULAR AND UN. Rules 76-77 are the 1989 principal rules'
892
+ # own text (unfootnoted in MoRTH's consolidation = unamended since 1989)
893
+ # except where an amendment is named. The MARK here is not built from a
894
+ # state code at all: it is [mission number] + [letters] + [vehicle number],
895
+ # and the mission number is allotted by the MINISTRY OF EXTERNAL AFFAIRS,
896
+ # not by MoRTH — a second, entirely separate decode dimension, and one this
897
+ # dataset does NOT hold (recorded gap).
898
+ # =========================================================================
899
+ - id: in-diplomatic-cd-1989
900
+ class: diplomatic
901
+ categories: [car, van]
902
+ period: { start: 1989 }
903
+ period_evidence: enabling-instrument
904
+ matching: strict
905
+ format:
906
+ pattern: "99 CD 999"
907
+ regex: '\A\d{1,3} ?CD ?\d{1,4} ?[A-Z]?\z'
908
+ regex_statutory: '\A\d+ ?CD ?\d+ ?[A-Z]?\z'
909
+ composition_evidence: instrument
910
+ charset:
911
+ fixed_letters: "CD"
912
+ notes: >-
913
+ Rule 76(6), as substituted by G.S.R. 221(E) (28-3-2001), verbatim: a
914
+ vehicle of a Delhi diplomatic mission or its diplomatic officer "shall
915
+ be assigned a registration mark consisting of the letters 'CD'
916
+ preceded by the number allotted to the mission by the Ministry of
917
+ External Affairs of the Government of India and followed by a number
918
+ allotted to the vehicle by the registering authority". NEITHER NUMBER
919
+ HAS A PRESCRIBED WIDTH. `regex` bounds them at three and four digits,
920
+ which is an OBSERVED practical bound and not a legal one;
921
+ `regex_statutory` is the unbounded form the rule actually authorises.
922
+ The optional trailing letter is rule 76(6)(ii): the head of mission's
923
+ PERSONAL vehicles take the number "1" "followed consecutively, in
924
+ alphabetical order, by a letter beginning with the letter 'A'".
925
+ progression: >-
926
+ Rule 76(6)(i)-(vi) is an allocation ladder, and it decodes: "1" is the
927
+ head of mission's official car; "1A", "1B" … are the head of mission's
928
+ personal cars; official vehicles other than the head's start at "2";
929
+ then other officers' vehicles; then vehicles acquired by the mission or
930
+ by non-head diplomatic officers, "irrespective of whether such vehicle
931
+ is for official or personal use". Numbers freed by sale or export may
932
+ be reissued within the same clause.
933
+ design:
934
+ plate: { w: 410, h: 140, unit: mm }
935
+ background: { color: "#00338D", finish: retroreflective, hex_basis: observed }
936
+ foreground: "#FFFFFF"
937
+ band: { side: none }
938
+ rear_differs: false
939
+ characters:
940
+ letters: { min_height_mm: 60, min_thickness_mm: 20 }
941
+ numerals: { min_height_mm: 90, min_thickness_mm: 20 }
942
+ min_space_mm: 10
943
+ note: >-
944
+ Rule 77(2)(i): letters "not less than 6 centimetres high and 2
945
+ centimetres thick at any part", numerals "not less than 9 centimetres
946
+ high and 2 centimetres thick", spacing "not less than 1 centimetre";
947
+ rule 77(2)(ii): on a motor cycle or invalid carriage, two-thirds of
948
+ those. This is the one Indian plate whose NUMERALS are prescribed
949
+ taller than its LETTERS.
950
+ layout: >-
951
+ Rule 77(3): on a transport vehicle, two lines — "the number allotted to
952
+ the mission or post and the letters forming the first line followed by
953
+ the number allotted by the registering authority in the second line";
954
+ in all other cases one or two lines at choice. Rule 77(3) also caps the
955
+ tilt at thirty degrees from the vertical, against rule 50(5)'s
956
+ forty-five for tractors.
957
+ region_encoding: none
958
+ region_encoding_mechanism: >-
959
+ NO GEOGRAPHY AND NO STATE CODE. The leading number is the MISSION number
960
+ allotted by the Ministry of External Affairs, which is a country decode,
961
+ not a place decode — and the MEA list was NOT reached in this pass, so
962
+ this dataset cannot turn "13 CD 1" into a country. That table is the
963
+ single most requested Indian plate decode after the state codes and is a
964
+ recorded gap for gate L4 (PRD-PLATES § 7 lists diplomatic decode tables
965
+ there).
966
+ sources:
967
+ - "https://web.archive.org/web/20211130113450id_/https://morth.nic.in/sites/default/files/CMVR-chapter3.pdf # rule 76(1)-(6) with footnote 96 dating the substitution of sub-rule (6) to G.S.R. 221(E) 28-3-2001; rule 77(1)(i) 'with deep blue background, the registration mark and the number being in white'; rule 77(1) plate size '41 centimetres by 14 centimetres'; rule 77(2)-(3); accessed 2026-08-02"
968
+ notes: >-
969
+ THE CD PLATE. period.start 1989 is the principal rules: rule 77(1)(i) and
970
+ its 41 x 14 cm plate carry no amendment footnote in MoRTH's consolidation,
971
+ so they are the text as made in G.S.R. 590(E) of 2 June 1989; only the
972
+ ALLOCATION ladder in sub-rule (6) was rewritten in 2001, which changes who
973
+ gets which number and not what the plate looks like. Rule 76(8) adds a
974
+ case this dataset does not model as a series: consular posts headed by
975
+ HONORARY consular officers "shall use standard size number plates bearing
976
+ ordinary registration number" and may add "name of the country followed by
977
+ CC (Honorary)" in white on black, smaller than the registration number, on
978
+ at most two vehicles — an ordinary mark with a legend beside it, not a
979
+ series of its own.
980
+
981
+ - id: in-consular-cc-1989
982
+ class: consular
983
+ categories: [car, van]
984
+ period: { start: 1989, end: 2017 }
985
+ period_evidence: enabling-instrument
986
+ matching: strict
987
+ format:
988
+ pattern: "99 CC 999"
989
+ regex: '\A\d{1,3} ?CC ?\d{1,4} ?[A-Z]?\z'
990
+ regex_statutory: '\A\d+ ?CC ?\d+ ?[A-Z]?\z'
991
+ composition_evidence: instrument
992
+ charset:
993
+ fixed_letters: "CC"
994
+ notes: >-
995
+ Rule 76(7): a vehicle of a consular post "headed by a Carrier
996
+ Counsellor Officer" or of its officers takes "the letters 'CC'
997
+ preceded by the number of the post allotted to it by the Ministry of
998
+ External Affairs ... and followed by a number allotted to the vehicle
999
+ by the registering authority out of a block of numbers allotted for
1000
+ that post". Same unbounded digit widths as the CD series, same
1001
+ reason for `regex_statutory`.
1002
+ design:
1003
+ plate: { w: 410, h: 140, unit: mm }
1004
+ background: { color: "#FFD200", finish: retroreflective, hex_basis: observed }
1005
+ foreground: "#000000"
1006
+ band: { side: none }
1007
+ rear_differs: false
1008
+ characters:
1009
+ letters: { min_height_mm: 60, min_thickness_mm: 20 }
1010
+ numerals: { min_height_mm: 90, min_thickness_mm: 20 }
1011
+ min_space_mm: 10
1012
+ region_encoding: none
1013
+ sources:
1014
+ - "https://web.archive.org/web/20211130113450id_/https://morth.nic.in/sites/default/files/CMVR-chapter3.pdf # rule 76(7); rule 77(1)(ii) in its pre-2017 form, 'with yellow background, the registration mark and the number being in black'; accessed 2026-08-02"
1015
+ - "https://web.archive.org/web/20210514203127id_/https://morth.nic.in/sites/default/files/notifications_document/Notification_no_G_S_R_633E_dated_23_6_2017_regarding_registration_mark_under_rule_76_of_the_CMVR_0.pdf # G.S.R. 633(E) 23-6-2017, which substitutes those exact words and so dates the end of this series; accessed 2026-08-02"
1016
+ notes: >-
1017
+ THE OLD CONSULAR PLATE — yellow with black characters, which is why an
1018
+ Indian consular car of that era is easy to mistake for a taxi at a
1019
+ distance. Ended by G.S.R. 633(E) on 23 June 2017; see in-consular-cc-2017.
1020
+ Distinct from in-diplomatic-cd-1989 in letters and, until 2017, in colour.
1021
+
1022
+ - id: in-consular-cc-2017
1023
+ class: consular
1024
+ categories: [car, van]
1025
+ period: { start: 2017 }
1026
+ period_evidence: enabling-instrument
1027
+ matching: strict
1028
+ format:
1029
+ pattern: "99 CC 999"
1030
+ regex: '\A\d{1,3} ?CC ?\d{1,4} ?[A-Z]?\z'
1031
+ regex_statutory: '\A\d+ ?CC ?\d+ ?[A-Z]?\z'
1032
+ composition_evidence: instrument
1033
+ charset: { fixed_letters: "CC", notes: "unchanged by the 2017 amendment, which touched only rule 77(1)(ii)'s colours" }
1034
+ design:
1035
+ plate: { w: 410, h: 140, unit: mm }
1036
+ background: { color: "#00338D", finish: retroreflective, hex_basis: observed }
1037
+ foreground: "#FFD200"
1038
+ band: { side: none }
1039
+ rear_differs: false
1040
+ characters:
1041
+ letters: { min_height_mm: 60, min_thickness_mm: 20 }
1042
+ numerals: { min_height_mm: 90, min_thickness_mm: 20 }
1043
+ min_space_mm: 10
1044
+ region_encoding: none
1045
+ sources:
1046
+ - "https://web.archive.org/web/20210514203127id_/https://morth.nic.in/sites/default/files/notifications_document/Notification_no_G_S_R_633E_dated_23_6_2017_regarding_registration_mark_under_rule_76_of_the_CMVR_0.pdf # G.S.R. 633(E), 23 June 2017 — Central Motor Vehicles (Ninth Amendment) Rules, 2017, in force on publication: 'In the Central Motor Vehicles Rules, 1989, in rule 77, in sub-rule (1), in clause (ii), for the words “with yellow background, the registration mark and the number being in black”, the words “with deep blue background, the registration mark and the number being in yellow” shall be substituted'; its own draft was G.S.R. 40(E) of 17 January 2017; accessed 2026-08-02"
1047
+ notes: >-
1048
+ THE CURRENT CONSULAR PLATE — deep blue with YELLOW characters, against the
1049
+ diplomatic plate's deep blue with WHITE. That one-word difference is the
1050
+ whole distinction between a CD and a CC plate at a glance today, and it
1051
+ is exactly six years old. period.start 2017 is the amendment's own
1052
+ commencement (publication, 23 June 2017); its draft, G.S.R. 40(E) of
1053
+ 17 January 2017, is NOT the date — the draft invites objections and
1054
+ creates nothing, which is the classic Indian instrument-date trap.
1055
+
1056
+ - id: in-un-1995
1057
+ class: diplomatic
1058
+ categories: [car, van]
1059
+ period: { start: 1995 }
1060
+ period_evidence: enabling-instrument
1061
+ matching: strict
1062
+ format:
1063
+ pattern: "99 UN 999"
1064
+ regex: '\A\d{1,3} ?UN ?\d{1,4} ?[A-Z]?\z'
1065
+ regex_statutory: '\A\d+ ?UN ?\d+ ?[A-Z]?\z'
1066
+ composition_evidence: instrument
1067
+ charset:
1068
+ fixed_letters: "UN"
1069
+ notes: >-
1070
+ Rule 76-A, inserted by G.S.R. 644 dated 25-9-1995: rules 76 and 77 to
1071
+ 80 apply to vehicles of diplomatic officers of organisations notified
1072
+ under the United Nations (Privileges and Immunities) Act, 1947
1073
+ "with the modification that in rule 76,— (a) in sub-rule (6), for the
1074
+ letters 'CD', the letters 'UN' shall be substituted; and (b) in
1075
+ sub-rule (7), for the letters 'CC', the letters 'UN' shall be
1076
+ substituted."
1077
+ design:
1078
+ plate: { w: 410, h: 140, unit: mm }
1079
+ background: { color: "#00338D", finish: retroreflective, hex_basis: observed }
1080
+ foreground: "#FFFFFF"
1081
+ band: { side: none }
1082
+ rear_differs: false
1083
+ note: >-
1084
+ COLOUR CAVEAT, and it is a real ambiguity in the rule: rule 76-A
1085
+ substitutes "UN" into BOTH sub-rule (6) (whose colour is rule 77(1)(i),
1086
+ blue/white) and sub-rule (7) (whose colour is rule 77(1)(ii), now
1087
+ blue/yellow). A UN plate therefore takes blue/white or blue/yellow
1088
+ depending on which sub-rule the vehicle falls under, and the rule gives
1089
+ no way to tell the two apart from the mark. Recorded as an ambiguity,
1090
+ not resolved by invention; the blue/white recorded here is the
1091
+ sub-rule (6) case.
1092
+ region_encoding: none
1093
+ sources:
1094
+ - "https://web.archive.org/web/20211130113450id_/https://morth.nic.in/sites/default/files/CMVR-chapter3.pdf # rule 76-A with footnote 1: 'Inserted by G.S.R. 644, dated 25-9-1995'; accessed 2026-08-02"
1095
+ notes: >-
1096
+ THE UN PLATE. period.start 1995 is the inserting instrument. The
1097
+ footnote in MoRTH's consolidation gives "G.S.R. 644" without the (E)
1098
+ suffix and without a separate commencement date, so the year is what is
1099
+ claimed here and the day is a recorded gap.
1100
+
1101
+ - id: in-nondiplomatic-cdp-1997
1102
+ class: diplomatic
1103
+ categories: [car, van]
1104
+ period: { start: 1997 }
1105
+ period_evidence: enabling-instrument
1106
+ matching: strict
1107
+ format:
1108
+ pattern: "99 CDP 999"
1109
+ regex: '\A\d{1,3} ?CDP ?\d{1,4}\z'
1110
+ regex_statutory: '\A\d+ ?CDP ?\d+\z'
1111
+ composition_evidence: instrument
1112
+ charset:
1113
+ fixed_letters: "CDP"
1114
+ notes: >-
1115
+ Rule 76-B(1), inserted by G.S.R. 395(E) dated 16-7-1997: a vehicle of
1116
+ a NON-DIPLOMATIC official of a mission or post in Delhi "shall be
1117
+ assigned a registration mark consisting of letters 'CDP' preceded by
1118
+ the number allotted to the mission or post by the Ministry of
1119
+ External Affairs ... and followed by a number allotted to the vehicle
1120
+ by the registering authority."
1121
+ design:
1122
+ plate: { w: 410, h: 140, unit: mm }
1123
+ background: { color: "#8DC63F", finish: retroreflective, hex_basis: observed }
1124
+ foreground: "#FFFFFF"
1125
+ band: { side: none }
1126
+ rear_differs: false
1127
+ region_encoding: none
1128
+ sources:
1129
+ - "https://web.archive.org/web/20211130113450id_/https://morth.nic.in/sites/default/files/CMVR-chapter3.pdf # rule 76-B(1) with footnote 2 ('Inserted by G.S.R. 395(E), dated 16-7-1997') and rule 77(1)(iii) with footnote 3 (same instrument): 'with light green background, the registration mark and the number being in white in case of motor vehicles referred to in rule 76-B'; accessed 2026-08-02"
1130
+ notes: >-
1131
+ THE LIGHT-GREEN CDP PLATE — home-based NON-diplomatic staff of a mission
1132
+ in Delhi. Both the mark and its colour arrive in the same instrument,
1133
+ G.S.R. 395(E) of 16 July 1997, so the period claim is unusually clean for
1134
+ this jurisdiction. Do not confuse the light green of rule 77(1)(iii) with
1135
+ the battery-vehicle green of rule 50(2A): different instruments,
1136
+ different regimes, twenty-one years apart, and the CDP plate carries
1137
+ white characters where a private EV plate also carries white — the mark
1138
+ itself is the only reliable discriminator.
1139
+
1140
+ - id: in-nondiplomatic-ccp-1997
1141
+ class: consular
1142
+ categories: [car, van]
1143
+ period: { start: 1997 }
1144
+ period_evidence: enabling-instrument
1145
+ matching: strict
1146
+ format:
1147
+ pattern: "99 CCP 999"
1148
+ regex: '\A\d{1,3} ?CCP ?\d{1,4}\z'
1149
+ regex_statutory: '\A\d+ ?CCP ?\d+\z'
1150
+ composition_evidence: instrument
1151
+ charset:
1152
+ fixed_letters: "CCP"
1153
+ notes: >-
1154
+ Rule 76-B(2): a vehicle of a home-based non-diplomatic official of a
1155
+ consular post OUTSIDE Delhi "shall be assigned a registration mark
1156
+ consisting of the letters 'CCP' preceded by the number of the post
1157
+ allotted to it by the Ministry of External Affairs ... and followed
1158
+ by the number allotted to the vehicle by the registering authority."
1159
+ design:
1160
+ plate: { w: 410, h: 140, unit: mm }
1161
+ background: { color: "#8DC63F", finish: retroreflective, hex_basis: observed }
1162
+ foreground: "#FFFFFF"
1163
+ band: { side: none }
1164
+ rear_differs: false
1165
+ region_encoding: none
1166
+ sources:
1167
+ - "https://web.archive.org/web/20211130113450id_/https://morth.nic.in/sites/default/files/CMVR-chapter3.pdf # rule 76-B(2) and rule 77(1)(iii), both inserted by G.S.R. 395(E) dated 16-7-1997; accessed 2026-08-02"
1168
+ notes: >-
1169
+ THE CCP PLATE — the outside-Delhi twin of CDP, same colour, same
1170
+ instrument, same date. Two series rather than one because the letter
1171
+ group differs and a parse API must be able to score each shape
1172
+ independently (the plates/nl.yml GV-sidecode precedent).