有没有人创建过VIN验证器?我正在尝试创建一个文本框,用户将在其中输入车辆识别号,然后JS/jQuery将验证其正确性,以防万一他们键入错误的数字。

我是JS/jQuery的新手,已经找到了一些示例,但是当然不能使它们正常工作...任何有任何想法或建议的人都将不胜感激,特别是如果您能告诉我如何设置以下我要正常工作的东西!

注意:isVin() functioncflib.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 &amp; 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/

10-09 06:28
查看更多