001package org.xbib.standardnumber.check.iso7064;
002
003import org.xbib.standardnumber.check.Digit;
004
005import java.math.BigDecimal;
006
007public class MOD9710 implements Digit {
008
009    private static final BigDecimal CONSTANT_97 = new BigDecimal(97);
010
011    @Override
012    public String encode(String digits) {
013        int c = compute(digits);
014        if (c == 0) {
015            return digits + "00";
016        } else if (c < 10) {
017            return digits + '0' + c;
018        } else {
019            return digits + c;
020        }
021    }
022
023    @Override
024    public boolean verify(String digits) {
025        return new BigDecimal(digits != null ? digits : "0").remainder(CONSTANT_97).intValue() == 1;
026    }
027
028    @Override
029    public int compute(String digits) {
030        return new BigDecimal(digits).remainder(CONSTANT_97).intValue();
031    }
032
033    @Override
034    public int getDigit(String digits) {
035        return Integer.parseInt(digits.substring(digits.length() - 2));
036    }
037
038    @Override
039    public String getNumber(String digits) {
040        return digits.substring(0, digits.length() - 2);
041    }
042}