为了方便集装箱的管理,国际标准化组织(ISO)拟定了集装箱标志方案。标志内容:箱主代码、顺序号和核对数
箱主代码:集装箱所有者的代码,它由4位拉丁字母表示;前3位由箱主自己规定,并向国际集装箱局登记;第4位字母为U,标志海运集装箱代号。例如中国远洋运输(集团)公司的箱主代码为:COSU
顺序号:为集装箱的编号,按照国际标准(GB1836-85)的规定,用6位阿拉伯数字表示,不足6位的则以0补之。
核对数:用于计算机核对箱主号与顺序号记录的正确性。核对号一般于顺序号之后,用一位阿拉伯数字表示,并加方框以醒目。
核对号是由箱主代码的四位字母和顺序号的六位数字通过以下方式换算而得。具体换算脚骤如下:
首先,将表示箱主代码的四位字母转化成相应的等效数字,字母和等效数字的对应关系见下表:
A-10 B-12 C-13 D-14 E-15 F-16 G-17 H-18 I-19 J-20 K-21 L-23 M-24 N-25 O-26 P-27 Q-28 R-29 S-30 T-31 U-32 V-34 W-35 X-36 Y-37 Z-38
从表中可以看出,去掉了11及其倍数的数字,这是因为后面的计算将把11作为模数。然后,将前四位字母对应的等效数字和后面的顺序号的数字(共计10位)采用加权系数法进行计算求和。
最后,以S除以模数11,求其余数,即得核对号
例如,求中国远洋运输公司的集装箱COSU800121的核对号:
首先,对应的数字是:13—26—30—32—8—0—0—1—2—1
然后加权求和,最后,除以11取余数:见图三;余数为5
所以核对号为5。
故该集装箱的号码为:COSU8001215
最后贴上js代码
JsHelper.isContainerNo = function(ContainerNo) { if (ContainerNo.length != 11) return false; ContainerNo = ContainerNo.toLowerCase(); var b = 0; var c = 0; for (var i = 0; i < 10; i++) { var s = ContainerNo.substr(i, 1) switch (s) { case "0": b = 0 break; ; case "1": b = 1; break; case "2": b = 2; break; case "3": b = 3; break; case "4": b = 4; break; case "5": b = 5; break; case "6": b = 6; break; case "7": b = 7; break; case "8": b = 8; break; case "9": b = 9; break; case "a": b = 10; break; case "b": b = 12; break; case "c": b = 13; break; case "d": b = 14; break; case "e": b = 15; break; case "f": b = 16; break; case "g": b = 17; break; case "h": b = 18; break; case "i": b = 19; break; case "j": b = 20; break; case "k": b = 21; break; case "l": b = 23; break; case "m": b = 24; break; case "n": b = 25; break; case "o": b = 26; break; case "p": b = 27; break; case "q": b = 28; break; case "r": b = 29; break; case "s": b = 30; break; case "t": b = 31; break; case "u": b = 32; break; case "v": b = 34; break; case "w": b = 35; break; case "x": b = 36; break; case "y": b = 37; break; case "z": b = 38; break; } c += Math.round(Math.pow(2, i)) * b; } if ((c % 11) % 10 != ContainerNo.substr(10, 1)) { return false; } else { return true; } }