计算 Code128 类型条码的校验和位数
Posted
技术标签:
【中文标题】计算 Code128 类型条码的校验和位数【英文标题】:Calculate checksum digit for a barcode of type Code128 【发布时间】:2021-04-29 13:18:21 【问题描述】:我必须在 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 开始,每个数据字符增加一个。 将字符值乘以数据字符的权重。 将包括起始字符在内的这些加在一起,除以 103 并获得余数。 使用字符集表查找具有余数的字符,将其用作校验字符。我大致理解了这个描述,但我不确定如何实现“引用字符集表以获取...字符的值”部分
可能的问题是:如何根据我是否需要根据 Code128 字符集的版本/代码集 A、B 或 C 的校验和来编写获取某个字符的值的代码? https://www.barcodefaq.com/1d/code-128/#Code-128CharacterSet
我是否必须使用代码中的字符集重新创建表(作为一个大字典?)或者我可以执行一些简单的计算来获取 Code128 版本/CodeSet 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 为某些字符获取该值。
感谢您的宝贵时间。
【问题讨论】:
【参考方案1】:对于 Code 128 变体(A、B、C)中的每一个,您始终需要使用 the table on this page。
Code 128A 的起始字符的值为 103,Code 128B 的起始字符的值为 104,Code 128C 的起始字符的值为 105。所有校验和计算的执行与条形码是否为 Code 128 A 无关、B 或 C。除了每个变体的起始字符的值之外,校验和的值没有其他贡献。
【讨论】:
以上是关于计算 Code128 类型条码的校验和位数的主要内容,如果未能解决你的问题,请参考以下文章