具体的集装箱编号规则就自己搜索了,这里只贴出代码实现
这里是参考集装箱编号校验码规则(JavaScript版本)实现的go版本
import (
"math"
)
var mapofCode = map[string]int{
"0":0,
"1":1,
"2":2,
"3":3,
"4":4,
"5":5,
"6":6,
"7":7,
"8":8,
"9":9,
"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,
}
func checkDigit(containerNumber string) bool {
if len(containerNumber) != 11 {
return false
}
sum := 0
// 取前面4个字母对应的数字和前6个数字,进行计算
for i := 0; i < 10; i++ {
sum += mapofCode[string(containerNumber[i])] * int(math.Pow(2, float64(i)))
}
// 再对10取余是防止出现校验码为10的情况,假如校验码为10,则取0
checkDigit := sum % 11 % 10
checkCode, _ := strconv.Atoi(string(containerNumber[10]))
if checkDigit != checkCode {
return false
}
return true
}