java校验集装箱柜号是否正确

java校验集装箱柜号是否正确

开门见山地说在某些需求中是要校验集装箱的柜号,而如果了解集装箱柜号的朋友会发现,集装箱柜号的校验你可能读都读不明白,怎么去写校验。各位,莫慌,接下来我将给大家介绍集装箱柜号的校验代码,亲测有效!

 //校验柜号是否正确
    public static boolean verifyCntrCode(String strCode) {
        boolean result = true;
        try {
            if (strCode.length() != 11) {
                return false;
            }
            char[] codeChars = strCode.toCharArray();
            String charCode = "0123456789A?BCDEFGHIJK?LMNOPQRSTU?VWXYZ";
            int num = 0;
            for (int i = 0; i < 10; i++) {
                int idx = charCode.indexOf(codeChars[i]);
                if (idx == -1 || charCode.charAt(idx)=='?') {
                    return false;
                }
                idx =  (int) (idx * Math.pow(2, i));
                num += idx;
            }
            num = (num % 11) % 10;
            result = Integer.parseInt(String.valueOf(codeChars[10])) == num;
        }catch (Exception e){
            result = false;
        }
        return  result;
    }

没错以上就是校验集装箱柜号的代码,下面再上一下百度下来的集装箱柜号的规则:

标准箱号构成基本概念:采用ISO6346(1995)标准。 标准集装箱箱号由11位编码组成,包括三个部分:
1、第一部分由4位英文字母组成。前三位代码 (Owner Code) 主要说明箱主、经营人,第四位代码说明集装箱的类型。列如CBHU
开头的标准集装箱是表明箱主和经营人为中远集运。
2、 第二部分由6位数字组成。是箱体注册码(Registration Code),用于一个集装箱箱体持有的唯一标识。
3、 第三部分为校验码(Check Digit)由前4位字母和6位数字经过校验规则运算得到,用于识别在校验时是否发生错误。即第11位数字。根据校验规则箱号的每个字母和数字都有一个运算的对应值。箱号的前10位字母和数字的对应值从0到Z对应数值为10到38,11、22、33不能对11取模数,所以要除去
第N位的箱号对应值再分别乘以2的N-1次方 (N=1,2,3…………10) 例如:箱号为CBHU3202732的集装箱它的第1位代码为C,它的代码值=代码的对应值×2的0次方 =13×1=13。 类推第2位代码为B 它的代码值=代码的对应值×2的1次方 =12×2=24 以此类推得到箱号前10位代码的代码值。 将前10位的代码值乘积累加后对11取模
箱号为CBHU3202732的集装箱前10位箱号的代码累加值=4061,取11的模后为2,就是这个箱号第11位的识别码的数值。

希望以上内容能帮到大家!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LeeBrook0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值