计算 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 类型条码的校验和位数的主要内容,如果未能解决你的问题,请参考以下文章

条码类型code128是啥意思

code128条形码的开始停止字符是啥

检查最终字符串中的 ITF 或 Code 128 条码完整性

怎样用code128条码制作器获得电能表二维码

EAN-128和CODE-128条码一样吗?

Acumatica 和 code128 条码无法扫描