设置宽度前必须支持条形码条数
首先我们要了解code128的特性

Code128 条码介绍

概述

Code128 是一种高密度、可变长度的线性条码符号体系,广泛应用于物流、零售、医疗和工业领域。它支持完整的 ASCII 字符集,包括数字、字母和特殊符号,具有较高的数据编码效率。

特点

  1. 高密度编码:相比其他条码(如 Code39),Code128 能在更小的空间内存储更多信息。

  2. 多字符集支持:包含三个子集(A、B、C),可灵活编码数字、字母及控制字符。

  3. 校验机制:内置校验位,提高数据读取的准确性。

  4. 广泛应用:适用于运输标签、产品标识、库存管理等场景。

子集类型

  • Code128A:支持 ASCII 控制字符、数字和大写字母。

  • Code128B:支持数字、大小写字母及常用符号。

  • Code128C:高效编码纯数字数据(两位数字压缩为一个条码字符)。

优势

  • 兼容性强,可被多数扫描设备识别。

  • 支持动态切换子集,优化编码效率。

  • 符合国际标准(ISO/IEC 15417),适合全球化应用。

Code128 因其灵活性和高可靠性,成为现代自动识别技术的首选条码之一。

计算条形码条数

function estimateModulesForJsBarcode(value) {
  let modules = 0;

  // Start: assume Code128C if possible
  let i = 0;
  if (/^\d{4,}$/.test(value)) {
    // Code128C for even-length numeric
    while (i < value.length - 1) {
      if (/\d\d/.test(value.substring(i, i + 2))) {
        modules += 11; // one Code C character
        i += 2;
      } else {
        break;
      }
    }
  }

  // Fallback to Code128B for remaining characters
  while (i < value.length) {
    modules += 11; // each char in B mode
    i++;
  }

  // Add start + check + stop modules
  return modules + 11 + 11 + 13;
}

计算宽度

设置条形码的每条宽度,假设为2.

estimateModulesForJsBarcode('testcode') * 2