计算EAN-13校验位
来源:互联网 发布:明天,妈妈不在 知乎 编辑:程序博客网 时间:2024/05/17 09:27
EAN-13符号被编码前,软件必须计算出正确的校验码位,校验码位也将出现在条码中。校验码位是数制、厂商码和产品码的每个数位的数值的加权和对10取模得到的。In simple English,那意味着我们必须为条码计算校验码值。首先,我们取出值得最右边一个数位并将它作为一个“奇数”字符。然后,我们从右向左移动,交替出现奇数和偶数。接下来,我们将所有偶数位置上的数值求和,将所有奇数位置上的数值乘以3后求和。
计算校验位的步骤如下:
1. 将最右边一个数位作为“奇数”位,从右向左为每个字符指定奇数/偶数位。
2. 对所有奇数位上的数值求和,将结构乘以3。
3. 对所有偶数位上的数值求和。
4. 对第2步和第3步计算的结果求和。
5. 校验位的数字加上用第4步计算的总和数应该能够被10整除。
6. 如果第4步计算的总和数能够被10整除,校验位就是“
通过一个例子可以很容易理解。我们要计算条码0075678164125的校验码位。事实上,我们知道这个条码的最右一位数字“5”就是校验码位。这就是说这个条码自身的“信息”实际上是007567816412(我们是把条码的最后一个字符去掉了的)。其中,“00”是数制,“75678”是厂商码,“16412”是产品码。因此,我们必须为消息007567816412计算一个校验位
为每个数位计算加权和,我们可以得到0+0+7+15+6+21+8+3+6+12+1+6=85。这就是校验码值。然而,只有一个校验码位。校验位的值必须能够使得校验码的值加上校验位的值能够被10整除。在这种情况下,在85之后能被10整除的数字是90。我们需要给85加上5才能得到90,因此,我们的校验位就是“5”。我们为原来的条码消息(007567816412)追加校验码位(5),就得到了最终的0075678164125。
将这个最终得到的条码和我们原来的条码比较,我们发现我们计算出来的校验码位事实上和原来条码上的校验码位是相同的。因此,我们的计算是正确的。
Note:可能你要问在EAN-13符号中,为什么第一个字符被作为了“偶数”位而第二个字符被作为了“奇数”位。逻辑上认为第一个字符应该被作为“奇数”而第二个字符应该被作为“偶数”。别担心,这里面有个合理的解释。
这样做是为了保持和原来UPC-A格式的兼容性。原来的UPC-A符号仅有单一的一位数值,因此,EAN-13符号中的第二个字符就应该是UPC-A符号中的第一个字符,因此,也就成了“奇数”位。为了不改写和混淆规范,当定义EAN-13标准的时候,他们只是在前面插入了这个新的前导字符并将它称为“偶数”位,这样就和现有的UPC-A条码保持了兼容性,在某种程度上,也兼容了现有的UPC-A的文档
计算方法:
If IsNumeric(Mid(Trim(Text2(1).text), 1, 4)) = True Then
txm = Format(Mid(Trim(Text2(1).text), 1, 4), "0000") '货号四位
Else
txm = Format(Mid(Trim(Text2(0).text), 5, 4), "0000") '编号四位
End If
txm = txm & Format(Mid(Year(Date), 4, 1), "0") '年末位
txm = txm & Format(Month(Date), "00") '月两位
txm = txm & Format(Day(Date), "00") '日两位
txm = txm & Format(CInt(Text2(4).text), "000") '基准价三位
' 计算效验码 EAN-13 规则
Num = 0
For i = 1 To 11 Step 2
Num = Num + CInt(Mid(txm, i, 1))
Next i
For i = 2 To 12 Step 2
Num = Num + CInt(Mid(txm, i, 1)) * 3
Next i
Text1.text = txm & (10 - Num Mod 10)
- 计算EAN-13校验位
- 计算EAN-13商品条码校验位的SQL函数
- Barcode-EAN 13码生成校验位
- EAN-13编码的校验位计算方法,以JS为例
- EAN码校验位的计算方法
- 计算验证条形码(Ean-13码)
- EAN-13
- IMEI/MEID校验位计算
- IMEI/MEID校验位计算
- EAN-13条码
- EAN-13 条码生成
- EAN-13条码算法
- Luhn算法计算银联卡卡号校验位
- python实现身份证校验位计算
- python实现身份证校验位计算
- 计算IMEI号的校验位
- 身份证末尾校验位计算OC
- EAN-13条形码编码规则
- 使用Httpservice和Webservice来和Flex进行通讯
- 使用TinyXML的注意事项
- 为什么XML文档的格式是否规范如此重要呢?为何W3C规定XML处理器不应尝试修复不规范的文档
- 算符优先分析为何不支持单目负号
- linux 技巧:使用 screen 管理你的远程会话
- 计算EAN-13校验位
- S3C2440Camera驱动调试笔记
- 在vs2005中集成QT4.4.3的编译方式
- 续上一篇文章,用栈来实现:按照用户输入的rule,经过并、交、差运算后,输出字符串结果。
- 字符串转换_BSTR/LPSTR/LPWSTR/Char
- Java_JDK环境变量的设置
- AD-hoc测试介绍
- psptoolchain下载地址和安装方法
- IE 里面的activeX控件的打印预览问题