检查 Java 中的字符串是否遵循 ISBN-13
我试图根据 ISBN- 的规则检查我读取的字符串(重要的是它是字符串)是否正确13.。我找到了一个公式
例如978-0-306-40615-的ISBN-13校验位?
计算如下:
s = 9×1 + 7×3 + 8×1 + 0×3 + 3×1 + 0×3 + 6×1 + 4×3 + 0×1 + 6×3 + 1×1 + 5×3
= 9 + 21 + 8 + 0 + 3 + 0 + 6 + 12 + 0 + 18 + 1 + 15
= 93
93 / 10 = 9 remainder 3
10 – 3 = 7`
我的问题是我不知道如何将一个数字与 1 相乘,并将每个数字与 3 相乘?我猜是一个 for 循环,但我不知道如何开始。
Im trying to check if a string (important that it is a string) that im reading is correct accoring to the rules of ISBN-13. I found a formula
For example, the ISBN-13 check digit of 978-0-306-40615-?
is calculated as follows:
s = 9×1 + 7×3 + 8×1 + 0×3 + 3×1 + 0×3 + 6×1 + 4×3 + 0×1 + 6×3 + 1×1 + 5×3
= 9 + 21 + 8 + 0 + 3 + 0 + 6 + 12 + 0 + 18 + 1 + 15
= 93
93 / 10 = 9 remainder 3
10 – 3 = 7`
My problem is i don't know how to multiply one number with 1 and every other with 3 ? Im guessing a for-loop but i don't know how to start.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您可以“简单地”使用正则表达式:
ISBN(-1(?:(0)|3))?:?\x20+(?(1)(?(2)(?:(?=.{13 }$)\d{1,5}([ -])\d{1,7}\3\d{1,6}\3(?:\d|x)$)|(?:(?=.{17}$)97(?:8| 9)([ -])\d{1,5}\4\d{1,7}\4\d{1,6}\4\d$))|(?(.{13}$)( ?:\d{1,5}([ -])\d{1,7}\5\d{1,6}\5(?:\d|x)$)|(?:(?=.{17}$)97(?:8| 9)([ -])\d{1,5}\6\d{1,7}\6\d{1,6}\6\d$)))
You could "simply" use regular expressions:
ISBN(-1(?:(0)|3))?:?\x20+(?(1)(?(2)(?:(?=.{13}$)\d{1,5}([ -])\d{1,7}\3\d{1,6}\3(?:\d|x)$)|(?:(?=.{17}$)97(?:8|9)([ -])\d{1,5}\4\d{1,7}\4\d{1,6}\4\d$))|(?(.{13}$)(?:\d{1,5}([ -])\d{1,7}\5\d{1,6}\5(?:\d|x)$)|(?:(?=.{17}$)97(?:8|9)([ -])\d{1,5}\6\d{1,7}\6\d{1,6}\6\d$)))
您有 6 对(偶数、奇数)数字,因此请两两配对。
You have 6 pairs of (even,odd) numbers, so go through them pairwise.
假设您的输入字符串是 ascii:
assuming your inputString is ascii:
这似乎有效且明确。
注意:经过编辑以正确处理 0 校验位。请参阅维基百科国际标准书号,例如校验位为 0 的 isbn。
Paul
This seems to work effectively and is clear.
NB: Edited to correctly handle the 0 check digit. See Wikipedia International Standard Book Number for example isbn with check digit of 0.
Paul
类似的,使用循环和可怕的字符到字符串到整数的转换;]
Similar, with loop and awful char-to-string-to-int conversions ;]