问题描述
我必须在 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。除了每个变体的起始字符的值之外,对校验和的值没有其他影响。