gpt4 book ai didi

validation - ColdFusion VIN 号码验证码

转载 作者:行者123 更新时间:2023-12-04 01:13:17 24 4
gpt4 key购买 nike

我正在尝试将 this PHP validation code 转换为 ColdFusion。但是,我无法让我的 CF 版本正确验证 VIN。我希望有人能阐明我所缺少的东西。

<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})[A-Z]{2}\d{2}([A-Z]{1}|\d{1})([\d{1}|X{1})([A-Z]+\d+|\d+[A-Z]+)\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 上有一个 VIN 验证功能,但它也不起作用)。

最佳答案

你的函数有两个问题。

首先,正则表达式不正确。这是一个简化的工作版本:

^[A-Z\d]{3}[A-Z]{2}\d{2}[A-Z\d][\dX](?:[A-Z]+\d+|\d+[A-Z]+)\d{5}$

注意: 根据 Adam's answer 有一个比这更简单的模式。

其次,在您的校验位比较中,Mid 是 1 - 似乎 8 应该是 9。

(大概这是一个语言转换问题,因为 PHP 是 0 索引而 CFML 是 1 索引。)

修复了这两个问题后,修改后的函数为 VIN WAUBA24B3XN104537 返回 true(这是我在快速搜索中能找到的唯一示例 VIN)。

关于validation - ColdFusion VIN 号码验证码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13977991/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com