当前位置: 首页 > news >正文

js集装箱号校验算法

集装箱号校验算法

集装箱号通常由11位字符组成,包括4位字母(前三位为箱主代码,第四位为设备识别码U/J/Z)、6位数字和1位校验码。校验算法基于ISO 6346标准,具体步骤如下:

计算字母对应值

将前4位字母转换为数字,转换规则为:A=10,B=12,C=13,...,K=21,L=23,...,Z=38(跳过11、22、33等重复数字)。每个字母对应值乘以2的(位置索引-1)次方。

字母位置索引从0开始计算:

  • 第1位字母:值 × 1 (2⁰)
  • 第2位字母:值 × 2 (2¹)
  • 第3位字母:值 × 4 (2²)
  • 第4位字母:值 × 8 (2³)
计算数字部分值

中间6位数字直接拼接为数字,每位数字乘以2的(位置索引+4)次方(因字母部分已占用前4位)。

校验码计算
  1. 将字母和数字部分的所有乘积相加得到总和
  2. 总和除以11取余数
  3. 余数为10时校验码为0,否则校验码即为余数本身

JavaScript实现代码

function validateContainerNumber(containerNum) {if (!/^[A-Z]{4}\d{6}\d$/.test(containerNum)) {return false; // 基本格式校验}const charMap = {'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};let sum = 0;// 处理字母部分for (let i = 0; i < 4; i++) {const char = containerNum.charAt(i);sum += charMap[char] * Math.pow(2, i);}// 处理数字部分for (let i = 4; i < 10; i++) {const digit = parseInt(containerNum.charAt(i), 10);sum += digit * Math.pow(2, i);}// 计算校验码const checkDigit = sum % 11;const actualCheckDigit = checkDigit === 10 ? 0 : checkDigit;return actualCheckDigit === parseInt(containerNum.charAt(10), 10);
}

使用示例

console.log(validateContainerNumber("TEXU1234562")); // 返回true
console.log(validateContainerNumber("APZU1234563")); // 返回false

注意事项

  1. 输入字符串必须为11位,前4位字母后7位数字
  2. 第四位字母通常为U(常规集装箱)、J(可拆卸设备)或Z(拖车)
  3. 实际应用中建议先去除空格和连字符等分隔符
  4. 该方法不验证箱主代码是否真实存在,仅校验格式和计算规则

该算法广泛应用于物流、货运和海关系统中,确保集装箱编号的有效性。

http://www.dtcms.com/a/394014.html

相关文章:

  • 【机器学习】最优传输(OT)和 KL散度的区别
  • 推荐一个随机生成图片的网站: Lorem Picsum
  • APE自动化提示词工程
  • 探究某黄鱼x-sign生成算法——终极篇
  • 霍尔传感器安装错位下的FOC控制:线性插值与锁相环(PLL)算法的抉择
  • FFmpeg 深入精讲(三)FFmpeg 中级开发
  • AI驱动下的蛋白质设计
  • ARM基本汇编操作指令
  • 电商搜索 API 的优化与性能提升:从瓶颈突破到体验升级
  • 使用DeepSeek辅助测试一个rust编写的postgresql协议工具包convergence
  • 【00】EPGF 架构搭建教程之 总揽篇
  • 深度剖析 vector 底层原理:从手写实现到核心技术点全解析
  • 嵌入式开发学习日志29——stm32之定时器中断
  • 通俗范畴论17.3 向量空间的对偶与双对偶
  • 表格 表头增加悬浮提示内容
  • emacs段落重排快捷键
  • 第九届人单合一模式引领论坛举行 构建AI时代的智能交互生态
  • 不用搜驱动!惠普官方工具:自动适配,坏了直接重装
  • JAVA八股文——java虚拟机栈
  • 华为MindSpeed 训练加速库:架构解析
  • Java的Stream实现对list实用操作【持续更新】
  • 【AI智能体】Dify集成 Echarts实现数据报表展示实战详解
  • 【01】EPGF 架构搭建教程之 Anaconda 安装指南
  • 深度学习周报(9.15~9.21)
  • MCP实战:使用 LangGraph 和 MCP 协议无缝集成外部工具
  • 【嵌入式总线通信协议库】
  • 06.【Linux系统编程】命令行参数(给main传参)、环境变量(概念+使用)、进程的虚拟地址空间(用户实际访问的空间)
  • esp32墨水屏天气预测学习
  • LabelImg 操作指南:提高标注速度
  • redhat7.2迁移ssh免密到麒麟v10