Validation RegEx Vin avant 1980 et après 1980

En 1981, les numéros d'identification des véhicules (VIN) ont été normalisés à l'aide d'un système à dix-sept chiffres. Avant 1981, les fabricants utilisaient des VIN propres à leur propre entreprise et il n'y avait pas de norme acceptée pour ces nombres, de sorte que différents fabricants utilisaient différents formats … http://www.crankshaftcoalition.com/wiki/VIN_decoding

Il a exigé que tous les véhicules routiers vendus contiennent un VIN à 17 caractères, qui n'inclut pas les lettres I (i), O (o) ou Q (q) (pour éviter toute confusion avec les numéros 1 et 0) . Http://en.wikipedia.org/wiki/Vehicle_identification_number

Donc, ce que j'essaie d'accomplir, c'est d'avoir une liste déroulante et si, de 1980 à 1900, il est choisi, le VIN suivra les lignes directrices des produits manufacturés ou ne s'appliquera pas du tout où les lettres I (i), O (o), Ou Q (q) pourrait être utilisé et n'importe quel nombre de caractères / nombres. Mais alors, si 1981 et plus tard, il est choisi le RegEx pour lancer et exiger qu'il soit formaté avec l'expression que j'ai un NIV valide ou non valide.

Branché un VIN valide pour le moment pour des fins de test … si vous supprimez le dernier numéro, il affichera "Vin invalide"

Toute suggestion ou aide serait grandement appréciée!

Http://jsfiddle.net/ommLz4th/1/

RegExp

^[A-HJ-NPR-Z\\d]{8}[\\dX][A-HJ-NPR-Z\\d]{2}\\d{6}$ 

JQuery Vin Validator

  $(function() { $("#vin").on("keyup blur", function() { if (validateVin($("#vin").val())) { $("#result").css('color', 'green').html("Valid VIN"); $("#vin").removeClass("not-ok").addClass("ok"); } else { $("#result").css('color', 'red').html("Invalid VIN"); $("#vin").removeClass("ok").addClass("not-ok"); } }); }); function validateVin(vin) { var re = new RegExp("^[A-HJ-NPR-Z\\d]{8}[\\dX][A-HJ-NPR-Z\\d]{2}\\d{6}$"); return vin.match(re); } 

HTML

 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <label name="vin">VIN</label> <input type="text" id="vin" value="1FAFP40634F172825" /> <span id="result"></span> 

Déposer à des fins de test

 <select name="vehicleyear" id="vehicleyear"> <option value="">Choose Year</option> <option value="1985">1985</option> <option value="1984">1984</option> <option value="1983">1983</option> <option value="1982">1982</option> <option value="1981">1981</option> <option value="1980">1980</option> <option value="1979">1979</option> <option value="1978">1978</option> <option value="1977">1977</option> <option value="1976">1976</option> <option value="1975">1975</option> <option value="1974">1974</option> </select> 

Réel Drop down

 <cfparam name="form.vehicleyear" default=""> <cfset VARIABLES.y1=DatePart("yyyy",Now())> <cfset VARIABLES.y2=VARIABLES.y1+2> <cfif Val(form.vehicleyear) LT VARIABLES.y1 or Val(form.vehicleyear) GT VARIABLES.y2> </cfif> <cfoutput> <cfselect name="vehicleyear" id="vehicleyear" required="yes" message="Please select vehicle year."> <option value="" selected="selected">Select Year</option> <cfloop index="i" from="#VARIABLES.y2#" to="1900" step="-1"> <option value="#i#"<cfif form.vehicleyear EQ i> selected</cfif>>#NumberFormat(i,"0000")#</option> </cfloop> </cfselect> </cfoutput> 

Je ne vais pas développer le RegExps pour vous, mais le modèle global devrait être quelque chose comme ceci:

 $(function() { $("#vin").on("keyup blur", function() { if ( validateVin( this.value, Number($("#vehicleyear").val()) ) ) { $("#result").css('color', 'green').html("Valid VIN"); $("#vin").removeClass("not-ok").addClass("ok"); } else { $("#result").css('color', 'red').html("Invalid VIN"); $("#vin").removeClass("ok").addClass("not-ok"); } }); function validateVin(vin, date) { if(date > 1980) { var re = new RegExp("^[A-HJ-NPR-Z\\d]{8}[\\dX][A-HJ-NPR-Z\\d]{2}\\d{6}$"); return vin.match(re); } else { //Pre validation are rules to complex. We are forced to assume the vin is valid. //Though really at least a simple test would be preferable - eg vin.length >= 20 or whatever return true; } } }); 

Notez que vin et la date sont transmises à validateVin() permettant ainsi au code de se brancher.