计算 Code128

问题描述

我必须在 C# 中为 Code128 类型的条形码计算校验和数字,类似于这篇文章https://support.idautomation.com/Code-128/Manually-calculate-check-digit-for-Code-128/_1025

我阅读了此页面,其中提供了一些计算示例:https://www.barcodefaq.com/1d/code-128/#CalculationExamples

它说明了算法的基本步骤:

  • 参考字符集表获取起始字符和所有数据字符的值。
  • 为每个数据字符分配一个权重(不是起始字符,只是数据字符。)权重从 1 开始,每个数据字符增加 1。
  • 将字符值乘以数据字符的权重。
  • 包括起始字符在内的这些相加,除以 103 得到余数。
  • 使用字符集表定位具有余数值的字符,以此作为校验字符。

我大致理解了这个描述,但我不确定如何实现“参考字符集表以获取...字符的值”部分

可能的问题是:如何根据Code128字符集的版本/代码集A、B或C编写代码,根据我是否想要校验和来获取某个字符的值? https://www.barcodefaq.com/1d/code-128/#Code-128CharacterSet

我是否必须使用代码中的字符集重新创建表(作为一个大字典?)或者我可以执行一些简单的计算来获取 Code128 版本/代码集 A、B 或c?

我应该如何实现这些方法

private uint GetValueForCode128Character_CodeSetA(char character)
{
}

private uint GetValueForCode128Character_CodeSetB(char character)
{
}


private uint GetValueForCode128Character_CodeSetC(char character)
{
}

我还阅读了这个问题的答案:Is this code for calculating Code128 barcode check digits correct?

但这似乎是指一般的算法(我理解),而不是根据 Code128 代码集 A、B 或 A 为特定字符获取该值。

感谢您抽出宝贵时间。

解决方法

您始终需要对 Code 128 变体(A、B、C)中的每一个使用 the table on this page

Code 128A 的起始字符值为 103,Code 128B 的起始字符值为 104,Code 128C 的起始字符值为 105。所有校验和计算均独立于条码是否为 Code 128 A 、B 或 C。除了每个变体的起始字符的值之外,对校验和的值没有其他影响。