ISBN从10到13位的算法

2023-05-16

 

     图书的ISBN有两种编码,一种长度是10位的,另一种是13位的。两者其实是可以用特定的算法相互推导的,关键在于最后一位校验码的计算。

 

1. 10位到13位 10位的isbn编号是7111165616,转化到13位,遵循下面的算法: 去掉最后一位,在最前面加上978,变成978711116561 从第一个数字起,求每奇数位的和,记为a。9+8+1+1+6+6 = 31 从第二个数字起,求每偶数位的和,记为b。7+7+1+1+5+1 = 22 求a+3b,记为c。c = 97 求10-c并对结果取10的模,10 - c %1 0 = 3。这就是校验位,加在第一步结果的最后。得到13位编码为:9787111165613

 

 

2.从13位到10位的计算方法更简单 13位编号是9787111165613现在想把它转化位10位,可以这样做: 去掉开头的”978″和最后一位校验码,变成711116561 从第一位开始,将每一位和10到2的数字相乘,并求和;7*10 + 1*9 + 1* 8 + 1*7 + 1*6 + 6*5 + 5*4 + 6*3 + 1*2 = 170;记为c 求11-c并对结果取11的模:(11-c)%11 = 6;如果结果是10就记为X,然后把算出来的一位加到第一步结果的最后,得到10位编码为:7111165616

 

java代码:

 

	private static String getISBN13(String isbn) {
		if (isbn.length() != 10) {
			return isbn;
		}
		isbn = isbn.substring(0, isbn.length() - 1);
		isbn = "978" + isbn;
		int a = 0;
		int b = 0;
		int c = 0;
		int d = 0;
		for (int i = 0; i < isbn.length(); i++) {
			int x = Integer.parseInt(isbn.substring(i, i+1));
			if (i % 2 == 0) {
				a += x;
			} else {
				b += x;
			}
		}
		c = a + 3 * b;
		d = 10 - c % 10;
		isbn = isbn + d;
		return isbn;
	}

 

附近为java代码

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

ISBN从10到13位的算法 的相关文章

  • shell后台并发执行的最佳实践

    一 shell如何在后台执行 1 nohup命令 通常我们都是远程登录linux终端 xff0c 而当我们退出终端时在之前终端运行的程序都会终止 xff0c 有时候先想要退出终端也要程序继续执行这时nohup就登场了 nohup命令 可以将
  • 任意输入10个数,找出最大数和最小数。

    任意输入10个数 找出最大数和最小数 span class token macro property span class token directive keyword include span span class token stri
  • 如何在 Chromebook 上启用开发者模式

    写在前面的话 xff1a 版权声明 xff1a 本文为博主原创文章 xff0c 转载请注明出处 xff01 博主是一个小菜鸟 xff0c 并且非常玻璃心 xff01 如果文中有什么问题 xff0c 请友好地指出来 xff0c 博主查证后会进
  • 【C语言】实现 atoi 函数

    写在前面的话 xff1a 版权声明 xff1a 本文为博主原创文章 xff0c 转载请注明出处 xff01 博主是一个小菜鸟 xff0c 并且非常玻璃心 xff01 如果文中有什么问题 xff0c 请友好地指出来 xff0c 博主查证后会进
  • 【C语言】字符串合集

    写在前面的话 xff1a 版权声明 xff1a 本文为博主原创文章 xff0c 转载请注明出处 xff01 博主是一个小菜鸟 xff0c 并且非常玻璃心 xff01 如果文中有什么问题 xff0c 请友好地指出来 xff0c 博主查证后会进
  • 线程上下文切换和进程上下文切换的区别

    进程切换分两步 1 切换页目录以使用新的地址空间 2 切换内核栈和硬件上下文 对于linux来说 xff0c 线程和进程的最大区别就在于地址空间 对于线程切换 xff0c 第1步是不需要做的 xff0c 第2是进程和线程切换都要做的 所以明
  • 【Ubuntu】解决 Could not get lock /var/lib/dpkg/lock-frontend

    写在前面的话 xff1a 版权声明 xff1a 本文为博主原创文章 xff0c 转载请注明出处 xff01 博主是一个小菜鸟 xff0c 并且非常玻璃心 xff01 如果文中有什么问题 xff0c 请友好地指出来 xff0c 博主查证后会进
  • 【Ubuntu】解决 error: dpkg frontend is locked by another process

    写在前面的话 xff1a 版权声明 xff1a 本文为博主原创文章 xff0c 转载请注明出处 xff01 博主是一个小菜鸟 xff0c 并且非常玻璃心 xff01 如果文中有什么问题 xff0c 请友好地指出来 xff0c 博主查证后会进
  • 【OpenCV】关于Vec3b类型的含义与使用

    写在前面的话 xff1a 版权声明 xff1a 本文为博主原创文章 xff0c 转载请注明出处 xff01 博主是一个小菜鸟 xff0c 并且非常玻璃心 xff01 如果文中有什么问题 xff0c 请友好地指出来 xff0c 博主查证后会进
  • 【Java】文件读写和输入输出

    写在前面的话 xff1a 版权声明 xff1a 本文为博主原创文章 xff0c 转载请注明出处 xff01 博主是一个小菜鸟 xff0c 并且非常玻璃心 xff01 如果文中有什么问题 xff0c 请友好地指出来 xff0c 博主查证后会进
  • 【剑指Offer】题3:数组中重复的数字

    写在前面的话 xff1a 版权声明 xff1a 本文为博主原创文章 xff0c 转载请注明出处 xff01 博主是一个小菜鸟 xff0c 并且非常玻璃心 xff01 如果文中有什么问题 xff0c 请友好地指出来 xff0c 博主查证后会进
  • 【C语言】关于遍历字符串的三种方法

    写在前面的话 xff1a 1 版权声明 xff1a 本文为博主原创文章 xff0c 转载请注明出处 xff01 2 博主是一个小菜鸟 xff0c 并且非常玻璃心 xff01 如果文中有什么问题 xff0c 请友好地指出来 xff0c 博主查
  • 逻辑地址、虚拟地址、物理地址以及内存管理

    本文涉及的硬件平台是X86 xff0c 如果是其它平台 xff0c 嘻嘻 xff0c 不保证能一一对号入座 xff0c 但是举一反三 xff0c 我想是完全可行的 1 概念 物理地址 physical address 用于内存芯片级的单元寻

随机推荐

  • 为 CentOS 配置网络

    用桥接方式给CentOS配置网络 xff0c 这里我使用的是CentOS 6 5 第一步 点开虚拟机的设置 xff0c 网络连接选择桥接方式 xff0c 其他勾选按照下图 xff0c 如下图做相关的设置 xff1a 第二步 打开网络连接 x
  • 32位 idea启动出现“could not find main class com/intellij/idea/Main“错误解决方法

    idea启动出现 could not find main class com intellij idea Main 错误的解决方法 32位环境下安装idea及解决could not find main class com intellij
  • java实现获取两个list交集

    如何获取两个list的交集 xff0c 使用java8 的stream实现非常容易 java流实现 创建两个字符串list xff0c 两者都有重复的元素 xff1a List lt String gt list 61 Arrays asL
  • shell中$(( ))与$( )还有${ }的区别

    与 96 96 反引号 在bash shell中 xff0c 与 96 96 反引号 都是用来做命令替换 command substitution 用的 echo the last sunday is date d 34 last sund
  • apache 的网页内容显示是乱码

    apache 的网页内容显示是乱码 非常感觉下面各位的回答 xff0c http forum ubuntu org cn yaoms etcte HuntXu sevk shellex http linux chinaunix net ma
  • 字母及数字上标下标

    字母及数字上标下标 欢迎使用新的改变 欢迎使用 常用上标 常用下标 更多上标
  • 构造矩阵乘最优解

    void bracket int i int j if i 61 61 j cout lt lt 34 M 34 lt lt i else cout lt lt 34 34 int k 61 K i j bracket i k 1 brac
  • vs2012 出现LINK : fatal error LNK1104: 无法打开文件“kernel32.lib”问题

    首先 xff0c 我是在已经安装了vs2010的基础上安装的vs2012 xff0c 测试安装的时候发现最基本的helloworld程序都通不过 xff0c 出现LINK fatal error LNK1104 无法打开文件 kernel3
  • SerDes知识详解

    一 SERDES的作用 1 1并行总线接口 在 SerDes流行之前 芯片之间的互联通过 系统同步或者源同步的并行接口传输数据 图 1 1 演示了系统和源同步并行接口 随着接口频率的提高 xff0c 在系统同步接口方式中 有几个因素限制了有
  • enum : C#中的枚举类型,原来有这么多用法

    今天来的时候打开了MSDN扫了一眼C 里的枚举类型 蓦然发现这东西还有些新玩法 首先是简单介绍 xff0c 在此略过 因为enum用法很简单么 定义一个简单的枚举类型 xff1a enum Days Sat Sun Mon Tue Wed
  • ubuntu下安装cuDNN

    正确的安装cuDNN方式 xff0c 其实跟着官方安装说明进行安装就可以了 1 从https developer nvidia com cudnn上下载cudnn相应版本的压缩包 xff08 需要注册或登录 xff09 下载cuda对应版本
  • 面向对象(3)

    私有权限 封装的意义 xff1a 将属性和方法放到一起做为一个整体 xff0c 然后通过实例化对象来处理 xff1b 隐藏内部实现细节 xff0c 只需要和对象及其属性和方法交互就可以了 xff1b 对类的属性和方法增加 访问权限控制 私有
  • 【vnc远程桌面】未联网状态下使用离线包配置vnc

    系统为ubuntu18 04 amd64版本 本教程使用vino配置远程服务器 首先 xff0c 离线安装vino包后远程传输给待控制服务器 xff1a sudo apt update sudo apt get download apt c
  • 7.用选择排序法对一个数组进行排序。

    include lt stdio h gt define N 5 void datesort int a int i j k temp for i 61 0 i lt N 1 i 43 43 k 61 i for j 61 i 43 1 j
  • error while loading shared libraries: xxx.so.x"错误的原因和解决办法

    一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误 比如 tmux error while loading shared libraries libevent 1 4 so 2 cannot open shared o
  • Linux终端进度条显示进程执行进度

    在Linux执行费时操作 xff08 如tar xff09 时显示进度条 xff0c 以不至于让用户觉得程序卡死了 效果 文本进度条 结束后 xff1a 图形化字符进度条 文本进度条怎么做 进度条实现 网上有一些老六会说要下载一些工具 xf
  • 判断页面相似度的python实现

    判断页面相似度的python实现 xff1a 两天时间实现了一小部分 xff0c 大量其实是xpath解析以及字符串和文件操作 xff0c 性能还需要改善 xff0c 下面说一下步骤 xff1a 动态获取DOM树结构 xff1a 因为主要是
  • Win10下VScode+MSVC+CMake搭建C++开发环境

    最近工作需要大规模C 43 43 开发 xff0c 以往都是使用Visual Studio xff08 以下简称VS xff09 xff0c 虽然VS是一款很强大的IDE xff0c 但也同样带来过于庞大 xff0c 运行卡顿等问题 xff
  • iOS 表视图

    基本概念 1 表头视图 xff08 table header view xff09 表视图最上边的视图 xff0c 用于展示表视图的信息 2 表脚视图 xff08 table footer view xff09 表视图最下面的视图 xff0
  • ISBN从10到13位的算法

    图书的ISBN有两种编码 xff0c 一种长度是10位的 xff0c 另一种是13位的 两者其实是可以用特定的算法相互推导的 xff0c 关键在于最后一位校验码的计算 1 10位到13位 10位的isbn编号是7111165616 xff0