有没有人创建过VIN验证器?我正在尝试创建一个文本框,用户将在其中输入车辆识别号,然后JS/jQuery将验证其正确性,以防万一他们键入错误的数字。
我是JS/jQuery的新手,已经找到了一些示例,但是当然不能使它们正常工作...任何有任何想法或建议的人都将不胜感激,特别是如果您能告诉我如何设置以下我要正常工作的东西!
注意:isVin() function由cflib.org提供
HTML:
<label name="vin">VIN</label>
<input type="text" name="vin" />
ColdFusion:
<cfscript>
/**
* US Vehicle Identification Number (VIN) validation.
* version 1.0 by Christopher Jordan
* version 1.1 by RHPT, Peter Boughton & Adam Cameron (original function rejected valid VINs)
*
* @param v VIN to validate (Required)
* @return Returns a boolean.
* @author Christopher Jordan (cjordan@placs.net)
* @version 1, February 19, 2013
*/
function isVIN(v) {
var i = "";
var d = "";
var checkDigit = "";
var sum = 0;
var weights = [8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2];
var transliterations = {
a = 1, b = 2, c = 3, d = 4, e = 5, f = 6, g = 7, h = 8,
j = 1, k = 2, l = 3, m = 4, n = 5, p = 7, r = 9,
s = 2, t = 3, u = 4, v = 5, w = 6, x = 7, y = 8, z = 9
};
var vinRegex = "(?x) ## allow comments
^ ## from the start of the string
## see http://en.wikipedia.org/wiki/Vehicle_Identification_Number for VIN spec
[A-Z\d]{3} ## World Manufacturer Identifier (WMI)
[A-Z\d]{5} ## Vehicle decription section (VDS)
[\dX] ## Check digit
[A-Z\d] ## Model year
[A-Z\d] ## Plant
\d{6} ## Sequence
$ ## to the end of the string
";
if (! REFindNoCase(vinRegex, arguments.v)) {
return false;
}
for (i = 1; i <= len(arguments.v); i++) {
d = mid(arguments.v, i, 1);
if (! isNumeric(d)) {
sum += transliterations[d] * weights[i];
} else {
sum += d * weights[i];
}
}
checkDigit = sum % 11;
if (checkDigit == 10) {
checkDigit = "x";
}
return checkDigit == mid(arguments.v, 9, 1);
}
</cfscript>
测试代码:
<cfoutput>
<cfset vin = "1GNDM19ZXRB170064">
#vin#: #isVin(vin)#<br />
<cfset vin = "1FAFP40634F172825">
#vin#: #isVin(vin)#<br />
</cfoutput>
最佳答案
这是使用正则表达式的客户端解决方案。
$(function() {
$("#vin").on("keyup blur", function() {
if (validateVin($("#vin").val()))
$("#result").html("That's a VIN");
else
$("#result").html("Not a VIN");
}).trigger("blur");
});
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);
}
<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>
关于JavaScript/jQuery VIN验证程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26407015/