字體:小 中 大 | |
|
|
2024/09/06 11:15:02瀏覽337|回應0|推薦5 | |
貨櫃號碼是由四個英文字母與七個數字組成的,英文字母代表的是貨運公司的註冊碼,譬如長榮海運等等,七個數字的前六碼是序號,就是該貨運公司的第幾號貨櫃,最後一碼是所謂的檢核碼,用來檢查前面十個英數字(也就是貨櫃的身分證號碼)有沒有被看錯或寫錯用的!規則如下: 首先前面四碼的英文字必須轉換為數字才能做計算,轉換數字如上表 所示,接下來計算步驟如下: Step1.將貨櫃碼前十碼由左到右依序乘上 2的n次方(n=0~9)並相加。 Step2.將 Step1 得到的結果除以 11。 Step3.將 Step2 得到的結果取整數部分,然後乘上 11。 Step4.將 Step1 的結果減去 Step3 的結果,最後得到的數字就是檢查碼。 以貨櫃碼“GSTU3601680”為範例,計算步驟如下: Step1. 17×20+30×21+31×22+32×23+3×24+6×25+0×26+1×27+6×28+8×29 = 17+60+124+256+48+192+0+128+1536+4096 = 6457 Step2. 6457/11 = 587 Step3. Step2 結果取整數為 587,587×11 = 6457 Step4. Step1-Step3 = 6457-6457= 0 最後得到 0 這個數字,此數字與檢查碼相同,就表示此貨櫃碼通過檢核,「應該」是正確的,但其實並不是百分之百可靠!我做了很多貨櫃碼的影像辨識,發現有極少數辨識結果明明是錯的,檢核碼顯示卻是對的?讓我以為自己的程式寫錯了?相當沮喪兼緊張! 但是很詭異啊?絕大多數時候這個機制都是可靠的,程式如果出錯,應該會錯得一蹋糊塗,怎麼檢核都是錯的!算是考數學的證明題吧?結果我可以證明這個檢核公式真的有漏洞! 大家可以看上表的G數字代碼是17,Q的代碼是28,兩者剛好差11,所以按照上述檢核碼公式以11的倍數做計算,分別將G與Q代入為第一個字,算出來的檢核碼都是「0」!所以如果你的辨識軟體將G錯誤辨識成Q,檢核碼就不會發現有錯!其他代碼剛好相差11的英文字母交叉誤認時情況也是相同的!如A與K、B與L、C與M...等等。 這個證明題做出來我的焦慮感就消除了!也順便分享給各位讀者,雖然出錯機率很低,但確實有漏洞會讓檢核碼誤判,讓錯誤答案躲過檢核碼的檢查機制的!當然這只是貨櫃碼的檢核公式,其他地方如身分證號碼的檢核碼公式都未必一樣,設計得好應該是可以更精準的! |
|
( 心情隨筆|工作職場 ) |