php 10位isbn 13位isbn 的相互转换

2023-05-16

由 2007 年 1 月 1 日 起 , 国 际 标 准 书 号 ﹝ 下 简称书号﹞的格 式 会 由 10 位 修 订 为 13 位 。 是 次 修 订 的 主 要 目 的 ,是增加国际标 准 书 号 系 统 的 容 量 , 以 及 令 国 际 标 准书号能够 与应 用于 其 他 货 品 和 供 应 链 的 13 位 国 际 货 品编码 (EAN-13) 完 全相 容 。
ISBN13位转化ISBN号10位的方法步骤
1:去掉条码号的前3位和最后1位,即为10位isbn号的前9位     
2:10位isbn号的最后1位为校验码,校验码的计算方法:isbn号的10位按位序分别乘以10、9、8、7、6、5、4、3、2,积的和应是11的倍数(有余数)。
如:13位ISBN “9787810872102”转化为10位ISBN,去掉前三位978和最后一位2,得到一个9位数781087210,然后10*7+9*8+8*1+7*0+6*8+5*7+4*2+3*1+2*0=244,   
244/11的余数为2,11-2=9,所以校验码为9。9即使最后一位,因此13位ISBN “9787810872102”转化的10位ISBN为“7810872109”

当余数为0时,校验码为 0,余数为1时,补数为10,此时用符号X代替。


<?php

class Ezphp_Tool_ISBN
{
    public static function to10($isbn)
    {
        $isbn = str_replace('-', '', $isbn);
        if(!preg_match('/^\d+x?$/i', $isbn)){
            return null;
        }
        
        if(strlen($isbn) == 10){
            return $isbn;
        }
        
        $sum = 0;
        $num = substr($isbn, 3, 9);
        for($i = 10, $p = 0; $i > 1; $i--, $p++){
            $sum += $i * intval($num[$p]);
        }
        
        $m = $sum % 11;
        
        $check = 11 - $m;
        
        if($check == 10){
            $check = 'x';
        }
        
        if($check == 11){
            $check = '0';
        }
        
        return $num . $check;
    }
   
    public static function to13($isbn)
    {
        $isbn = str_replace('-', '', $isbn);
        if(!preg_match('/^\d+x?$/i', $isbn)){
            return null;
        }
        
        if(strlen($isbn) == 13){
            return $isbn;
        }
        
        $sum = 0;
        $num = '978' . substr($isbn, 0, 9);
        
        for($i = 0; $i < 12; $i++){
            $n = $num[$i];
            if(($i + 1) % 2 == 0){
                $sum += $n * 3;
            }else{
                $sum += $n;
            }
        }
        
        $m = $sum % 10;
        $check = 10 - $m;
        
        return $num . $check;
    }
    
}




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php 10位isbn 13位isbn 的相互转换 的相关文章

  • 三元组顺序表表示的稀疏矩阵加法

    三元组顺序表表示的稀疏矩阵加法 输入格式 输入第1行为两个同型矩阵的行数m 列数n xff0c 矩阵A的非零元素个数t1 xff0c 矩阵B的非零元素个数t2 按行优先顺序依次输入矩阵A三元组数据 xff0c 共t1行 xff0c 每行3个
  • 设从键盘输入一整数的序列:a1,a2,a3,...,an,用栈结构存储输入的整数,当ai不等于-1时,将ai进栈;当ai=-1时,输出栈顶整数并出栈【数据结构】【栈】

    设计一个函数实现以下功能的函数 xff0c 并测试 设从键盘输入一整数的序列 xff1a a1 a2 a3 an xff0c 用栈结构存储输入的整数 xff0c 当ai不等于 1时 xff0c 将ai进栈 xff1b 当ai 61 1时 x
  • 判断一个二维数组a[M][N]中所有元素是否都互不相同。如果都不同,输出1;否则,输出0。【数据结构】

    设计一个函数实现以下功能 xff0c 并测试 功能 xff1a 判断一个二维数组a M N 中所有元素是否都互不相同 如果都不同 xff0c 输出1 xff1b 否则 xff0c 输出0 输出结果 xff1a 主要算法 xff1a int
  • 利用递归和二叉树实现多位数整数的计算

    题目 xff1a 功能设计 xff1a 读取用户输入的表达式创建表达式树功能遍历表达式树进行表达式求值功能输出表达式计算结果功能 功能实现 xff1a 1 2 3 运行结果 xff1a 用户输入1 xff0c 输入要计算的表达式并以 结尾
  • File类常用方法

    File类 xff1a 代表一个特定的文件或者目录 xff08 文件夹 xff09 xff0c 并提供了若干方法对该文件或目录进行操作 File是指文件和目录路径名的抽象表示形式 构造方法 xff1a File String pathnam
  • takes 3 positional arguments but 4 were given错误

    之前写程序经常会碰到此类问题 xff0c 确认发现并没有少参数 函数为类下函数 xff0c 定义时需要添加self参数 但是 xff01 但是 xff01 为何Python给self赋值而你不必给self赋值 xff1f 创建了一个类MyC
  • C语言如何创建属于自己的头文件?

    要想创建一个属于自己的头文件 xff0c 首先我们要明白它的原理 xff0c 具体分为以下两类 xff1a 1 系统头文件 xff1a 这类头文件 xff0c 是系统里边已经有的 xff0c 它们都有一个特点 xff0c 就是都带括号 xf
  • 51单片机定时器

    目录 前言 一 定时器的介绍及其作用 二 定时器的内部构造及其原理 计算机周期 定时器的工作模式与流程 定时器中断相关寄存器 寄存器的配置 三 程序 总结 前言 下面来介绍学习51单片机第一个也是最常用的片上外设 定时器 该硬件是集成在单片
  • 双系统下对ubuntu系统进行扩容

    由于起初装ubuntu系统时啥也不懂 xff0c 从windiws系统中分配给ubuntu的空间很小 xff0c 导致现在ubuntu系统磁盘容量不够用 于是花了一个3 xff0c 4个小时的时间去完成ubuntu系统的扩容 现在记录一下解
  • 【 Kali 安装教程,有手就会】

    Kali 安装教程 第一步 xff1a 新建一台Debian虚拟机 1 xff09 选择客户机操作系统 2 xff09 设置虚拟机名称 存储位置 3 xff09 设置处理器 1颗1核心 设置内存2048MB 设置网络类型NAT 4 xff0
  • JavaScript表达式与运算符的使用以及if分支结构

    一 表达式与运算符 表达式是对一个或多个变量或值 xff08 操作数 xff09 进行运算 xff0c 并返回一个新值 运算符可以分为一下类别 xff1a 赋值运算符 var a 61 10 var b 61 20 var c 61 a 4
  • 应届生学的 java,转自动化测试拿到 15k 薪资,送给大家的经验积分

    窗外 xff0c 西安的冬天阳光明媚 xff0c 坐在电脑前心情十分平静 想在这个难得的闲暇里 xff0c 想起记录一下自己这些年的经历 xff0c 也是给自己留一点以后可以回忆的故事 个人 2015 年入学 xff0c 武汉某大学计科相关
  • 在VS Code的notebook中编写Rust代码

    目录 背景 前提条件 操作步骤 背景 在VS Code的notebook中编写Rust代码 xff0c 听起来就觉得绕 VS Code已经有Rust插件 xff0c 支持编写Rust代码 xff0c 为什么搞这么复杂 为了综合两者的优点 x
  • Linux内核下gitee的使用

    一 什么是git git是一个开源的分布式版本控制系统 xff0c 用于敏捷高效地处理任何或小或大的项目 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件 Git 与常用的版本控
  • 洛谷 P1786 帮贡排序

    目录 输入 授予职位 输出前按输出规则排序 输出 最后代码 题目是非常长长长长长长长长长长长长长长长长长长长长长长长长长长长长长 我花了2个小时才做完 这题是大模拟 xff08 打磨你 xff09 xff0c 题目也很长 xff0c 需要耐
  • ./nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such

    这个错误提示说明nginx在运行时找不到libpcre so 1这个共享库文件 xff0c 可能是因为系统中没有安装PCRE库或者安装的PCRE库版本不对导致的 解决方法如下 xff1a 确认系统中是否已经安装了PCRE库 xff0c 可以
  • netperf使用指南

    netperf使用笔记 netperf 是一种非常常见的测量网络带宽的工具 xff0c 其安装非常简单 xff1a 1 下载netperf包 2 进入netperf目录 xff0c configure 3 make 4 make insta
  • debian中设置默认声卡

    alsamixer 设置默认声卡 sudo nano etc asound conf 设置声卡1为默认 则写入以下内容 xff1a defaults ctl card 1 defaults pcm card 1 defaults timer
  • zabbix第三方邮箱警告配置

    1 安装postfix软件 root 64 server yum y install postfix Last metadata expiration check 18 30 18 ago on Sun 04 Sep 2022 04 11
  • Python常用基础语法知识点大全合集,看完这一篇文章就够了

    介绍 Python 是一门独特的语言 xff0c 快速浏览一下他的要点 xff1a 面向对象 xff1a 每一个变量都是一个类 xff0c 有其自己的属性 xff08 attribute xff09 与方法 xff08 method xff

随机推荐