001package org.xbib.standardnumber.check.iso7064; 002 003import org.xbib.standardnumber.check.Digit; 004 005public class MOD112 implements Digit { 006 007 @Override 008 public String encode(String digits) { 009 int c = compute(digits); 010 return digits + (c == 10 ? 'X' : c); 011 } 012 013 @Override 014 public boolean verify(String digits) { 015 return compute(getNumber(digits)) == getDigit(digits); 016 } 017 018 @Override 019 public int compute(String digits) { 020 int p = 0; 021 for (int i = 0; i < digits.length(); ++i) { 022 int c = digits.charAt(i) - '0'; 023 p = 2 * (p + c); 024 } 025 p = p % 11; 026 return (12 - p) % 11; 027 } 028 029 @Override 030 public int getDigit(String digits) { 031 char c = digits.charAt(digits.length() -1); 032 return c == 'X' || c == 'x' ? 10 : c - '0'; 033 } 034 035 @Override 036 public String getNumber(String digits) { 037 return digits.substring(0, digits.length() -1); 038 } 039 040}