方法一:
function cntrCheck(as_cntrno)
{
//var valuex ;//= new Array[11];
var valuex = new Array(11);
var valall,ii;
var li_ctnsn;
var ctnno= new Array();
var mx = 0;
var mt = 0;
var i = 0;
var my ="";
var mz =0;
mt = 0;
mx = 9;
var ls_cntrno = as_cntrno;
if (ls_cntrno.length != 11) return false;
ctnno=my_splite(ls_cntrno);//ls_cntrno.toCharArray();
for(ii =0;ii<=3;ii++)
{
//alert("aa--"+ctnno[ii].charCodeAt());
switch (ctnno[ii].charCodeAt())
{
case 65:
valuex[ii]=10 * parseInt(Math.pow(2, ii));
break;
case 66:
case 67:
case 68:
case 69:
case 70:
case 71:
case 72:
case 73:
case 74:
case 75:
valuex[ii] = parseInt(((parseInt(ctnno[ii].charCodeAt()) - 54) * Math.pow(2, ii)));
break;
case 76:
case 77:
case 78:
case 79:
case 80:
case 81:
case 83:
case 84:
case 85:
valuex[ii]=parseInt( ((parseInt(ctnno[ii].charCodeAt()) - 53) * Math.pow(2, ii)));
break;
case 86:
case 87:
case 88:
case 89:
case 90:
valuex[ii]=parseInt( ((parseInt(ctnno[ii].charCodeAt()) - 52) * Math.pow(2, ii)));
break;
default:
}
}
// 5-11位的数字校验
for(ii =4;ii<=10;ii++)
{
if(parseInt(ctnno[ii].charCodeAt())<48 || parseInt(ctnno[ii].charCodeAt())>57) return false;
}
valuex[4] = parseInt(ctnno[4].charCodeAt()) *16 ; //2^4
valuex[5] = parseInt(ctnno[5].charCodeAt()) *32 ; //2^5
valuex[6] = parseInt(ctnno[6].charCodeAt()) *64 ; //2^6
valuex[7] = parseInt(ctnno[7].charCodeAt()) *128; //2^7
valuex[8] = parseInt(ctnno[8].charCodeAt()) *256; //2^8
valuex[9]= parseInt(ctnno[9].charCodeAt())*512 ; //2^9
valuex[10]= parseInt(ctnno[10].charCodeAt()) ; //2^10
valall=valuex[1]+valuex[2]+valuex[3]+valuex[4]+valuex[5]+valuex[6]+valuex[7]+
valuex[8]+valuex[9]+valuex[10];
valall=valall%11;
if (valall==10) valall=0;
if (valall== valuex[10] )
{
if ("SNKU"==as_cntrno.substring(0,4))
{
alert(as_cntrno.substring(4, as_cntrno.length));
li_ctnsn=parseFloat(as_cntrno.substring(4, as_cntrno.length));
alert(li_ctnsn);
if((li_ctnsn>=200000 && li_ctnsn<=200699)||(li_ctnsn>=400000 && li_ctnsn<=400149))
return true;
else
{
//System.out.println("该箱符合一般校验规则,但不符合SNKU的校验规则");
return false;
}
}
else if ("SKLU".equals(as_cntrno.substring(0,4)))
{
li_ctnsn=parseFloat(as_cntrno.substring(4, as_cntrno.length));
if((li_ctnsn>=200000 && li_ctnsn<=200699)||(li_ctnsn>=400000 && li_ctnsn<=400149))
return true;
else
{
//System.out.println("该箱符合一般校验规则,但不符合SKLU的校验规则");
return false;
}
}
}
return true;
}
//字符串转换为字符数组
function my_splite(str)
{
var str_arr = new Array();
len = str.length;
for (i=0;i<len;i++)
{
str_arr[i] = str.substring(i, i+1);
}
return str_arr;
}
方法二:
注:网上下载,一般性校验,个例不能("SOCU4267316" true 但此方法为false)
function cntrCheck(as_cntrno)
{
var mx = 0;
var mt = 0;
var i = 0;
var my ="";
var mz =0;
mt = 0;
mx = 9;
as_cntrno = as_cntrno.toUpperCase();
if(as_cntrno.length>0 && as_cntrno.length <10)
{
//alert("提单号长度不正确,请正确输入");
return false;
}
reg ="[0-9]";
for(i=0;i<10;i++)
{
my = as_cntrno.substring(mx,mx+1);
/*
if((!reg.test(my)) && (i <6) )
{
return false;
}
alert(my.charCodeAt());*/
/* && (my.charCodeAt()<91)*/
if((((my.charCodeAt())<64) && (my.charCodeAt()<91)) && (i >5))
{
//alert("=========");
return false;
}
//if(reg.test(my))
if(my.match(reg))
{
//mz = parse(my);
mz = parseInt(my);
}
else
{
if (my == "A")
{
mz = 10;
}
if((my.charCodeAt()>"A".charCodeAt())&&(my.charCodeAt()<"L".charCodeAt()))
{
mz = my.charCodeAt() - 54;
}
if((my.charCodeAt()>"K".charCodeAt())&&(my.charCodeAt()<"V".charCodeAt()))
{
mz = my.charCodeAt() - 53;
}
if((my.charCodeAt())>"U".charCodeAt())
{
mz = my.charCodeAt() - 52;
}
}
mt = (mt + mz)*2;
//alert(mt)
mx = mx - 1;
}
mt = parseInt(mt / 2);
my = as_cntrno.substring(10,11);
if(my.charCodeAt() == 32)
{
//alert("错误的");
return false;
}
//if(reg.test(my))
if(my.match(reg))
{
mz = parseInt(my);
}
else
{
mz = my.charCodeAt() - 55;
}
if(mz == ((mt % 11)%10))
{
ib_pass = true;
//alert("箱号通过校验");
}
else
{
ib_pass = false;
//alert("校验失败");
}
return ib_pass;
}