集装箱箱号验证算法(C#版)

集装箱号由4位公司代码和7位数字组成(如CBHU3202732),其中第七位数字就是校验码。首先将公司代码转换为数字,去掉11及其倍数,连加除以11,其余数为校验位。 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  

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

//判断箱号正误
private bool isRight(string daima, string xianghao)
{
try
{
//获取代码的每位计算值
string char1 = daima.Substring(0, 1);
int i1 = changevalue(char1);
string char2 = daima.Substring(1, 1);
int i2 = changevalue(char2);
string char3 = daima.Substring(2, 1);
int i3 = changevalue(char3);
string char4 = daima.Substring(3, 1);
int i4 = changevalue(char4);
//获取7位箱号的计算值
int int1 = int.Parse(xianghao.Substring(0, 1));
int int2 = int.Parse(xianghao.Substring(1, 1));
int int3 = int.Parse(xianghao.Substring(2, 1));
int int4 = int.Parse(xianghao.Substring(3, 1));
int int5 = int.Parse(xianghao.Substring(4, 1));
int int6 = int.Parse(xianghao.Substring(5, 1));
int int7 = int.Parse(xianghao.Substring(6, 1));
//计算值求和并对11取余,和第七位箱号对比
int sum = i1 + 2 * i2 + 4 * i3 + 8 * i4 + 16 * int1 + 32 * int2 + 64 * int3 + 128 * int4 + 256 * int5 + 512 * int6;
int result = sum % 11;

if (result==int7||result-int7==10)
{
return true;
}
else
{
return false;
}
}
catch (Exception)
{
return false;
throw;
}
}

//获取代码的计算数值
private int changevalue(string str)
{
if ((str == "a") || (str == "A"))
return 10;
else if ((str == "b") || (str == "B"))
return 12;
else if ((str == "c") || (str == "C"))
return 13;
else if ((str == "d") || (str == "D"))
return 14;
else if ((str == "e") || (str == "E"))
return 15;
else if ((str == "f") || (str == "F"))
return 16;
else if ((str == "g") || (str == "G"))
return 17;
else if ((str == "h") || (str == "H"))
return 18;
else if ((str == "i") || (str == "I"))
return 19;
else if ((str == "j") || (str == "J"))
return 20;
else if ((str == "k") || (str == "K"))
return 21;
else if ((str == "l") || (str == "L"))
return 23;
else if ((str == "m") || (str == "M"))
return 24;
else if ((str == "n") || (str == "N"))
return 25;
else if ((str == "o") || (str == "O"))
return 26;
else if ((str == "p") || (str == "P"))
return 27;
else if ((str == "q") || (str == "Q"))
return 28;
else if ((str == "r") || (str == "R"))
return 29;
else if ((str == "s") || (str == "S"))
return 30;
else if ((str == "t") || (str == "T"))
return 31;
else if ((str == "u") || (str == "U"))
return 32;
else if ((str == "v") || (str == "V"))
return 34;
else if ((str == "w") || (str == "W"))
return 35;
else if ((str == "x") || (str == "X"))
return 36;
else if ((str == "y") || (str == "Y"))
return 37;
else if ((str == "z") || (str == "Z"))
return 38;
else
return -1000;
}

时间: 2024-11-05 22:48:27

集装箱箱号验证算法(C#版)的相关文章

EAS常用工具类

1 package com.kingdee.eas.custom; 2 import java.io.File; 3 import java.io.FileNotFoundException; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.InputStream; 7 import java.io.PrintWriter; 8 import java.io.StringWrite

Oracle通过一个字段的值将一条记录拆分为多条记录

前言 之前遇到了一次这样的需求,当时没有记录,这一次又赶上了,简单的记录一下. 本文个人拙见,若有出入,请指出--来自菜的颤抖 场景 表A中存放了集装箱的信息,一个集装箱一条记录,表B中存放了对于集装箱操作的指令,一条指令包括多个集装箱箱号,通过分号;切割(TCIU2347687;XUTR3546865),现在的需求是,对于已经在指令表B中的集装箱,在查询表A时需要过滤掉. 很容易想到的是not in, 然而分号分割. 其次,not like,然而[Err] ORA-01427: 单行子查询返回

人脸验证算法Joint Bayesian详解及实现(Python版)

人脸验证算法Joint Bayesian详解及实现(Python版) Tags: JointBayesian DeepLearning Python 本博客仅为作者记录笔记之用,不免有很多细节不对之处. 还望各位看官能够见谅,欢迎批评指正. 博客虽水,然亦博主之苦劳也. 如对代码有兴趣的请移步我的 Github. 如需转载,请附上本文链接,不甚感激!  http://blog.csdn.net/cyh_24/article/details/49059475 Bayesian Face Revis

【《zw版·Halcon与delphi系列原创教程》 zw_halcon人脸识别

[<zw版·Halcon与delphi系列原创教程> zw_halcon人脸识别 经常有用户问,halcon人脸识别方面的问题. 可能是cv在人脸识别.车牌识别方面的投入太多了. 其实,人脸识别.车牌识别,只是图像处理,机器视觉一个很小的领域,对于halcon而言,非常简单. 人脸识别.车牌识别,ocr.汉字识别原理.算法都差不多,自己建库就可以了. halcon与cv不同,面对的是工业(超市)流水线,建库基本是全自动的,扫描一下,和二维码差不多,就自动生成了相关的模型库. 非常简单,halc

[Javascript] 用JS校验集装箱代码。

  function VerifyContainerCode(strCode) { var Charcode = "0123456789A?BCDEFGHIJK?LMNOPQRSTU?VWXYZ"; if (strCode.length != 11) return false; var result = true; var num = 0; for (var i = 0; i < 10; i++) { var idx = Charcode.indexOf(strCode[i]);

&#65279;&#65279;iPhone6plus 的 iOS 11 GM和正式版安装包的 md5一模一样

同上:chens-MacBook-Air:~ chen$ md5 /Users/chen/Downloads/iPhone_5.5_11.0_15A372_Restore.ipsw MD5 (/Users/chen/Downloads/iPhone_5.5_11.0_15A372_Restore.ipsw) = 0473f217af0f20e138649385de6db6c7GM 版本的 md5 chens-MacBook-Air:~ chen$ md5 /Users/chen/Download

[java问题记录]IntelliJ Idea编译报错:javacTask: 源发行版 1.8 需要目标发行版 1.8

原因:不详,可能是升级idea造成的,之前打过一个升级补丁: 错误信息: Information:java: javacTask: 源发行版 1.8 需要目标发行版 1.8Information:2017/1/24 11:27 - Compilation completed with 1 error and 0 warnings in 5s 873msInformation:java: Errors occurred while compiling module 'java-lessions'I

【Linux】 JDK安装及配置 (tar.gz版)

安装环境 Linux(Ubuntu 版) JDK安装 tar.gz为解压后就可以使用的版本,这里我将使用jdk-8u65-linux-x64.tar.gz版,安装到/usr/java/下 步骤一 将文件jdk-8u65-linux-x64.gz移动到/usr/java/下,并解压: tar -xzvf  jdk-8u65-linux-x64.gz 步骤二 在/etc/profile文件中,配置环境变量,是JDK在所有用户中生效: 打开/etc/profile文件 vi /etc/profile

微控工具xp模块-开发版[微信(wechat)二次开发模块]

http://repo.xposed.info/module/com.easy.wtool 微控工具xp模块-开发版[微信(wechat)二次开发模块] 基于xposed框架的微信二次开发模块,方便开发者用微信做一些扩展功能(如微信群发.多群直播等...) 目前支持功能: 发文本消息 发图片消息 发语音消息 发视频消息 获取微信好友列表 群列表 支持群发消息 支持消息转发(目前支持文本.图片.语音.视频.图文消息转发) 群管理功能(建群.加人.踢人.设置公告.改群名.退群.解散群) [注:本模块