I am trying to convert this PHP validation code to ColdFusion. However, I cannot get the CF version to validate the VIN correctly. I hope someone can shed light on what I am missing.
<cfscript> 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 }; if (! REFindNoCase("^([\w]{3})[AZ]{2}\d{2}([AZ]{1}|\d{1})([\d{1}|X{1})([AZ]+\d+|\d+[AZ]+)\d{5}$", ARGUMENTS.v)) { return false; } if (Len(ARGUMENTS.v) != 17) { 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"; } if (checkdigit == Mid(ARGUMENTS.v,8,1)) { return true; } return false; } </cfscript>
(CFLib.org has a VIN check function, but it does not work.)