集裝箱編號校驗碼規則(JavaScript版本)

集裝箱編號校驗碼規則(JavaScript版本)

最近需要用到校驗集裝箱號是正確,網上搜了搜箱號的校驗規則,寫了份demo

貼上具體的計算方法, 參考點這裏
懶的點的可以看我複製粘貼然後整理的的部分

一、箱號編碼的構成

標準集裝箱箱號由11位編碼組成,包括三個部分:

1、第一部分由4位英文字母組成。

2、第二部分由6位數字組成。

3、第三部分爲校驗碼(Check Digit)由前4位字母和6位數字經過校驗規則運算得到,用於識別在校驗時是否發生錯誤。即第11位數字。

二、箱號的校驗規則

以CBHU3202732爲例

①首先第一部分四個字母分別取它們對應的數字

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

前四個字母分別對應,13、12、18、32

②把數字分別進行處理然後累加

處理方法 ==>> 第N位的箱號對應值乘以2^(N-1) (N=1,2,3………10
C對應13,並且是第一位,那麼就是 13*2^(1-1)= 13

B對應12,是第二位,那麼就是12*2^(2-1)= 24
H ==>>>> 72
U ==>>>> 256
然後到了第一個數字3 ==>>>> 3**2^(5-1)= 48
以此類推,一直到第十位計算完成,也就是第六個數字計算完成,然後把這些值累加,爲4061

③將累加和對11取模

4061對11取模就是2,也就是說我們的最後一個數字(校驗碼)應當是2

注意:對11取模後餘數可能爲兩位,如10,那麼我們就需要再次對10取模
所以我們可以先對11取模,再對10取模

三、代碼


let check = function (value) {
    let getNumber = new Map();
    let num = 10;
    // 生成字母與數字對照表
    for (let i = 0; i < 26; i++) {
        let word = String.fromCharCode((65 + i));
        // 對應碼取消了11的倍數,比如11,22,33,所以我們要排除掉
        if (num === 11 || num === 22 || num === 33) {
            num += 1;
        }
        getNumber.set(word, num);
        num += 1;
    }
    let sum = 0;
    // 取四個字母對應的數字,並進行計算
    for (let i = 0; i < 4; i++) {
        sum += getNumber.get(value[i]) * Math.pow(2, i);
    }
    // 對前6個數字進行計算
    for (let i = 4; i < 10; i++) {
        sum += value[i] * Math.pow(2, i);
    }
    console.log(sum);
    // 再對10取餘是防止出現校驗碼爲10的情況,假如校驗碼爲10,則取0
    checkDigit = sum % 11 % 10;
    // 判斷校驗碼是否與最後一位數字相等
    if (checkDigit === Number(value[10])) {
        console.log('校驗通過')
        return true;
    } else {
        console.log('校驗失敗')
        return false;
    }

};
const num = 'CBHU3202732';
check(num)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章