admin管理员组文章数量:1442608
php 正则车架号,js 正则校验车架号VIN
@xdsnet 的回答已经很全面了,先用正则表达式快速检查,再做校验。我这里只是对代码做一个纯粹的技术探讨。
关于 cOT 的生成
手写太累,可以const cOT = (() => {
const entries = [
"0123456789",
" ABCDEFGH",
" JKLMNOPQR",
" STUVWXYZ"
].flatMap(
// Array.from 把字符串拆分成字符数组(主要是手写字符数组太累)
// 根据字符位置生成 entry,比如 ['J', 1]
// 完了进行 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" : mod.toString())(sum % 11);
本文标签: php 正则车架号js 正则校验车架号VIN
版权声明:本文标题:php 正则车架号,js 正则校验车架号VIN 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1701940414a508295.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论