php正则车架号,js正则校验车架号VIN
@xdsnet 的回答已经很全⾯了,先⽤正则表达式快速检查,再做校验。我这⾥只是对代码做⼀个纯粹的技术探讨。
关于 cOT 的⽣成
⼿写太累,可以const cOT = (() => {
const entries = [
"0123456789",
" ABCDEFGH",
" JKLMNOPQR",
" STUVWXYZ"
].flatMap(
// Array.from 把字符串拆分成字符数组(主要是⼿写字符数组太累)
// 根据字符位置⽣成 entry,⽐如 ['J', 1]
js 正则替换// 完了进⾏ flat,把多组数组扁平化
s => Array.from(s).map((c, i) => [c, i])
);
// 从 entires ⽣成对象,这个对象的键包含了空格、I、O 和 Q
// 如果将上⾯的 IOQ 替换成空格,这⾥多的就只有空格
const map = Object.fromEntries(entries);
// 删除多余的键(其实不删也没关系,因为之前已经⽤正则已将这些字符排除掉了)
return Array.from(" IOQ").reduce((m, c) => (delete m[c], m), map);
})();
这段代码只在初始化的时候执⾏⼀次,对效率没啥影响。如果还是想直接定义成常量,将上述代码的执⾏结果在控制台中⽤
JSON.stringify(cOT) 输出就是。
关于计算 SUM
效率并不如原⽣循环,只是把计算过程封装在⼀句话⾥。⽤ IIFE 也可以达到同样的效果。const sum = Array.from(VIN)
.map((c, i) => cOT[c] * xWT[i])
.reduce((s, v) => s + v, 0);
关于 10 => 'X'
直接⽤数组很直接,关⽆⽑病。
这是个时间换空间的写法(其实对于这点空间,没啥卵⽤),const vcode = (mod => mod === 10 ? "X" : String())(sum % 11);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论