JAVASCRIPT車架號(hào)識(shí)別/驗(yàn)證函數(shù)代碼 汽車車架號(hào)驗(yàn)證程序
更新時(shí)間:2012年01月08日 22:37:20 作者:
偶然中在CSDN里找到C#版的驗(yàn)證程序,因此改編了一版JS版本,相信會(huì)對(duì)大家有用
算法根源:
大致是這樣車輛識(shí)別代碼的第9位是檢驗(yàn)位,檢驗(yàn)位可用0—9中任一數(shù)字或字母“X”表示。其它位置的數(shù)字和字母代表的意義個(gè)廠家含義可能不同,但在VIN碼的其他16位字碼確定后,按以下方法計(jì)算得出第九位的檢驗(yàn)位。
首先將其它16位中的字母按下列關(guān)系轉(zhuǎn)換成數(shù)字:
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
每個(gè)位置都有個(gè)加權(quán)數(shù):
位置:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
權(quán)數(shù):8 7 6 5 4 3 2 10 * 9 8 7 6 5 4 3 2
最后將檢驗(yàn)位之外的16位每一位的加權(quán)系數(shù)乘以此位的對(duì)應(yīng)值,再將各乘積相加,求得的和除以11,所得的余數(shù)就是檢驗(yàn)位的數(shù)值。如果余數(shù)為10,則檢驗(yàn)位為字母“X”。
JS代碼:
<script type="text/javascript">
var Arr = new Array();
var Brr = new Array();
Arr['A'] = 1;
Arr['B'] = 2;
Arr['C'] = 3;
Arr['D'] = 4;
Arr['E'] = 5;
Arr['F'] = 6;
Arr['G'] = 7;
Arr['H'] = 8;
Arr['J'] = 1;
Arr['K'] = 2;
Arr['L'] = 3;
Arr['M'] = 4;
Arr['N'] = 5;
Arr['P'] = 7;
Arr['R'] = 9;
Arr['S'] = 2;
Arr['T'] = 3;
Arr['U'] = 4;
Arr['V'] = 5;
Arr['W'] = 6;
Arr['X'] = 7;
Arr['Y'] = 8;
Arr['Z'] = 9;
Arr['1'] = 1;
Arr['2'] = 2;
Arr['3'] = 3;
Arr['4'] = 4;
Arr['5'] = 5;
Arr['6'] = 6;
Arr['7'] = 7;
Arr['8'] = 8;
Arr['9'] = 9;
Arr['0'] = 0;
Brr[1]=8;
Brr[2]=7;
Brr[3]=6;
Brr[4]=5;
Brr[5]=4;
Brr[6]=3;
Brr[7]=2;
Brr[8]=10;
Brr[9]=0;
Brr[10]=9;
Brr[11]=8;
Brr[12]=7;
Brr[13]=6;
Brr[14]=5;
Brr[15]=4;
Brr[16]=3;
Brr[17]=2;
function getCheckCode(sVIN)
{
var sKYZF="ABCDEFGHJKLMNPRSTUVWXYZ1234567890";
var sJYW ='';
var bl = false;
var blKYZF = false;
if (sVIN.length == 17)
{
var iJQS=0,intTemp=0;
ht = Arr;
htZM = Brr;
try
{
for (var i = 0; i <sVIN.length; i++)
{
if (sKYZF.indexOf(sVIN.substr(i, 1)) != -1)
{
blKYZF = true;
iJQS = iJQS + parseInt(ht[sVIN.substr(i, 1)]) * parseInt(htZM[(i + 1)]);
}
else
{
blKYZF = false;
break;
}
}
if (blKYZF)
{
intTemp = iJQS%11;
if (intTemp == 10)
{
sJYW = "X";
}
else
{
sJYW = intTemp.toString();
}
if (sJYW == sVIN.substr(8, 1)) bl = true;
}
else
{
bl = false;
}
}
catch(err)
{
bl = false;
}
}
return bl;
}
alert(getCheckCode("WVGAB97PXCD010692"));
</script>
大致是這樣車輛識(shí)別代碼的第9位是檢驗(yàn)位,檢驗(yàn)位可用0—9中任一數(shù)字或字母“X”表示。其它位置的數(shù)字和字母代表的意義個(gè)廠家含義可能不同,但在VIN碼的其他16位字碼確定后,按以下方法計(jì)算得出第九位的檢驗(yàn)位。
首先將其它16位中的字母按下列關(guān)系轉(zhuǎn)換成數(shù)字:
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
每個(gè)位置都有個(gè)加權(quán)數(shù):
位置:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
權(quán)數(shù):8 7 6 5 4 3 2 10 * 9 8 7 6 5 4 3 2
最后將檢驗(yàn)位之外的16位每一位的加權(quán)系數(shù)乘以此位的對(duì)應(yīng)值,再將各乘積相加,求得的和除以11,所得的余數(shù)就是檢驗(yàn)位的數(shù)值。如果余數(shù)為10,則檢驗(yàn)位為字母“X”。
JS代碼:
復(fù)制代碼 代碼如下:
<script type="text/javascript">
var Arr = new Array();
var Brr = new Array();
Arr['A'] = 1;
Arr['B'] = 2;
Arr['C'] = 3;
Arr['D'] = 4;
Arr['E'] = 5;
Arr['F'] = 6;
Arr['G'] = 7;
Arr['H'] = 8;
Arr['J'] = 1;
Arr['K'] = 2;
Arr['L'] = 3;
Arr['M'] = 4;
Arr['N'] = 5;
Arr['P'] = 7;
Arr['R'] = 9;
Arr['S'] = 2;
Arr['T'] = 3;
Arr['U'] = 4;
Arr['V'] = 5;
Arr['W'] = 6;
Arr['X'] = 7;
Arr['Y'] = 8;
Arr['Z'] = 9;
Arr['1'] = 1;
Arr['2'] = 2;
Arr['3'] = 3;
Arr['4'] = 4;
Arr['5'] = 5;
Arr['6'] = 6;
Arr['7'] = 7;
Arr['8'] = 8;
Arr['9'] = 9;
Arr['0'] = 0;
Brr[1]=8;
Brr[2]=7;
Brr[3]=6;
Brr[4]=5;
Brr[5]=4;
Brr[6]=3;
Brr[7]=2;
Brr[8]=10;
Brr[9]=0;
Brr[10]=9;
Brr[11]=8;
Brr[12]=7;
Brr[13]=6;
Brr[14]=5;
Brr[15]=4;
Brr[16]=3;
Brr[17]=2;
function getCheckCode(sVIN)
{
var sKYZF="ABCDEFGHJKLMNPRSTUVWXYZ1234567890";
var sJYW ='';
var bl = false;
var blKYZF = false;
if (sVIN.length == 17)
{
var iJQS=0,intTemp=0;
ht = Arr;
htZM = Brr;
try
{
for (var i = 0; i <sVIN.length; i++)
{
if (sKYZF.indexOf(sVIN.substr(i, 1)) != -1)
{
blKYZF = true;
iJQS = iJQS + parseInt(ht[sVIN.substr(i, 1)]) * parseInt(htZM[(i + 1)]);
}
else
{
blKYZF = false;
break;
}
}
if (blKYZF)
{
intTemp = iJQS%11;
if (intTemp == 10)
{
sJYW = "X";
}
else
{
sJYW = intTemp.toString();
}
if (sJYW == sVIN.substr(8, 1)) bl = true;
}
else
{
bl = false;
}
}
catch(err)
{
bl = false;
}
}
return bl;
}
alert(getCheckCode("WVGAB97PXCD010692"));
</script>
相關(guān)文章
JavaScript中forEach和map的使用場(chǎng)景
本文JavaScript中forEach和map的使用場(chǎng)景,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
js數(shù)字滑動(dòng)時(shí)鐘的簡(jiǎn)單實(shí)現(xiàn)(示例講解)
下面小編就為大家?guī)硪黄猨s數(shù)字滑動(dòng)時(shí)鐘的簡(jiǎn)單實(shí)現(xiàn)(示例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08
PixiJS學(xué)習(xí)之Sprite類的使用詳解
Sprite 直譯為 “精靈”,是游戲開發(fā)中常見的術(shù)語,就是將一個(gè)角色的多個(gè)動(dòng)作放到一個(gè)圖片里,通過裁剪局部區(qū)域得到當(dāng)前的角色狀態(tài)圖。本文主要介紹了PixiJS中Sprite類的使用,需要的可以參考一下2023-02-02
Javascript查看大圖功能代碼實(shí)現(xiàn)
這篇文章主要介紹了Javascript查看大圖功能代碼實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
JavaScript實(shí)現(xiàn)Java中Map容器的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)Java中Map容器的方法,結(jié)合實(shí)例形式分析了JavaScript實(shí)現(xiàn)Java中Map容器的原理與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-10-10
uniapp路由uni-simple-router實(shí)例詳解
uni-simple-router專為uniapp打造的路由器,和uniapp深度集成,這篇文章主要給大家介紹了關(guān)于uniapp路由uni-simple-router的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09
JavaScript 學(xué)習(xí)小結(jié)(適合新手參考)
JavaScript常量又稱字面常量,是固化在程序代碼中的信息。變量的主要作用是存取數(shù)據(jù),提供一個(gè)存取信息的容器。2009-07-07

