001package org.xbib.standardnumber.check.iso7064; 002 003import org.xbib.standardnumber.check.Digit; 004 005public class MOD3736 implements Digit { 006 007 private final static String ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 008 009 @Override 010 public String encode(String digits) { 011 int c = compute(digits); 012 return digits + c; 013 } 014 015 @Override 016 public boolean verify(String digits) { 017 return compute(digits) == 1; 018 } 019 020 @Override 021 public int compute(String digits) { 022 int modulus = ALPHABET.length(); 023 int check = modulus / 2; 024 for (int i = 0; i < digits.length(); i++) { 025 check = (((check > 0 ? check : modulus) * 2) % (modulus + 1) 026 + ALPHABET.indexOf(digits.charAt(i))) % modulus; 027 } 028 return check; 029 } 030 031 @Override 032 public int getDigit(String digits) { 033 return digits.charAt(digits.length() - 1); 034 } 035 036 @Override 037 public String getNumber(String digits) { 038 return digits.substring(0, digits.length() - 1); 039 } 040 041}