zoukankan      html  css  js  c++  java
  • 中国标准书号校验码的计算方式(附C#代码)

    近段时间做了一个ERP项目,涉及到图书销售,于是熬了几个晚上研究了一下相关事情……抽空将一些内容梳理了一下。

    首先了解一些必要的术语及定义:

    ---------------------------------------
    EAN•UCC前缀  EAN•UCC prefix
    国际物品编码协会分配的产品标识编码。
    ---------------------------------------
    校验码  check digit
    中国标准书号的最后一位,由校验码前面的12位数字通过特定的数学算法计算得出,用以检查中国标准书号编号的正确性。
    ---------------------------------------
    ISBN
    国际标准书号英文International Standard Book Number的缩写,国际上通用的出版物标识编码的标识符。
    ---------------------------------------
    出版者  publisher
    向中国ISBN 管理机构申请并获得出版者号的出版机构或组织。
    ---------------------------------------
    组区  registration group
    由国际ISBN管理机构指定的,以国家、地理区域、语言及其他社会集团划分的工作区域。

    =======================================

    中国标准书号的结构:

    ---------------------------------------
    中国标准书号的构成
    中国标准书号由标识符“ISBN”和13位数字组成。其中13位数字分为以下五部分:
    1)EAN•UCC前缀 
    2)组区号
    3)出版者号 
    4)出版序号 
    5)校验码
    书写或印刷中国标准书号时,标识符“ISBN”使用大写英文字母,其后留半个汉字空,数字的各部分应以半字线隔开。如下所示:
    ISBN EAN•UCC前缀-组区号-出版者号-出版序号-校验码
    示例:ISBN 978-7-5064-2595-7
    ---------------------------------------
    EAN•UCC前缀
    中国标准书号数字的第一部分。由国际物品编码(EAN•UCC)系统专门提供给国际ISBN管理系统的产品标识编码。
    ---------------------------------------
    组区号
    中国标准书号数字的第二部分。它由国际ISBN管理机构分配。中国的组区号为“7”。
    ---------------------------------------
    出版者号
    中国标准书号数字的第三部分。标识具体的出版者。其长度为2至7位,由中国ISBN管理机构设置和分配。
    ---------------------------------------
    出版序号
    中国标准书号数字的第四部分。由出版者按出版物的出版次序管理和编制。
    ---------------------------------------
    校验码
    中国标准书号数字的第五部分,也是其最后一位。采用模数10加权算法计算得出。
    ---------------------------------------
    出版者号的取值范围和出版量

    出版者号设置范围
    00 09
    100 499
    5000 7999
    80000 89999
    900000 989999
    9900000 9999999

    每一出版者号含有的出版量(与上面一一对应,如:00 09对应1000000)
    1000000
    100000
    10000
    1000
    100
    10

    ---------------------------------------


    10位数字中国标准书号校验码的计算:

    代码

      

    13位数字中国标准书号校验码的计算:

    代码
    /// <summary>
    /// 13位数字中国标准书号的校验码的计算。
    /// <remarks>
    /// 13位数字中国标准书号的校验码采用模数10的加权算法计算得出。
    ///
    /// 数学算式为:
    /// 校验码 = mod 10 {10 – [mod 10 (中国标准书号前12位数字的加权乘积之和)]}
    /// = mod 10 {10 – [mod 10 (123)]}
    /// = 7
    ///
    /// 以ISBN 978-7-5064-2595-7为例。
    /// </remarks>
    /// </summary>
    /// <param name="sCode"></param>
    /// <returns></returns>
    public static string GetF13ISBN(string sCode)
    {
    string coreCode = sCode.Replace("-", "");
    coreCode
    = coreCode.Substring(0, 12);

    int oddSum = 0; //奇数和
    int evenSum = 0;//偶数和
    for (int i = 0; i < 12; i++)
    {
    if (i % 2 == 0)
    {
    evenSum
    += Convert.ToInt32(coreCode.Substring(i, 1));
    }
    else
    {
    oddSum
    += Convert.ToInt32(coreCode.Substring(i, 1));
    }
    }

    int sum = oddSum + evenSum * 3;

    string checkCode = null;
    if (sum % 10 == 0)
    {
    checkCode
    = "0";
    }
    else
    {
    checkCode
    = (10 - (sum % 10)).ToString();
    }

    return string.Concat(coreCode, checkCode);
    }

      

    10位数字的中国标准书号转换为13位数字的中国标准书号:

    代码
    /// <summary>
    /// 10位数字的中国标准书号转换为13位数字的中国标准书号。
    /// <remarks>
    /// 10位数字的中国标准书号转换为13位数字的中国标准书号,在其前9位数字之前加EAN•UCC前缀978,
    /// 以模数10加权算法计算得出的校验码取代10位数字中国标准书号的校验码。
    /// </remarks>
    /// </summary>
    /// <param name="s10ISBN"></param>
    /// <returns></returns>
    public static string ISBN10T13(string sISBN)
    {
    return GetF13ISBN(string.Concat("978-", sISBN));
    }
  • 相关阅读:
    【软件测试部署基础】maven的认识
    测试管理那些事[组建测试团队的思考]
    Django 框架基本操作(二)
    测试人员的工作开展方式
    产品管理基础知识
    项目经理与职能经理的区别
    python 面向对象(二)
    Python 常用方法和模块的使用(time & datetime & os &random &sys &shutil)-(六)
    python基本案例实现
    JAVA基础——集合浅析
  • 原文地址:https://www.cnblogs.com/bicabo/p/1885106.html
Copyright © 2011-2022 走看看