【算法】程序猿不写代码是不对的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; } } }
相关文章推荐
- 【算法】程序猿不写代码是不对的39
- 【算法】程序猿不写代码是不对的40
- 【算法】程序猿不写代码是不对的18
- 【算法】程序猿不写代码是不对的79
- 【算法】程序猿不写代码是不对的73
- 【算法】程序猿不写代码是不对的74
- 【算法】程序猿不写代码是不对的12
- 【算法】程序猿不写代码是不对的49
- 【算法】程序猿不写代码是不对的26
- 【算法】程序猿不写代码是不对的42
- 【算法】程序猿不写代码是不对的43
- 【算法】程序猿不写代码是不对的28
- 【算法】程序猿不写代码是不对的24
- 【算法】程序猿不写代码是不对的3
- 【算法】程序猿不写代码是不对的70
- 【算法】程序猿不写代码是不对的44
- 【算法】程序猿不写代码是不对的8
- 【算法】程序猿不写代码是不对的63
- 【算法】程序猿不写代码是不对的66
- 【算法】程序猿不写代码是不对的55