您的位置:首页 > 编程语言

【算法】程序猿不写代码是不对的53

2017-05-11 17:46 120 查看
package com.kingdz.algorithm.time201705;

/**
* 校验ISBN号
*
* <pre>
* ISBN号形如:7-118-01984-4
* 7代表中国,118代表国防工业出版社,01984代表书名号,最后一位表示校验码
* 校验码的计算规则是用10到2这九个数分别顺序乘以ISBN的前九位数,所得乘积之和与11取模,其余数于11的差即是校验位的数值。
* 所以校验位的数值是0到10的任意一个数,其中10用X来表示
* </pre>
*
* @author kingdz
*
*/
public class Algo11 {

public static void main(String[] args) {
String isbn = "7-118-01984-4";
String okIsbn = checkISBN(isbn);
System.out.println("origin isbn[" + isbn + "]");
if (isbn.equals(okIsbn)) {
System.out.println("RIGHT");
} else {
System.out.println(okIsbn);
}
}

private static String checkISBN(String isbn) {
String newisbn = isbn.replace("-", "");
if (newisbn.length() != 10 || !newisbn.substring(0, 9).matches("^\\d+$")) {
return null;
}

int sum = 0;
int num = 10;
for (int i = 0; i < newisbn.length(); i++) {
sum = sum + num * Integer.parseInt("" + newisbn.charAt(i));
num--;
if (num == 1) {
break;
}
}
sum = sum % 11;
sum = Math.abs(11 - sum);
String c = "X";
if (sum < 10) {
c = "" + sum;
}

if (isbn.endsWith("" + c)) {
return isbn;
} else {
String ret = isbn.substring(0, isbn.length() - 1) + c;
return ret;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: