轨道
/
Julia
Julia
/
练习
/
ISBN 校验器
ISBN 校验器

ISBN 校验器

中等

说明

ISBN-10 验证过程用于校验图书编号。这类编号通常包含连字符,看起来像:3-598-21508-8

ISBN

ISBN-10 格式由 9 位数字(0 到 9)加上一个校验字符(只能是数字或 X)组成。如果校验字符是 X,它代表的值为 '10'。这些字符之间可以带连字符,也可以不带,其有效性可以用下面的公式检验:

(d₁ * 10 + d₂ * 9 + d₃ * 8 + d₄ * 7 + d₅ * 6 + d₆ * 5 + d₇ * 4 + d₈ * 3 + d₉ * 2 + d₁₀ * 1) mod 11 == 0

如果结果为 0,那么这个 ISBN-10 有效,否则无效。

示例

我们以 ISBN-10 3-598-21508-8 为例。 把它代入公式,就得到:

(3 * 10 + 5 * 9 + 9 * 8 + 8 * 7 + 2 * 6 + 1 * 5 + 5 * 4 + 0 * 3 + 8 * 2 + 8 * 1) mod 11 == 0

结果为 0,说明这个 ISBN 是有效的。

任务

给定一个字符串,程序应检查这个字符串是否为有效的 ISBN-10。 要实现这一点,需要先想清楚如何在计算 ISBN 校验位之前对字符串进行预处理和解析。

程序应能验证带分隔连字符和不带分隔连字符的 ISBN-10。

注意事项

在某些编程语言中,把字符串转换成数字可能很棘手。 而现在更棘手,因为 ISBN-10 的校验位可能是 'X'(代表 '10')。 例如,3-598-21507-X 就是一个有效的 ISBN-10。

附加任务

如果你想尝试这些任务,请在你的解答文件里为它们编写自己的测试!

  • 定义一个字符串宏,使得isbn"3-598-21507-X" == ISBN("3-598-21507-X")。

  • 让构造函数也接受 ISBN-13。同一个 ISBN 无论采用哪种格式,比较时都应该相等:ISBN("1-234-56789-X") == ISBN("978-1-234-56789-7")。

  • 定义一个函数或迭代器来生成一个有效的 ISBN,甚至可以从给定的起始 ISBN 开始生成。

你能把 ISBN 存成整数而不是字符串吗?那样做会是好主意吗? 如果这样做,你还能把 ISBN(包括校验位)作为字符串打印出来吗?

通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Julia Exercism

准备好开始 ISBN 校验器 了吗?

注册 Exercism,借助 35 个概念128 个练习 和真人导师指导,学习并掌握 Julia,全部免费。