校验码是由编码方案决定的,所以在代码中是否使用校验码和条码基本无关,但商品条码除外。今天给大家介绍几种校验码的计算方法。

一、商品条码:

商品条码中需要计算校验码的有:EAN-8(8位),EAN-13(13位),UCC(UPC-A)(12位),GTIN-14(ITF-14)(14位),GLN(13位),SSCC(18位)等。它们虽然位数不同,但计算校验码的方法完全相同。

1、包含校验码的所有数字从右向左编号,分别为1,2,3......18位;

2、从第2位开始,所有偶数位的权数为3,从第3位开始,所有奇数位的权数为1;
3、将对应位置的代码数字与权数相乘,参见下图(以SSCC的18位数字为例);

4、将所有乘积相加求和;(结果为109)

5、对第4步的和,求MOD 10运算(将和109除以10,取其余数9);

6、如果余数为0,则校验码为0,否则,用10减去余数的差即为校验码。(上例中校验码为1)

二、身份证校验码:
身份证校验码的计算比较复杂一些,参见下图:

1、自右向左为身份证号编号1-18;

2、确定各位数的权数,权数的计算公式为 2^(i-1) mod 11i—位数

如第3位的权数为2^(3-1)=2^2=4, 4除以11,商0余4,则权数为4。再如第5位的权数为2^(5-1)=2^4=16,16除以11,商1余5,则权数为5。

3、将权数与对应的身份证号数字相乘;

4、将所有乘积相加求和;(示例中的184)

5、将第4步的结果除以11,求余数(示例中的8)

6、从下表的R值中找到第5步的结果,对应的C值即为校验码。(示例中8对应的是4)

三、CODE-128码的校验符:

CODE-128码的校验符不会出现在数据中,也不用读出,这里仅介绍一下计算方法,实际使用中都是由条码软件自动生成的。由于CODE-128码可以表示字母、符号、控制符,而这些字符不能直接参与计算,所以要为每个字符分配一个码值。各个字符的码值可以参阅CODE-128码的标准文件。

1、首先为字符串编制条码;

2、从起始符开始,自左向右为每个条码字符编号;

3、为每一个字符分配权数,起始符和第一个字符的权数为1,以后依次增加;

4、每个字符的权数与码值相乘;

5、所有乘积求和;

6、第5步的结果除以103求余数;

7、码值等于余数的字符即为校验符。见下图:

EAN-128码的校验符的计算与此相同。

从以上三个例子可以看出,几乎所有的校验码的计算都是由以下步骤计算出来的:

1、为代码中的每一位数字规定序号;

2、给每一位代码分配一个权数;

3、权数与对应的代码相乘;

4、将所有的乘积相加;

5、对和进行MOD(求余数)运算;

6、对结果进行再处理得到校验码。

各种条码的校验码算法(EAN13,COD128,GTIN,UCC等)的更多相关文章

  1. 公民身份号码校验码算法(C#版)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. Android MD5校验码的生成与算法实现

    在Java中,java.security.MessageDigest (rt.jar中)已经定义了 MD5 的计算,所以我们只需要简单地调用即可得到 MD5 的128 位整数.然后将此 128 位计 ...

  3. PHP CRC16 校验码的算法怎么使用

    PHP CRC16 校验码的算法如何使用最近用到CRC16, 我现在就是要把 010301180001 算出CRC16的校验码,通过其他工具,可以得到 校验码是 05F1 最后完整的代码就是 0103 ...

  4. MOD 10,11算法(GB/T 17710-1999 数据处理 校验码系统 ),使用javascript实现

    原文链接:http://chunniu.info/p/74.html GB/T 17710-1999 数据处理 校验码系统 ,便于使用,使用javascript做了一个页面 [php] var NUM ...

  5. 在线生成条形码的解决方案(39码、EAN-13)

    感谢博主:转自:http://xoyozo.eyuyao.com/blog/barcode.html public partial class ReceivablesFormView : System ...

  6. 如何使用Delphi编写Modbus RTU CRC16的校验码

    在工业控制中,Modbus RTU CRC16的校验码用的比较广泛,包括本人富士产品中,PC与伺服电机以及PC与VP系列的变频器的Modbus RTU通讯中都使用到了CRC16.     而对CRC1 ...

  7. Java获取字符串的CRC8校验码(由C程序的代码修改为了Java代码)

    CRC8算法请百度,我也不懂,这里只是把自己运行成功的结构贴出来了.方法CRC8_Tab这里没有处理,因为我的程序中没有用到. package com.crc; public class CCRC8_ ...

  8. ISO 7064:1983.MOD11-2校验码计算法 : (身份证校验码-18位)

    /* 假设某一17位数字是 17位数字 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 加权因子 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 计算17位 ...

  9. CLion注冊码算法逆向分析实录(纯研究)

    声明 CLion程序版权为jetBrains全部.注冊码授权为jetBrains及其付费用户全部,本篇仅仅从兴趣出发,研究其注冊码生成算法. 不会释出不论什么完整的源码. 网上查了下.已有注冊机,所以 ...

随机推荐

  1. POJ 3889 Fractal Streets(逼近模拟)

    $ POJ~3889~Fractal~Streets $(模拟) $ solution: $ 这是一道淳朴的模拟题,最近发现这种题目总是可以用逼近法,就再来练练手吧. 首先对于每个编号我们可以用逼近法 ...

  2. pytorch 指定GPU训练

    # 1: torch.cuda.set_device(1) # 2: device = torch.device("cuda:1") # 3:(官方推荐)import os os. ...

  3. Rabbit MQ项目例子

    地址链接: https://blog.csdn.net/cartoonmiao/article/details/51920766

  4. -bash: findstr: command not found 问题解决

    今天有个任务,需要获取apk的版本信息,百度之后说是之下下面的命令就行 adb shell dumpsys package com.baidu.searchbox | findstr versionC ...

  5. nyoj 119: 士兵杀敌(三) 【RMQ模板】

    题目链接 贴个板子.. #include<bits/stdc++.h> using namespace std; int n,q; ],d1[][],d2[][]; void RMQ_in ...

  6. python学习笔记(十三)处理时间模块

    import time time.sleep(2)#等待几秒 时间的三种表现方式: 1.格式化好的时间 2018-1-14 16:12 2.时间戳 是从unix元年到现在所有的秒数 3.时间元组 想时 ...

  7. 如何在Web页面里面使用高拍仪扫描上传图像

    问题: 在网页上,客户端访问的时候,可以扫描图象(通过扫描仪),并放到网页上,上传到服务器,如何实现?就是提供扫描仪的驱动程序,并使用扫描仪来扫描图象 ,有没有此类的ActiveX控件 回复: 目前大 ...

  8. [CSP-S模拟测试]:Travel(贪心+构造)

    题目描述 给定一个长度为$n$的格子序列$x_1,x_2,...,x_n$.每一次$Lyra$可以选择向左跳到任意一个还没到过的位置,也可以向右跳到任意一个还没到过的位置.如果现在$Lyra$在格子$ ...

  9. python两个装饰器的运算顺序

    #装饰顺序按靠近函数顺序执行,调用时由外而内,执行顺序和装饰顺序相反. def makebold(func): def wrap(): return "<i>"+fun ...

  10. 【SpringBoot】 项目中运用的一些技巧,mybatis-plus 自动编译等(持续更新)

    前言 本文将总结项目中用到的一些springboot 的技巧,持续更新. Mybatis-Plus 的运用 使用原因: 主要是节省了Mapper层的编写,通过继承BaseMapper可以直接调用通用的 ...