VIN Validation RegEx
Habe ich geschrieben, VIN validation RegEx basiert auf der http://en.wikipedia.org/wiki/Vehicle_identification_number aber dann, wenn ich versuche, einige tests, es ist nicht zu akzeptieren, eine gültige VIN-Nummern.
Meine RegEx:
^[A-HJ-NPR-Za-hj-npr-z\\d]{8}[\\dX][A-HJ-NPR-Za-hj-npr-z\\d]{2}\\d{6}$
VIN-Nummer Nicht Funktioniert:
1ftfw1et4bfc45903
WP0ZZZ99ZTS392124
VIN Zahlen zu Arbeiten:
19uya31581l000000
1hwa31aa5ae006086
(Ich denke, das problem mit den zahlen am Ende, Wikipedia machte es klingen wie es enden würde mit nur 6 zahlen und die, die nicht arbeiten, aber gültig ist nur die Nummer endet mit 5)
Jede Hilfe, die Korrektur dieses Problems würde sehr geschätzt werden!
- Der Wikipedia-spec, die Sie Gaben, zeigt, dass es viele verschiedene Arten von VIN-Nummern. Welche versuchen Sie zu entsprechen?
- errrr es ist zu erkennen, alle Vin-Nummern 🙁 ich dachte, das eine hatte ich oben so nicht 🙁
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann ich dir nicht helfen mit eine perfekte regex für VIN-Nummern-aber ich kann erklären, warum das so ist, die versagt haben, Ihrem Beispiel zu 1ftfw1et4bfc45903:
^[A-HJ-NPR-Za-hj-npr-z\d]{8}
Dies ermöglicht 8 Charaktere aus beliebigen Ziffern und alle Buchstaben außer ich, O, und Q; es richtig findet, die ersten 8 Zeichen:
1ftfw1et
[\dX]
Dies ermöglicht für 1 Zeichen, entweder eine Ziffer oder ein Kapital X; es richtig findet, dass das nächste Zeichen:
4
[A-HJ-NPR-Za-hj-npr-z\d]{2}
Dies ermöglicht für 2 Zeichen aus beliebigen Ziffern und alle Buchstaben außer I, O und Q; es richtig findet die nächste 2 Zeichen:
bf
\d{6}$
Dies ermöglicht für genau 6 Ziffern, und das ist der Grund, warum die regex scheitert; weil die letzten 6 Zeichen sind nicht alle stellen:
c45903
VIN sollte nur
A-Z
,0-9
Zeichen, aber nichtI
,O
oderQ
Letzten 6 Zeichen der VIN sollten eine Reihe
VIN 17 Zeichen lang
Du nicht angeben, welche Sprache Sie verwenden, aber die folgende regex verwendet werden kann, um überprüfen einer US-VIN mit
php
:Dieser reguläre Ausdruck ist in Ordnung, die für die Validierung UNS VINs, einschließlich die, die Sie beschrieben:
[A-HJ-NPR-Z0-9]{17}
Denken Sie daran, um es groß-und Kleinschreibung mit Flagge ich
Quelle: https://github.com/rfink/angular-vin
Fühle ich regex ist nicht die ideale Validierung. VINs haben eine eingebaute Prüfziffer. https://en.wikibooks.org/wiki/Vehicle_Identification_Numbers_(VIN_codes)/Check_digit oder http://www.vsource.org/VFR-RVF_files/BVINcalc.htm
Ich schlage vor, Sie bauen ein Algorithmus mit dieser. (Ungetestet-Algorithmus Beispiel)
Dan ist richtig - VINs eine Prüfsumme. Sie können nicht nutzen, die in regex, so das beste, was Sie tun können, mit regex casting zu weiten Netz. Damit meine ich, dass deine regex akzeptiert alle gültigen VINs, und auch um eine Billion (grobe Schätzung) nicht-VIN 17-character-Zeichenfolgen.
Wenn Sie arbeiten, in einer Sprache, die mit Namen erfassen Sie Gruppen, die Sie extrahieren können, dass die Daten als gut.
Also, wenn Ihr Ziel ist:
Nur nicht ablehnen gültig VINs (Vermietung ungültig ist ok) dann verwenden Fransisco Antwort
[A-HJ-NPR-Z0-9]{17}
.Nicht ablehnen gültig VINs, und greifen Informationen wie Modell, Jahr, Werk-code, etc, dann verwenden Sie diese (beachten Sie, müssen Sie verwenden eine Sprache, die Unterstützung von named capture groups - aus der Spitze von meinem Kopf: Perl, Python, Elixier, fast sicherlich andere, aber nicht JS):
/^(?<wmi>[A-HJ-NPR-Z\d]{3})(?<vds>[A-HJ-NPR-Z\d]{5})(?<check>[\dX])(?<vis>(?<year>[A-HJ-NPR-Z\d])(?<plant>[A-HJ-NPR-Z\d])(?<seq>[A-HJ-NPR-Z\d]{6}))$/
wo die Namen definiert, die am Ende dieser Antwort.Nicht ablehnen gültig VINs, und verhindern, dass einige, aber nicht alle ungültig VINs, erhalten Sie bestimmten wie Pedro tut.
Nur akzeptieren gültige VINs: Sie brauchen, um code zu schreiben (nur ein Scherz, GitHub existiert).
Capture group-name Schlüssel:
wmi
- Welt Hersteller identifiervds
- Fahrzeug descriptor Abschnittcheck
- Prüfziffervis
- Fahrzeug identifier Abschnittyear
- Modell Jahrplant
- Anlage codeseq
- Produktion SequenznummerSollte dies funktionieren, ist es von splunk-Suche, so gibt es einige zusätzliche AUSSCHLÜSSE**
Die NHTSA-website bietet eine Methode zum berechnen der 9. Zeichen Checksumme, wenn Sie interessiert sind. Es bietet auch viele andere nützliche Daten, wie z.B. welche Zeichen erlaubt sind, in welcher position, oder wie, um zu bestimmen, ob die 10-Zeichen, wenn der alphabetischen, bezieht sich auf ein Modelljahr bis 1999 oder Modell des Jahres 2010.
NHTSA VIN eCFR
Hoffe, das hilft.