末位为校验码

/** 
   EAN码校验位的计算方法 
   从代码位置序号2开始,所有偶数位的数字代码求和为a。 
   将上步中的a乘以3为a。 
   从代码位置序号3开始,所有奇数位的数字代码求和为b。 
   将a和b相加为c。 
   取c的个位数d。 
   用10减去d即为校验位数值。

例:234235654652的校验码的计算如下表:

数据码 校验码 
   代码位置序号 13 12 11 10 9 8 7 6 5 4 3 2 1 
   数字码 2 3 4 2 3 5 5 5 4 6 5 2 ? 
   偶数位     3 + 2 + 5 + 5 + 6 + 2 
   奇数位 2 + 4 + 3 + 5 + 4 + 5

步骤1:3+2+5+5+6+2=23 
   步骤2:23*3=69 
   步骤3:2+4+3+5+4+5=23 
   步骤4:69+23=92 
   步骤5:10-2=8 
   步骤6:校验码为 8

数据码 校验码 
   代码位置序号 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 
   数字码 2 0 0 0 0 0 5 0 0 2 2 0 0 0 1 4 7 ? 
   偶数位 2 + 0 + 0 + 5 + 0 + 2 + 0 + 1 + 7 
   奇数位      0 + 0 + 0 + 0 + 2 + 0 + 0 + 4

步骤1:2+0+0+5+0+2+0+1+7=17 
   步骤2:17*3=51 
   步骤3:0+0+0+0+2+0+0+4=6 
   步骤4:51+6=57 
   步骤5:10-7=3 
   步骤6:校验码为 3

*/

/// <summary>
  /// EAN码校验位的计算
  /// </summary>
  /// <param name="szCode"></param>
  /// <returns></returns>
  private bool GetVerifyBit(ref string szCode) 
  { 
   int nNum1 = 0; 
   int nNum2 = 0; 
   int nNum3 = 0; 
   int szLen = 0; 
   if ( szCode == null ) 
    return false;
   
   szLen = szCode.Length;     
   if(szLen <=12 || szLen >= 17) 
        return true; 
   for ( int i=0; i<szLen; i++) 
   {

if ( i%2 == 0 ) 
    {
     nNum2 += int.Parse(szCode[i].ToString()); //偶数     
    }
    else 
    {
     nNum1 += int.Parse(szCode[i].ToString()); //奇数     
    }
   } 
   nNum3 = (Operator.DiscountLabelBarLength % 2 ==0) ? nNum1 + nNum2 * 3 : nNum1 * 3 + nNum2 ; 
   
   int t ;
   if(nNum3%10>0) t= 10- (nNum3 % 10) ;
   else t=0;
   szCode+=t;

return true
  }

/// <summary>
  /// EAN码校验位的计算
  /// </summary>
  /// <param name="szCode"></param>
  /// <returns></returns>
  private bool GetVerifyBit(ref string szCode) 
  { 
   int nNum1 = 0; 
   int nNum2 = 0; 
   int nNum3 = 0; 
   int szLen = 0; 
   if ( szCode == null ) 
    return false;
   
   szLen = szCode.Length;     
   if(szLen <=12 || szLen >= 17) 
        return true; 
   for ( int i=0; i<szLen; i++) 
   {

if ( i%2 == 0 ) 
    {
     nNum2 += int.Parse(szCode[i].ToString()); //偶数     
    }
    else 
    {
     nNum1 += int.Parse(szCode[i].ToString()); //奇数     
    }
   } 
   nNum3 = (Operator.DiscountLabelBarLength % 2 ==0) ? nNum1 + nNum2 * 3 : nNum1 * 3 + nNum2 ; 
   
   int t ;
   if(nNum3%10>0) t= 10- (nNum3 % 10) ;
   else t=0;
   szCode+=t;

return true
  }

如果再精简些应该直接用数组类型来实现,这样就不用使用string了.代码中的细节部分不是效率最高写法.盖于本人学历尚浅,对char等类型掌握的还不熟.所以就用一堆的转型来解决了.

代码用c#写成,相信学java人士也能看懂吧 呵呵

前几天上传得代码有问题居然没人发现,汗,还是自己改过来吧...现在已经改完了,不知道会不会有其他得问题了,欢迎批评啊

EAN校验码的计算方法相关推荐

  1. 18位身份证号码最后一位校验码的计算方法

    介绍18位身份证号码最后一位校验码的计算方法 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码. ...

  2. 网络技术之数据包校验码的计算方法

    作者:i_dovelemon 日期:2016 / 04 / 05 来源:CSDN 主题:大小端,ICMP,校验码 引言         最近在研究TCP/IP协议相关的内容,试着使用Wireshark ...

  3. 一文看懂海明校验码及其计算方法(详细总结)

    网上看了好几篇文章后终于算是捋明白了,但是看到的这些资源要么说得云里雾里,要么干脆说得有问题(然后还被点了好多赞...),无论如何这些都容易误导小白.作为C站多年老潜水员,我还是把海明校验码的要点总结 ...

  4. 条形码ENA-13校验码的计算方法

    代码位置序号 代码位置序号是指包括校验码在内的,由右至左的顺序号(校验码的代码位置序号为1). 计算步骤 校验码的计算步骤如下: a.从代码位置序号2开始,所有偶数位的数字代码求和. b.将步骤a的和 ...

  5. mysql身份证校验码_用sql实现18位身份证校验代码分享 身份证校验位计算

    身份证校验码的计算方法 1.将前面的身份证号码17位数分别乘以不同的系数.第i位对应的数为[2^(18-i)]mod11.从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 ...

  6. 对身份证号码的处理,所在地,生日,派出所代码,男or女,校验码

    一.身份证编码 (1)前六位表示编码对象常住户口所在县(市.镇.区)的行政区划代码.1-2位省.自治区.直辖市代码: 3-4位地级市.盟.自治州代码: 5-6位县.县级市.区代码. (2)第七位到第十 ...

  7. 居民身份证号码的奥秘及身份证第18位(校验码)的计算方法

    2019独角兽企业重金招聘Python工程师标准>>> 居民身份证是国家法定的证明公民个人身份的证件.为了堵塞和制止假居民身份证的流通和使用,在查验和核查居民身份证时可掌握以下几个要 ...

  8. 常用crc查表法_CRC校验码简介及CRC16的计算方法

    点击上方"嵌入式从0到1",选择"置顶/星标公众号" 干货福利,第一时间送达! 什么是CRC校验? CRC即循环冗余校验码(Cyclic Redundancy ...

  9. CRC校验码简介及CRC16的计算方法

    [导读]什么是CRC校验?CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.奇偶校验虽然简 ...

  10. EAN码校验位的计算方法

    /**    EAN码校验位的计算方法    从代码位置序号2开始,所有偶数位的数字代码求和为a.    将上步中的a乘以3为a.    从代码位置序号3开始,所有奇数位的数字代码求和为b.    将 ...

最新文章

  1. hdu-1003 or 最大子序列和(四种解题方法)
  2. Javascript prototype理解
  3. java多线程的同步
  4. 什么是Terraform?
  5. 存储过程,触发器,函数
  6. 解决jmeter响应中文乱码及解码
  7. OpenGL编程指南14:混合半透明Blend
  8. 如何在Windows中快速轻松地将文件发送到SkyDrive
  9. android怎么垂直居中且靠右,placeholder 靠右垂直居中/位置兼容
  10. Python 如何调用 Java
  11. NSNumber, NSValue的使用
  12. 国内最强Web3D软件WebMax正式版发布
  13. 从零实现一个3D建模软件
  14. EXCEL用今天日期减去之前的日期得到结果
  15. 【经验贴】小汽车科目二科目三 经验
  16. Java中构造方法的案例及常用类int lenght类的使用方法举例,new实例化对象方法,静态方法实例方法的举例
  17. CST视图view的操作
  18. YT8511H的原理图设计
  19. spark官网配套的代码数据在哪儿
  20. MySQL管理常用工具介绍

热门文章

  1. 别再让「聪明」害了00后!
  2. openairinterface5g基站老版eNB部署
  3. 厂级监控系统镜像服务器,厂级监控信息系统(SIS).PDF
  4. 使用IDEA工具远程调试SpringBoot应用
  5. Supplier和Vendor的区别
  6. 解决ImportError: cannot import name ‘bbox_overlaps_cython‘
  7. iTunes12.7 如何自定义手机铃声
  8. 修改远程端口后登录不上的解决办法[作者:Jackie]
  9. html挪车隐藏手机,警告,千万不能留挪车电话!!!教你两招,这样做就可以挪车,避免麻烦...
  10. ① 如何优雅快乐打出漂亮LaTeX数学公式——小乐数学zzllrr Mather公式编辑器教程