網路城邦
上一篇 回創作列表 下一篇  字體:
即使貨櫃檢核碼正確,也不保證辨識的答案是對的!
2024/09/06 11:15:02瀏覽337|回應0|推薦5

貨櫃號碼是由四個英文字母與七個數字組成的,英文字母代表的是貨運公司的註冊碼,譬如長榮海運等等,七個數字的前六碼是序號,就是該貨運公司的第幾號貨櫃,最後一碼是所謂的檢核碼,用來檢查前面十個英數字(也就是貨櫃的身分證號碼)有沒有被看錯或寫錯用的!規則如下:

首先前面四碼的英文字必須轉換為數字才能做計算,轉換數字如上表 所示,接下來計算步驟如下:

Step1.將貨櫃碼前十碼由左到右依序乘上 2n次方(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 結果取整數為 587587×11 = 6457

Step4. Step1-Step3 = 6457-6457= 0

最後得到 0 這個數字,此數字與檢查碼相同,就表示此貨櫃碼通過檢核,「應該」是正確的,但其實並不是百分之百可靠!我做了很多貨櫃碼的影像辨識,發現有極少數辨識結果明明是錯的,檢核碼顯示卻是對的?讓我以為自己的程式寫錯了?相當沮喪兼緊張!

但是很詭異啊?絕大多數時候這個機制都是可靠的,程式如果出錯,應該會錯得一蹋糊塗,怎麼檢核都是錯的!算是考數學的證明題吧?結果我可以證明這個檢核公式真的有漏洞!

大家可以看上表的G數字代碼是17Q的代碼是28,兩者剛好差11,所以按照上述檢核碼公式以11的倍數做計算,分別將GQ代入為第一個字,算出來的檢核碼都是「0」!所以如果你的辨識軟體將G錯誤辨識成Q,檢核碼就不會發現有錯!其他代碼剛好相差11的英文字母交叉誤認時情況也是相同的!如A與K、B與L、C與M...等等。

這個證明題做出來我的焦慮感就消除了!也順便分享給各位讀者,雖然出錯機率很低,但確實有漏洞會讓檢核碼誤判,讓錯誤答案躲過檢核碼的檢查機制的!當然這只是貨櫃碼的檢核公式,其他地方如身分證號碼的檢核碼公式都未必一樣,設計得好應該是可以更精準的!

( 心情隨筆工作職場 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=yccsonar&aid=181002226